package Ġcom . sd ud uz og . s li ml a unch er Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Nav Destination Ċ import Ġandroidx . navigation . Navigation . find Nav Controller Ċ import Ġcom . sd ud uz og . s li ml a unch er . ui . main . Main ViewModel ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠSharedPreferences . On Shared Preference ChangeListener , ĠNav Controller . On Destination Changed Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsettings : ĠSharedPreferences ĊĠĠĠ Ġprivate Ġval Ġlabel Ġ= Ġ" main _ fragment " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcurrent Label : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠMain ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnavigator : ĠNav Controller ĊĠĠĠ Ġvar Ġon Back Pressed Listener : ĠOn Back Pressed Listener ? Ġ= Ġnull ĊĊĊĠĠĠ Ġvar Ġdispatcher : ĠSubject Ġ= Ġobject Ġ: ĠSubject () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġob servers : ĠMutable Set < Observer > Ġ= Ġmutable Set Of () ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġattach Observer ( o : ĠObserver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . add ( o ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdetach Observer ( o : ĠObserver ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġob servers . remove ( o ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnotify Observer s () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( o Ġin Ġob servers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo . update (" on Back Pressed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . main _ activity ) ĊĠĠĠĠĠĠĠ Ġsettings Ġ= Ġget SharedPreferences ( getString ( R . string . prefs _ settings ), ĠMODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġsettings . register On Shared Preference ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġnavigator Ġ= Ġfind Nav Controller ( this , ĠR . id . nav _ host _ fragment ) ĊĠĠĠĠĠĠĠ Ġnavigator . add On Destination Changed Listener ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this ). get ( Main ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ ĠviewModel . refresh Apps () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġoverride Pending Transition ( android . R . anim . fade _ in , Ġandroid . R . anim . fade _ out ) ĊĠĠĠĠĠĠĠ Ġtoggle StatusBar () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Window Focus Changed ( has Focus : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Window Focus Changed ( has Focus ) ĊĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġtoggle StatusBar () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( shared Preferences : ĠSharedPreferences ?, Ġs : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( s . equals ( getString ( R . string . prefs _ settings _ key _ theme ), Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( s . equals ( getString ( R . string . prefs _ settings _ key _ hide _ status _ bar ), Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoggle StatusBar () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Theme (): ĠResources . Theme Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtheme Ġ= Ġsuper . get Theme () ĊĠĠĠĠĠĠĠ Ġsettings Ġ= Ġget SharedPreferences ( getString ( R . string . prefs _ settings ), ĠMODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġval Ġactive Ġ= Ġsettings . getInt ( getString ( R . string . prefs _ settings _ key _ theme ), Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġtheme . apply Style ( resolve Theme ( active ), Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtheme ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġdispatcher . notify Observer s () ĊĠĠĠĠĠĠĠ Ġif Ġ( current Label Ġ!= Ġlabel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġelse Ġon Back Pressed Listener ?. on Back Press () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġthe Ġactivity Ġaware Ġof Ġthe Ġcurrent Ġdestination Ġin Ġour ĠNav Controller . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Destination Changed ( controller : ĠNav Controller , Ġdestination : ĠNav Destination , Ġarguments : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Label Ġ= Ġdestination . label . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ ENABLE _ ADMIN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠRESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Registered ĠAs ĠAdmin ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġ" Failed Ġto Ġregister Ġas ĠAdmin ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow System UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide System UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . decor View . system Ui Visibility Ġ= Ġ( View . SYSTEM _ UI _ FLAG _ LAYOUT _ ST ABLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ LAYOUT _ FULL SCREEN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠView . SYSTEM _ UI _ FLAG _ FULL SCREEN ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle StatusBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Hidden Ġ= Ġsettings . getBoolean ( getString ( R . string . prefs _ settings _ key _ hide _ status _ bar ), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Hidden ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide System UI () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow System UI () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġresolve Theme ( i : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . App Dark Theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . App Grey Theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . App Te al Theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . App C andy Theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . App P ink Theme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . App Theme ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ CODE _ ENABLE _ ADMIN Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinterface ĠOn Back Pressed Listener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Back Press () ĊĠĠĠĠĠĠĠ Ġfun Ġon Back Pressed () ĊĠĠĠ Ġ} Ċ } Ċ