Ċ Ċ package Ġdev . pat rick gold . fl or is board . settings Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . preference . Preference Fragment Compat Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġdev . pat rick gold . fl or is board . R Ċ import Ġdev . pat rick gold . fl or is board . databinding . Settings Activity Binding Ċ import Ġdev . pat rick gold . fl or is board . ime . core . Pref Helper Ċ import Ġdev . pat rick gold . fl or is board . ime . core . Subtype Manager Ċ import Ġdev . pat rick gold . fl or is board . ime . text . layout . LayoutManager Ċ import Ġdev . pat rick gold . fl or is board . settings . fragments .* Ċ import Ġdev . pat rick gold . fl or is board . util . App Version Utils Ċ import Ġdev . pat rick gold . fl or is board . util . PackageManager Utils Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Main Scope Ċ Ċ internal Ġconst Ġval ĠFR AG MENT _ TAG Ġ= Ġ" FRAGMENT _ TAG " Ċ private Ġconst Ġval ĠP REF _ RES _ ID Ġ= Ġ" PRE F _ RES _ ID " Ċ private Ġconst Ġval ĠSELECT ED _ ITEM _ ID Ġ= Ġ" SELECTED _ ITEM _ ID " Ċ private Ġconst Ġval ĠAD V ANCED _ REQ _ CODE Ġ= Ġ 0 x 1 4 5 F Ċ Ċ class ĠSettings MainActivity Ġ: ĠAppCompatActivity (), ĊĠĠĠ ĠBottom Navigation View . On Navigation ItemSelected Listener , ĊĠĠĠ ĠSharedPreferences . On Shared Preference ChangeListener , ĊĠĠĠ ĠCor outine Scope Ġby ĠMain Scope () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠSettings Activity Binding ĊĠĠĠ Ġlateinit Ġvar Ġlayout Manager : ĠLayout Manager ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprefs : ĠPref Helper ĊĠĠĠ Ġlateinit Ġvar Ġsubtype Manager : ĠSub type Manager ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs Ġ= ĠPref Helper . getDefaultInstance ( this ) ĊĠĠĠĠĠĠĠ Ġprefs . init Default Preferences () ĊĠĠĠĠĠĠĠ Ġprefs . sync () ĊĠĠĠĠĠĠĠ Ġsubtype Manager Ġ= ĠSub type Manager ( this , Ġprefs ) ĊĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLayout Manager ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmode Ġ= Ġwhen Ġ( prefs . advanced . settings Theme ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" light " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" dark " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ YES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" auto " Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠAppCompat Delegate . MODE _ N IGHT _ UNSPECIFIED ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAppCompat Delegate . setDefault Night Mode ( mode ) ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠSettings Activity Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠNOTE : Ġusing ĠfindViewById () Ġinstead Ġof Ġview Ġbinding Ġbecause Ġthe Ġbinding Ġdoes Ġnot Ġinclude ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠ Ġa Ġreference Ġto Ġthe Ġincluded Ġlayout ... ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation . setOn Navigation ItemSelected Listener ( this ) ĊĠĠĠĠĠĠĠ Ġbinding . bottom Navigation . selected ItemId Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState ?. getInt ( SELECTED _ ITEM _ ID ) Ġ?: ĠR . id . settings __ navigation __ home ĊĊĠĠĠĠĠĠĠ ĠApp Version Utils . update Version On Install And Last Use ( this , Ġprefs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġout State . put Int ( SELECTED _ ITEM _ ID , Ġbinding . bottom Navigation . selected ItemId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Navigation ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ navigation __ home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. title Ġ= ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . settings __ home __ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . fl or is _ app _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Fragment ( Home Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ navigation __ keyboard Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setTitle ( R . string . settings __ keyboard __ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Fragment ( Keyboard Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ navigation __ typing Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setTitle ( R . string . settings __ typing __ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Fragment ( Typing Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ navigation __ theme Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setTitle ( R . string . settings __ theme __ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Fragment ( Theme Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ navigation __ gest ures Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. setTitle ( R . string . settings __ gest ures __ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Fragment ( Gest ures Fragment ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Fragment ( fragment : ĠFragment ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsupport FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ( binding . page Frame . id , Ġfragment , ĠFR AG MENT _ TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. commit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . settings _ main _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( binding . bottom Navigation . selected ItemId Ġ!= ĠR . id . settings __ navigation __ home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . bottom Navigation . selected ItemId Ġ= ĠR . id . settings __ navigation __ home ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ menu _ help Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbrowser Intent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse ( resources . getString ( R . string . fl or is board __ repo _ url )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( browser Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ menu _ advanced Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( Intent ( this , ĠAdvanced Activity :: class . java ), ĠAD V ANCED _ REQ _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings __ menu _ about Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠAbout Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠAD V ANCED _ REQ _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠAdvanced Activity . RESULT _ AP PLY _ THEME ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecreate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( sp : ĠSharedPreferences ?, Ġkey : ĠString ?) Ġ{} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Launcher Icon Status () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet ĠLaunch er Alias Ġenabled / disabled Ġstate Ġjust Ġbefore Ġdestroy ing / pa using Ġthis Ġactivity ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . advanced . show App Icon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager Utils . show App Icon ( this ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager Utils . hide App Icon ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . shared . register On Shared Preference ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . shared . unregister On Shared Preference ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġupdate Launcher Icon Status () ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . shared . unregister On Shared Preference ChangeListener ( this ) ĊĠĠĠĠĠĠĠ Ġupdate Launcher Icon Status () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġabstract Ġclass ĠSettings Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġprotected Ġlateinit Ġvar Ġsettings MainActivity : ĠSettings MainActivity ĊĠĠĠĠĠĠĠ Ġprotected Ġlateinit Ġvar Ġsubtype Manager : ĠSub type Manager ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings MainActivity Ġ= Ġactivity Ġas ĠSettings MainActivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubtype Manager Ġ= Ġsettings MainActivity . subtype Manager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠPref Fragment Ġ: ĠPreference Fragment Compat () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcreate From Resource ( pref Res Id : ĠInt ): ĠPref Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġargs . put Int ( PRE F _ RES _ ID , Ġpref Res Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠPref Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġargs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Preferences From Resource ( arguments ?. getInt ( PRE F _ RES _ ID ) Ġ?: Ġ 0 , Ġroot Key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . is Focus able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistView . is Nested Scrolling Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ