package Ġcom . cw lar son . device id . settings Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . view . update Padding Ċ import Ġandroidx . fragment . app . activity ViewModels Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . add Repe ating Job Ċ import Ġandroidx . preference . List Preference Ċ import Ġandroidx . preference . Preference Ċ import Ġandroidx . preference . Preference Fragment Compat Ċ import Ġandroidx . preference . Switch Preference Compat Ċ import Ġcom . cw lar son . device id . Build Config Ċ import Ġcom . cw lar son . device id . MainActivity ViewModel Ċ import Ġcom . cw lar son . device id . R Ċ import Ġcom . cw lar son . device id . app updates . Update Type Ċ import Ġcom . cw lar son . device id . util .* Ċ import Ġcom . google . android . play . core . install . model . Install Status Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġjavax . inject . Inject Ċ Ċ @ Android EntryPoint Ċ class ĠSettings Fragment Ġ: ĠPreference Fragment Compat () Ġ{ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġpreference Manager : ĠPreference Manager ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapp Update Utils : ĠApp Update Utils ĊĠĠĠ Ġprivate Ġval Ġmain Activity ViewModel Ġby Ġactivity ViewModels < MainActivity ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlayout Ġ= Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ ĠlistView . clip To Padding Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠlistView . clip Children Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠlistView . scroll Bar Style Ġ= ĠView . SCROLL BAR S _ OUT SIDE _ OVER LAY ĊĠĠĠĠĠĠĠ Ġif Ġ( main Activity ViewModel . two Pane ) ĠlistView ?. update Padding ( left Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . activity _ horizontal _ margin ), Ġright Ġ= Ġresources . get Dimension Pixel Size ( R . dim en . activity _ horizontal _ margin )) ĊĠĠĠĠĠĠĠ ĠlistView . apply System Windows ( apply Bottom Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlayout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġfind Preference < List Preference >( getString ( R . string . pref _ day night _ mode _ key )) ?. setOn Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Manager . set Dark Theme ( newValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfind Preference < Preference >( getString ( R . string . pref _ check _ for _ update _ key )) ?. let Ġ{ Ġpref Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . add Repe ating Job ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Utils . update State . collect Ġ{ Ġua Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . title Ġ= Ġwhen Ġ( ua ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate State . Yes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUpdate State . Yes But Not Allowed Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ title _ yes ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠUpdate State . No Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ title _ no ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpref . title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . add Repe ating Job ( Lifecycle . State . STARTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Utils . install State . collect Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . summary Ġ= Ġwhen ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInstall State . Failed Ġ-> ĠgetString ( R . string . pref _ check _ for _ update _ summary _ failed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall State . Initial Ġ-> ĠgetString ( R . string . pref _ check _ for _ update _ summary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInstall State . NoError Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( state . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . C ANCE LED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ c anceled ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . DOWNLOAD ING Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ download ing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . INST ALLED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ installed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . INSTALL ING Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ installing ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . PENDING Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ pending ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . UNKNOWN Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ unknown ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . DOWN LOADED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ downloaded ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Status . FAILED Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . pref _ check _ for _ update _ summary _ failed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠgetString ( R . string . pref _ check _ for _ update _ summary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpref . on Preference ClickListener Ġ= ĠPreference . On Preference ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Update Utils . check For Flex ible Update ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġpref . isVisible Ġ= Ġfalse Ġ// ĠApp ĠUpdates Ġare Ġnot Ġavailable Ġon ĠKit K at Ġand Ġbelow ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠFix Ġto Ġcommit Ġpreference Ġso Ġapp Ġrestart Ġdoesn 't Ġbreak Ġsaving Ġthe Ġvalue ĊĠĠĠĠĠĠĠ Ġfind Preference < Switch Preference Compat >( getString ( R . string . pref _ use _ fake _ update _ manager _ key )) ?. setOn Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( newValue Ġis ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Manager . use Fake Update Manager Ġ= ĠnewValue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfind Preference < List Preference >( getString ( R . string . pref _ fake _ update _ set _ end _ state _ key )) ?. setOn Preference ChangeListener Ġ{ Ġ_, ĠnewValue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif (! app Update Utils . update Fake App Update Manager State ( Update Type . valueOf ( newValue . toString ()))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast (" App Update M anger Ġis Ġnot ĠFake App Update Manager Wrapper ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Preferences ( savedInstanceState : ĠBundle ?, Ġroot Key : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Preferences From Resource ( R . xml . pref _ general , Ġroot Key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG Ġ&& ĠBuild . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Preferences From Resource ( R . xml . pref _ testing _ app _ update ) ĊĠĠĠ Ġ} Ċ }