/* Ċ ĠCopyright Ġ 2 0 2 0 ĠSpl endo ĠConsult ing ĠB . V . ĠThe ĠNe therlands ĊĊĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĊĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . ĊĊ Ġ*/ Ċ Ċ package Ġarchitecture Ċ Ċ /* Ġk tl int - disable Ġno - wildcard - imports Ġ*/ Ċ import Ġcom . spl endo . kal uga . alerts . Alert Presenter Ċ import Ġcom . spl endo . kal uga . architecture . navigation . Navigation Spec Ċ import Ġcom . spl endo . kal uga . architecture . navigation . ViewController Navigator Ċ import Ġcom . spl endo . kal uga . architecture . observable . Disposable Ċ import Ġcom . spl endo . kal uga . architecture . observable . Dispose Bag Ċ import Ġcom . spl endo . kal uga . architecture . view model . Base ViewModel Ċ import Ġcom . spl endo . kal uga . architecture . view model . Lifecycle Manager Ċ import Ġcom . spl endo . kal uga . architecture . view model . add Lifecycle Manager Ċ import Ġcom . spl endo . kal uga . architecture . view model . on Life Cycle Changed Ċ import Ġcom . spl endo . kal uga . bluetooth . Bluetooth Ċ import Ġcom . spl endo . kal uga . bluetooth . be ac ons . Be ac ons Ċ import Ġcom . spl endo . kal uga . bluetooth . device . Identifier Ċ import Ġcom . spl endo . kal uga . example . shared . view model . Example Tab Navigation Ċ import Ġcom . spl endo . kal uga . example . shared . view model . Example ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . architecture . Architecture Details ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . architecture . Architecture Input ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . architecture . Input Details Ċ import Ġcom . spl endo . kal uga . example . shared . view model . be ac ons . Be ac ons List ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . bluetooth . Bluetooth Device Detail ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . bluetooth . Bluetooth List ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . bluetooth . Device Details Spec Row Ċ import Ġcom . spl endo . kal uga . example . shared . view model . feature List . Feature List Navigation Action Ċ import Ġcom . spl endo . kal uga . example . shared . view model . feature List . Feature List ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . info .* Ċ import Ġcom . spl endo . kal uga . example . shared . view model . keyboard . Keyboard ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . link . Browser Navigation Actions Ċ import Ġcom . spl endo . kal uga . example . shared . view model . link . Browser Spec Row Ċ import Ġcom . spl endo . kal uga . example . shared . view model . link . Links ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . location . Location ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . permissions . Permission Navigation Bundle Spec Row Ċ import Ġcom . spl endo . kal uga . example . shared . view model . permissions . Permission View Ċ import Ġcom . spl endo . kal uga . example . shared . view model . permissions . Permission ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . permissions . Permissions List ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . resources . Button ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . resources . Color ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . resources . Label ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . resources . Resources List Navigation Action Ċ import Ġcom . spl endo . kal uga . example . shared . view model . resources . Resources List ViewModel Ċ import Ġcom . spl endo . kal uga . example . shared . view model . system . System Navigation Actions Ċ import Ġcom . spl endo . kal uga . example . shared . view model . system . System ViewModel Ċ import Ġcom . spl endo . kal uga . keyboard . Focus Handler Ċ import Ġcom . spl endo . kal uga . keyboard . Keyboard Manager Ċ import Ġcom . spl endo . kal uga . links . Links Builder Ċ import Ġcom . spl endo . kal uga . location . Location State Repo Builder Ċ import Ġcom . spl endo . kal uga . permissions . Permission Ċ import Ġcom . spl endo . kal uga . permissions . Permissions Ċ import Ġcom . spl endo . kal uga . permissions . bluetooth . Bluetooth Permission Ċ import Ġcom . spl endo . kal uga . permissions . calendar . Calendar Permission Ċ import Ġcom . spl endo . kal uga . permissions . camera . Camera Permission Ċ import Ġcom . spl endo . kal uga . permissions . contacts . Contacts Permission Ċ import Ġcom . spl endo . kal uga . permissions . location . Location Permission Ċ import Ġcom . spl endo . kal uga . permissions . micro phone . Micro phone Permission Ċ import Ġcom . spl endo . kal uga . permissions . notifications .* Ċ import Ġcom . spl endo . kal uga . permissions . storage . Storage Permission Ċ import Ġcom . spl endo . kal uga . resources . Styled StringBuilder Ċ import Ġcom . spl endo . kal uga . review . Review Manager Ċ import Ġplatform . Foundation . NS URL Ċ import Ġplatform . Foundation . NS UUID Ċ import Ġplatform . UIKit .* Ċ import Ġplatform . User Notifications . UN Authorization Option Alert Ċ import Ġplatform . User Notifications . UN Authorization Option Sound Ċ Ċ class ĠK NA r ch itecture Framework Ġ{ ĊĊĠĠĠ Ġfun Ġcreate Example ViewModel ( ĊĠĠĠĠĠĠĠ Ġparent : ĠUI ViewController , ĊĠĠĠĠĠĠĠ Ġcontainer View : ĠUIView , ĊĠĠĠĠĠĠĠ Ġfeatures List : Ġ() Ġ-> ĠUI ViewController , ĊĠĠĠĠĠĠĠ Ġinfo : Ġ() Ġ-> ĠUI ViewController ĊĠĠĠ Ġ): ĠExample ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠExample ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Nested ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Nested . Type . Replace ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer View , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExample Tab Navigation . Feature List Ġ-> Ġfeatures List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠExample Tab Navigation . Info Ġ-> Ġinfo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Feature List ViewModel ( parent : ĠUI ViewController ): ĠFeature List ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFeature List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Seg ue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Location Ġ-> Ġ" show Location " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Permissions Ġ-> Ġ" show Permissions " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Alerts Ġ-> Ġ" show Alerts " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . DateTime Picker Ġ-> Ġ" show DateTime Picker " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Loading Indicator Ġ-> Ġ" show HUD " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Architecture Ġ-> Ġ" show Architecture " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Keyboard Ġ-> Ġ" show Keyboard " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . System Ġ-> Ġ" show System " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Links Ġ-> Ġ" show Links " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Bluetooth Ġ-> Ġ" show Bluetooth " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Be ac ons Ġ-> Ġ" show Be ac ons " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Platform Specific Ġ-> Ġ" show Platform Specific " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFeature List Navigation Action . Resources Ġ-> Ġ" show Resources " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Info ViewModel ( parent : ĠUI ViewController ): ĠInfo ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInfo ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠReview Manager . Builder (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInfo Navigation . Dialog Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Present ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġaction . bundle ?. get ( Dialog Spec Row . Title Row ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġaction . bundle ?. get ( Dialog Spec Row . Message Row ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUI Alert Controller . alert Controller With Title ( title , Ġmessage , ĠUI Alert Controller Style Alert ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( UI Alert Action . action With Title (" OK ", ĠUI Alert Action Style Default ) Ġ{}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInfo Navigation . Link Ġ-> ĠNavigation Spec . Browser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNSURL . URL With String ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction . bundle !!. get ( Link Spec Row . Link Row ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Browser . Type . Normal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInfo Navigation . Mail Ġ-> ĠNavigation Spec . Email ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Email . Email Settings ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ= Ġaction . bundle ?. get ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMail Spec Row . To Row ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġaction . bundle ?. get ( Mail Spec Row . Subject Row ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Bluetooth List ViewModel ( parent : ĠUI ViewController , Ġbluetooth : ĠBluetooth , Ġcreate Device Details ViewController : Ġ( Identifier , ĠBluetooth ) Ġ-> ĠUI ViewController ): ĠBluetooth List ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBluetooth List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbluetooth , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Push ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġaction . bundle Ġ?: Ġreturn @ Push ĠUI ViewController () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġidentifier Ġ= ĠN SU UID ( u UID String Ġ= Ġbundle . get ( Device Details Spec Row . UUID Row )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Device Details ViewController ( identifier , Ġbluetooth ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Bluetooth Device Details ViewModel ( identifier : ĠIdentifier , Ġbluetooth : ĠBluetooth ): ĠBluetooth Device Detail ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBluetooth Device Detail ViewModel ( bluetooth , Ġidentifier ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Be ac ons List ViewModel ( parent : ĠUI ViewController , Ġservice : ĠBe ac ons ): ĠBe ac ons List ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBe ac ons List ViewModel ( service ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Permission List ViewModel ( parent : ĠUI ViewController , Ġcreate Permission ViewController : Ġ( Permission ) Ġ-> ĠUI ViewController ): ĠPermissions List ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPermissions List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Push ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= Ġaction . bundle Ġ?: Ġreturn @ Push ĠUI ViewController () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpermission Ġ= Ġwhen Ġ( bundle . get ( Permission Navigation Bundle Spec Row )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Bluetooth Ġ-> ĠBluetooth Permission ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Calendar Ġ-> ĠCalendar Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Camera Ġ-> ĠCamera Permission ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Contacts Ġ-> ĠContact s Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Location Ġ-> ĠLocation Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprecise Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Micro phone Ġ-> ĠMicro phone Permission ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Notifications Ġ-> ĠNotifications Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠU NA uthor ization Option Alert Ġor ĠU NA uthor ization Option Sound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPermission View . Storage Ġ-> ĠStorage Permission () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Permission ViewController ( permission ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Permission ViewModel ( permissions : ĠPermissions , Ġpermission : ĠPermission ): ĠPermission ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠPermission ViewModel ( permissions , Ġpermission ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Location ViewModel ( permission : ĠLocation Permission , Ġrepo Builder : ĠLocation State Repo Builder ): ĠLocation ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLocation ViewModel ( permission , Ġrepo Builder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Architecture Input ViewModel ( parent : ĠUI ViewController , Ġcreate Details ViewController : Ġ( Input Details ) Ġ-> ĠUI ViewController ): ĠArchitecture Input ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠArchitecture Input ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Present ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Details ViewController ( action . bundle ?. get ( action . type ) Ġ?: ĠInput Details ("", Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Architecture Details ViewModel ( parent : ĠUI ViewController , Ġinput Details : ĠInput Details , Ġon Dismiss : Ġ( Input Details ) Ġ-> ĠUnit ): ĠArchitecture Details ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠArchitecture Details ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput Details , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Dismiss ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompletion Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Dismiss ( action . bundle ?. get ( action . type ) Ġ?: ĠInput Details ("", Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Keyboard ViewModel ( focus Handler : ĠFocus Handler ): ĠKeyboard ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKeyboard ViewModel ( Keyboard Manager . Builder (), Ġfocus Handler ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate System ViewModel ( parent : ĠUI ViewController ): ĠSystem ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSystem ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem Navigation Actions . Network Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Seg ue (" show Network ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Resources ViewModel ( parent : ĠUI ViewController ): ĠResources List ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠResources List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Seg ue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources List Navigation Action . Button Ġ-> Ġ" show Button " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources List Navigation Action . Color Ġ-> Ġ" show Color " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResources List Navigation Action . Label Ġ-> Ġ" show Label " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Button ViewModel ( parent : ĠUI ViewController ) Ġ= ĠButton ViewModel ( ĊĠĠĠĠĠĠĠ ĠStyled StringBuilder . Provider (), ĊĠĠĠĠĠĠĠ ĠAlert Presenter . Builder ( parent ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġcreate Label ViewModel () Ġ= ĠLabel ViewModel ( Styled StringBuilder . Provider ()) ĊĊĠĠĠ Ġfun Ġcreate Color ViewModel ( parent : ĠUI ViewController ) Ġ= ĠColor ViewModel ( Alert Presenter . Builder ( parent )) ĊĊĠĠĠ Ġfun Ġ< VM Ġ: ĠBase ViewModel > Ġbind ( viewModel : ĠVM , Ġto : ĠUI ViewController , Ġon Lifecycle Changes : Ġon Life Cycle Changed ): ĠLifecycle Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠviewModel . add Lifecycle Manager ( to , Ġon Lifecycle Changes ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Links ViewModel ( ĊĠĠĠĠĠĠĠ Ġparent : ĠUI ViewController , ĊĠĠĠĠĠĠĠ Ġanimated : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġcompletion : Ġ(() Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġ): ĠLinks ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠLinks ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLinks Builder (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlert Presenter . Builder ( parent ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠView Controller Navigator ( parent ) Ġ{ Ġaction Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBrowser Navigation Actions . Open WebView Ġ-> ĠNavigation Spec . Browser ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNSURL . URL With String ( action . bundle !!. get ( Browser Spec Row . Url Spec Row )) !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Spec . Browser . Type . Normal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠExample ViewModel . observe Tabs ( stack View : ĠUI Stack View , Ġadd On Pressed : Ġ( UI Button , Ġ() Ġ-> ĠUnit ) Ġ-> ĠUnit ): ĠList < Disposable > Ġ{ ĊĠĠĠ Ġval Ġselected Button Dispose Bag Ġ= ĠDispose Bag () ĊĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġtabs . observe Initialized Ġ{ Ġtabs Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Button Dispose Bag . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack View . arrange d Sub views . forEach Ġ{ Ġsub View Ġ-> Ġ( sub View Ġas ĠUIView ). remove From Super view () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtabs . forEach Ġ{ Ġtab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠUI Button () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setTitle ( tab . title , ĠUI Control State Normal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setTitle Color ( UI Color . system Blue Color , ĠUI Control State Selected ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setTitle Color ( UI Color . system Blue Color , ĠUI Control State Highlight ed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setTitle Color ( UI Color . gray Color , ĠUI Control State Normal ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tab . observe Initialized Ġ{ Ġselected Tab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setSelected ( selected Tab Ġ== Ġtab ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. addTo ( selected Button Dispose Bag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Pressed ( button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . tab . post ( tab ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack View . add Arrange d Sub view ( button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠSystem ViewModel . observe Modules ( on Module Changed : Ġ( List < String >, Ġ( Int ) Ġ-> ĠUnit ) Ġ-> ĠUnit ): ĠDis posable Ġ= ĊĠĠĠ Ġmodules . observe Initialized Ġ{ Ġmodules Ġ-> ĊĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġmodules . map Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġon Module Changed ( moduleName ) Ġ{ Ġon Button T apped ( modules [ it ]) Ġ} ĊĠĠĠ Ġ} Ċ Ċ fun ĠFeature List ViewModel . observe Features ( on Features Changed : Ġ( List < String >, Ġ( Int ) Ġ-> ĠUnit ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġfeature . observe Initialized Ġ{ Ġfeatures Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtitles Ġ= Ġfeatures . map Ġ{ Ġfeature Ġ-> Ġfeature . title Ġ} ĊĠĠĠĠĠĠĠ Ġon Features Changed ( titles ) Ġ{ Ġindex Ġ-> Ġthis . on Feature Pressed ( features [ index ]) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠInfo ViewModel . observe Buttons ( on Info Buttons Changed : Ġ( List < String >, Ġ( Int ) Ġ-> ĠUnit ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġbuttons . observe Initialized Ġ{ Ġbuttons Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtitles Ġ= Ġbuttons . map Ġ{ Ġbutton Ġ-> Ġbutton . title Ġ} ĊĠĠĠĠĠĠĠ Ġon Info Buttons Changed ( titles ) Ġ{ Ġindex Ġ-> Ġthis . on Button Pressed ( buttons [ index ]) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠPermissions List ViewModel . observe Permissions ( on Permissions Changed : Ġ( List < Permission View >, Ġ( Int ) Ġ-> ĠUnit ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġpermissions . observe Initialized Ġ{ Ġpermissions Ġ-> ĊĠĠĠĠĠĠĠ Ġon Permissions Changed ( permissions ) Ġ{ Ġindex Ġ-> Ġthis . on Permission Pressed ( permissions [ index ]) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠResources List ViewModel . observe Resources ( on Resources Changed : Ġ( List < String >, Ġ( Int ) Ġ-> ĠUnit ) Ġ-> ĠUnit ): ĠDis posable Ġ{ ĊĠĠĠ Ġreturn Ġresources . observe Initialized Ġ{ Ġfeatures Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtitles Ġ= Ġfeatures . map Ġ{ Ġfeature Ġ-> Ġfeature . title Ġ} ĊĠĠĠĠĠĠĠ Ġon Resources Changed ( titles ) Ġ{ Ġindex Ġ-> Ġthis . on Resource Selected ( features [ index ]) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ