package Ġcom . the apache 6 4 . stack zy . ui . navigation Ċ Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġcom . ark iv an ov . de compose . Component Context Ċ import Ġcom . ark iv an ov . de compose . Experimental De compose Api Ċ import Ġcom . ark iv an ov . de compose . extensions . compose . jetbrains . Children Ċ import Ġcom . ark iv an ov . de compose . extensions . compose . jetbrains . animation . child . cross fade Scale Ċ import Ġcom . ark iv an ov . de compose . router . pop Ċ import Ġcom . ark iv an ov . de compose . router . push Ċ import Ġcom . ark iv an ov . de compose . router . replace Current Ċ import Ġcom . ark iv an ov . de compose . router . router Ċ import Ġcom . ark iv an ov . ess enty . parcel able . Parcelable Ċ import Ġcom . github . the apache 6 4 . g pa . model . Account Ċ import Ġcom . the apache 6 4 . stack zy . di . App Component Ċ import Ġcom . the apache 6 4 . stack zy . di . D agger App Component Ċ import Ġcom . the apache 6 4 . stack zy . model . Android App Wrapper Ċ import Ġcom . the apache 6 4 . stack zy . model . Android Device Wrapper Ċ import Ġcom . the apache 6 4 . stack zy . model . Library Wrapper Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . app detail . App Detail Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . app list . App List Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . dev ic elist . Device List Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . lib detail . Library Detail Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . lib list . Library List Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . login . Log In Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . path way . Path way Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . splash . Splash Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . ui . feature . update . Update Screen Component Ċ import Ġcom . the apache 6 4 . stack zy . util . A pk Source Ċ import Ġcom . tox ic bak ery . logging . Ar bor Ċ import Ġjava . awt . Desktop Ċ import Ġjava . net . URI Ċ Ċ /** Ċ Ġ* ĠAll Ġnavigation Ġdecisions Ġare Ġmade Ġfrom Ġhere Ċ Ġ*/ Ċ class ĠNav Host Component ( ĊĠĠĠ Ġprivate Ġval Ġcomponent Context : ĠComponent Context Ċ ) Ġ: ĠComponent , ĠComponent Context Ġby Ġcomponent Context Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAvailable Ġscreens Select App ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsealed Ġclass ĠConfig Ġ: ĠParcel able Ġ{ ĊĠĠĠĠĠĠĠ Ġobject ĠSpl ash Ġ: ĠConfig () ĊĠĠĠĠĠĠĠ Ġobject ĠSelect Path way Ġ: ĠConfig () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠLog In ( val Ġshould Go To Play Store : ĠBoolean ) Ġ: ĠConfig () ĊĠĠĠĠĠĠĠ Ġobject ĠDevice List Ġ: ĠConfig () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠApp List ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapk Source : ĠA pk Source < Android Device Wrapper , ĠAccount > ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠConfig () ĊĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠApp Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapk Source : ĠA pk Source < Android Device Wrapper , ĠAccount >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġandroid App : ĠAndroid App Wrapper ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠConfig () ĊĊĠĠĠĠĠĠĠ Ġobject ĠUpdate Ġ: ĠConfig () ĊĠĠĠĠĠĠĠ Ġobject ĠLibrary List Ġ: ĠConfig () ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠLibrary Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlibrary Wrapper : ĠLibrary Wrapper ĊĠĠĠĠĠĠĠ Ġ) Ġ: ĠConfig () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġapp Component : ĠApp Component Ġ= ĠD agger App Component ĊĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRouter Ġconfiguration ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġrouter Ġ= Ġrouter < Config , ĠComponent >( ĊĠĠĠĠĠĠĠ Ġinitial Configuration Ġ= ĠConfig . Splash , ĊĠĠĠĠĠĠĠ Ġchild Factory Ġ= Ġ:: create Screen Component ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhen Ġa Ġnew Ġnavigation Ġrequest Ġmade , Ġthe Ġscreen Ġwill Ġbe Ġcreated Ġby Ġthis Ġmethod . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcreate Screen Component ( config : ĠConfig , Ġcomponent Context : ĠComponent Context ): ĠComponent Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( config ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Splash Ġ-> ĠSpl ash Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Sync Finished Ġ= Ġ:: on Splash Sync Finished , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Needed Ġ= Ġ:: on Update Needed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Select Path way Ġ-> ĠPath way Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon A db Selected Ġ= Ġ:: on Path way A db Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Log In Needed Ġ= Ġ:: on Log In Needed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Play Store Selected Ġ= Ġ:: on Path way Play Store Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Libraries Selected Ġ= Ġ:: on Path way Libraries Selected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Log In Ġ-> ĠLog In Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon LoggedIn Ġ= Ġ:: on LoggedIn , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Clicked Ġ= Ġ:: on Back Clicked , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshould Go To Play Store Ġ= Ġconfig . should Go To Play Store ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Device List Ġ-> ĠDevice List Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Device Selected Ġ= Ġ:: on Device Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Clicked Ġ= Ġ:: on Back Clicked , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . App List Ġ-> ĠApp List Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk Source Ġ= Ġconfig . apk Source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon App Selected Ġ= Ġ:: on App Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Clicked Ġ= Ġ:: on Back Clicked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . App Detail Ġ-> ĠApp Detail Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected App Ġ= Ġconfig . android App , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk Source Ġ= Ġconfig . apk Source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Library Selected Ġ= Ġ:: on Library Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Clicked Ġ= Ġ:: on Back Clicked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Update Ġ-> ĠUpdate Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Library List Ġ-> ĠLibrary List Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Library Clicked Ġ= Ġ:: on Library Clicked , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Clicked Ġ= Ġ:: on Back Clicked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠConfig . Library Detail Ġ-> ĠLibrary Detail Screen Component ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Component Ġ= Ġapp Component , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Context Ġ= Ġcomponent Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Clicked Ġ= Ġ:: on Back Clicked , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon App Clicked Ġ= Ġ:: on App Selected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Wrapper Ġ= Ġconfig . library Wrapper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Log In Needed Ġ= Ġ:: on Log In Needed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġa Ġlibrary Ġclicked ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Library Clicked ( library Wrapper : ĠLibrary Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . Library Detail ( library Wrapper )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Opt In ( Experimental De compose Api :: class ) ĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġoverride Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠ ĠChildren ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter State Ġ= Ġrouter . state , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Ġ= Ġcross fade Scale () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ Ġchild Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . instance . render () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġsplash Ġfinish Ġdata Ġsync ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Splash Sync Finished () Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . replace Current ( Config . Select Path way ) ĊĠĠĠĠĠĠĠ Ġ/* router . push ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . App Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Device ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" S amsung ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" some Model ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevice ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" R 5 2 M 6 0 4 X 1 8 E ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDevice State . DEVICE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid App ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPackage (" a . i "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPackage (" com . the apache 6 4 . top corn "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) */ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġplay Ġstore Ġselected Ġfrom Ġthe Ġpath way Ġscreen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Path way Play Store Selected ( account : ĠAccount ) Ġ{ ĊĠĠĠĠĠĠĠ ĠA rb or . d (" Showing Ġselect Ġapp ") ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . App List ( A pk Source . Play Store ( account ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġwill Ġbe Ġinvoked Ġwhen Ġlogin Ġis Ġneeded Ġ( either Ġlogin Ġpressed Ġor Ġauthentication Ġfailed ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Log In Needed ( should Go To Play Store : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . Log In ( should Go To Play Store )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġlogin Ġsucceeded . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon LoggedIn ( should Go To Play Store : ĠBoolean , Ġaccount : ĠAccount ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( should Go To Play Store ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . replace Current ( Config . App List ( A pk Source . Play Store ( account ))) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA rb or . d (" on LoggedIn : ĠMoving Ġback ...") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . pop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġa db Ġselected Ġfrom Ġthe Ġpath way Ġscreen ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Path way A db Selected () Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . Device List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Path way Libraries Selected () Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . Library List ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġa Ġdevice Ġselected ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Device Selected ( android Device : ĠAndroid Device Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . App List ( A pk Source . A db ( android Device ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġthe Ġapp Ġgot Ġselected ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon App Selected ( ĊĠĠĠĠĠĠĠ Ġapk Source : ĠA pk Source < Android Device Wrapper , ĠAccount >, ĊĠĠĠĠĠĠĠ Ġandroid App Wrapper : ĠAndroid App Wrapper ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrouter . push ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConfig . App Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapk Source Ġ= Ġapk Source , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid App Ġ= Ġandroid App Wrapper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġlibrary Ġselected ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Library Selected ( library Wrapper : ĠLibrary Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠ ĠDesktop . get Desktop (). browse ( URI ( library Wrapper . website )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġan Ġupdate Ġis Ġnecessary ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠonUpdate Needed () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Update Ġneeded ") ĊĠĠĠĠĠĠĠ Ġrouter . push ( Config . Update ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġback Ġarrow Ġpressed ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġon Back Clicked () Ġ{ ĊĠĠĠĠĠĠĠ ĠA rb or . d (" Back Ġclicked Ġpop ping ") ĊĠĠĠĠĠĠĠ Ġrouter . pop () ĊĠĠĠ Ġ} ĊĊ Ċ }