package Ġio . ag ora . flat . ui . activity . home Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . compose . animation . Experimental Animation Api Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . interaction . Mutable Interaction Source Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . material . Bottom AppBar Ċ import Ġandroidx . compose . material . Divider Ċ import Ġandroidx . compose . material . IconButton Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . ripple . remember R ipple Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . tool ing . preview . Devices Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . Nav Graph . Companion . find Start Destination Ċ import Ġandroidx . navigation . Nav Host Controller Ċ import Ġcom . google . ac comp an ist . navigation . animation . remember Animated Nav Controller Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġio . ag ora . flat . R Ċ import Ġio . ag ora . flat . common .* Ċ import Ġio . ag ora . flat . common . login . Login Helper Ċ import Ġio . ag ora . flat . ui . activity . base . Base Compose Activity Ċ import Ġio . ag ora . flat . ui . compose . Flat Divider Ċ import Ġio . ag ora . flat . ui . compose . Flat Page Ċ import Ġio . ag ora . flat . ui . compose . Global Agreement Dialog Ċ import Ġio . ag ora . flat . ui . compose . Lifecycle Handler Ċ import Ġio . ag ora . flat . ui . theme . Fill MaxSize Ċ import Ġio . ag ora . flat . ui . theme . Max Height Ċ import Ġio . ag ora . flat . ui . theme . is Tablet Mode Ċ import Ġio . ag ora . flat . util . show Toast Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . flow . filter NotNull Ċ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠBase Compose Activity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠMain ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġval Ġlogin Helper Ġ= ĠLogin Helper ( this ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewModel : ĠMain ViewModel Ġby Ġview Models () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview State Ġby ĠviewModel . state . collect As State () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view State . protocol Ag reed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Screen ( view State ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle Handler ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Resume Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! viewModel . is LoggedIn ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . launch Login Activity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Agreement Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ag ree Ġ= Ġ{ ĠviewModel . agree Protocol () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Ref use Ġ= Ġ{ Ġfinish () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogin Helper . register () ĊĠĠĠĠĠĠĠ Ġobserver State () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserver State () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . room Play Info . filter NotNull (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . launch Room Play Activity ( this @ MainActivity , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . error . filter NotNull (). collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( it . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġlogin Helper . unregister () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Animation Api :: class ) Ċ @ Composable Ċ fun ĠMain Screen ( view State : ĠMain ViewState ) Ġ{ ĊĠĠĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĊĠĠĠ Ġif Ġ( view State . login State Ġ== ĠLogin State . Error ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLa unched Effect ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigator . launch Login Activity ( context ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠFlat Page Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġremember Animated Nav Controller () ĊĠĠĠĠĠĠĠ Ġvar Ġmain Tab Ġby Ġremember Ġ{ Ġmutable State Of ( Main Tab . Home ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( view State . login State Ġ== ĠLogin State . Login ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Tablet Mode ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tablet ( nav Controller , Ġmain Tab ) Ġ{ Ġmain Tab Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain ( nav Controller , Ġmain Tab ) Ġ{ Ġmain Tab Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ internal Ġfun ĠMain ( nav Controller : ĠNav Host Controller , Ġmain Tab : ĠMain Tab , Ġon Tab Selected : Ġ( Main Tab ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠColumn ( Modifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Navigation ( nav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( need Show Bottom Bar ( nav Controller )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Bottom Bar ( main Tab ) Ġ{ Ġselected Tab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġwhen Ġ( selected Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠScreen . Home . route ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠScreen . Cloud . route ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Single Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore State Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( nav Controller . graph . find Start Destination (). id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Tab Selected ( selected Tab ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ internal Ġfun ĠMain Tablet ( nav Controller : ĠNav Host Controller , Ġmain Tab : ĠMain Tab , Ġon Tab Selected : Ġ( Main Tab ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠĠĠ ĠBox ( Modifier . width ( 5 6 . dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMain Pad R ail ( selected Tab Ġ= Ġmain Tab ) Ġ{ Ġselected Tab Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġwhen Ġ( selected Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠScreen . Home Ext . route ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠScreen . Cloud Ext . route ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Single Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestore State Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( nav Controller . graph . find Start Destination (). id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave State Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Tab Selected ( selected Tab ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠBox ( Modifier . weight ( 1 f ), ĠAlignment . Center ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( main Tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠHome Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Room Create Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . Room Create . create Route ( Screen . Home Ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( Leaf Screen . Home Ext Init . create Route ( Screen . Home Ext )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Room Join Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . Room Join . create Route ( Screen . Home Ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( Leaf Screen . Home Ext Init . create Route ( Screen . Home Ext )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Room Detail Ġ= Ġ{ Ġr UUID , Ġp UUID Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . Room Detail . create Route ( Screen . Home Ext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġr UUID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp UUID )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( Leaf Screen . Home Ext Init . create Route ( Screen . Home Ext )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open UserProfile Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . UserProfile . create Route ( Screen . Home Ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( Leaf Screen . Home Ext Init . create Route ( Screen . Home Ext )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Setting Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . Settings . create Route ( Screen . Home Ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( Leaf Screen . Home Ext Init . create Route ( Screen . Home Ext )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠCloud Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Up loading Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . Cloud Up loading . create Route ( Screen . Cloud Ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Single Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Open Item Pick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( Leaf Screen . Cloud Upload Pick . create Route ( Screen . Cloud Ext )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Single Top Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDiv ider ( Max Height . width ( 1 . dp )) ĊĠĠĠĠĠĠĠ ĠApp Navigation ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 2 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Height (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Destination Ġ= ĠScreen . Home Ext . route , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠMain ĠPad ĠLeft ĠNavigator Ċ Ġ*/ Ċ @ Composable Ċ internal Ġfun ĠMain Pad R ail ( selected Tab : ĠMain Tab , Ġon Tab Selected : Ġ( Main Tab ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġhome Res Id Ġ= Ġwhen Ġ( selected Tab ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠR . drawable . ic _ home _ main _ selected ĊĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠR . drawable . ic _ home _ main _ normal ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcs Res Id Ġ= Ġwhen Ġ( selected Tab ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠR . drawable . ic _ home _ cloud storage _ selected ĊĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠR . drawable . ic _ home _ cloud storage _ normal ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ ĠFill MaxSize . background ( Material Theme . colors . background ), ĊĠĠĠĠĠĠĠ Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 1 0 0 . dp )) ĊĠĠĠĠĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġon Tab Selected ( Main Tab . Home ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( p ainter Resource ( home Res Id ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . height ( 2 4 . dp )) ĊĠĠĠĠĠĠĠ ĠBox Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Button ( onClick Ġ= Ġ{ Ġon Tab Selected ( Main Tab . Cloud Storage ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( p ainter Resource ( cs Res Id ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠMain Bottom Bar ( selected Tab : ĠMain Tab , Ġmodifier : ĠModifier Ġ= ĠModifier , Ġon Tab Selected : Ġ( Main Tab ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġval Ġhome Res Id Ġ= Ġwhen Ġ( selected Tab ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠR . drawable . ic _ home _ main _ selected ĊĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠR . drawable . ic _ home _ main _ normal ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcs Res Id Ġ= Ġwhen Ġ( selected Tab ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Tab . Cloud Storage Ġ-> ĠR . drawable . ic _ home _ cloud storage _ selected ĊĠĠĠĠĠĠĠ ĠMain Tab . Home Ġ-> ĠR . drawable . ic _ home _ cloud storage _ normal ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠColumn ( modifier ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFlat Divider () ĊĠĠĠĠĠĠĠ ĠBottom AppBar ( elevation Ġ= Ġ 0 . dp , ĠbackgroundColor Ġ= ĠMaterial Theme . colors . background ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Ġ= Ġremember R ipple ( bounded Ġ= Ġfalse , Ġradius Ġ= Ġ 5 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġon Tab Selected ( Main Tab . Home ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠAlignment . Center ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( p ainter Resource ( home Res Id ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinteraction Source Ġ= Ġremember Ġ{ ĠMutable Interaction Source () Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindication Ġ= Ġremember R ipple ( bounded Ġ= Ġfalse , Ġradius Ġ= Ġ 5 6 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ Ġon Tab Selected ( Main Tab . Cloud Storage ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĠAlignment . Center ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( p ainter Resource ( cs Res Id ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ @ Preview Ċ @ Preview ( device Ġ= ĠDevices . PIXEL _ C ) Ċ private Ġfun ĠMain Page Preview () Ġ{ ĊĠĠĠ Ġval Ġmain ViewState Ġ= ĠMain ViewState ( true , Ġlogin State Ġ= ĠLogin State . Login ) ĊĠĠĠ ĠMain Screen ( main ViewState ) Ċ }