package Ġcom . qu ittle . a 1 1 y ally Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Strict Mode Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . qu ittle . a 1 1 y ally . activity . Dialog Activity Ċ import Ġcom . qu ittle . a 1 1 y ally . analytics . firebase Analytics Ċ import Ġcom . qu ittle . a 1 1 y ally . analytics . log Preference Change Ċ import Ġcom . qu ittle . a 1 1 y ally . analytics . log Preference Removal Ċ import Ġcom . qu ittle . a 1 1 y ally . analyzer . A 1 1 y All y Accessibility Analyzer Ċ import Ġcom . qu ittle . a 1 1 y ally . base . if NotNull Ċ import Ġcom . qu ittle . a 1 1 y ally . base . isNull Ċ import Ġcom . qu ittle . a 1 1 y ally . crash ly t ics . crash ly t ics Ċ import Ġcom . qu ittle . a 1 1 y ally . crash ly t ics . record Exception Ċ import Ġcom . qu ittle . a 1 1 y ally . preferences . Preference Provider Ċ Ċ class ĠA 1 1 y All y Application Ġ: ĠApplication (), ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠP REFERENCE _ RESOURCES Ġ= Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . xml . preferences , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . xml . highlight _ issues _ preferences , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . xml . content _ description _ preferences , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . xml . linear _ navigation _ preferences ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpref Service Enabled Ġby Ġlazy Ġ{ ĠgetString ( R . string . pref _ service _ enabled ) Ġ} ĊĠĠĠ Ġprivate Ġvar Ġm Preference Provider : ĠPreference Provider ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build Config . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStrict Mode . set Thread Policy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrict Mode . Thread Policy . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. detect All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. penalty Log () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. penalty Death () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStrict Mode . set Vm Policy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠStrict Mode . Vm Policy . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. detect All () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. penalty Log () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ. penalty Death () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( ĊĠĠĠĠĠĠĠ Ġnullable SharedPreferences : ĠSharedPreferences ?, ĊĠĠĠĠĠĠĠ Ġkey : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnullable SharedPreferences . if NotNull Ġ{ Ġshared Preferences Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key . isNull ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcur Value Ġ= Ġshared Preferences . all [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Value Ġis ĠSet < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Analytics . log Preference Change ( key , Ġcur Value . join ToString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Value Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Analytics . log Preference Change ( key , Ġcur Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Value Ġis ĠNumber Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Analytics . log Preference Change ( key , Ġcur Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Value Ġis ĠBoolean Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Analytics . log Preference Change ( key , Ġcur Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Value . isNull () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Analytics . log Preference Removal ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= Ġcur Value . java Class . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrash ly t ics . record Exception (" Unsupported Ġshared Ġpreferences Ġtype : Ġ$ clazz ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pref Service Enabled Ġ== Ġkey Ġ&& Ġshared Preferences . getBoolean ( key , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . start Service ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( application Context , ĠA 1 1 y All y Accessibility Analyzer :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġinitialize Preferences () ĊĠĠĠĠĠĠĠ Ġinitialize Preference Controller () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Preferences () Ġ{ ĊĠĠĠĠĠĠĠ ĠP REFERENCE _ RESOURCES . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreference Manager . setDefault Values ( this , Ġit , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠPreference Manager . getDefault SharedPreferences ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. register On Shared Preference ChangeListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Preference Controller () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHold Ġon Ġto Ġthe Ġreference Ġto Ġprevent Ġit Ġfrom Ġbeing Ġgarbage Ġcollected . ĠThe Ġreference Ġis ĊĠĠĠĠĠĠĠ Ġ// Ġotherwise Ġunused . ĊĠĠĠĠĠĠĠ Ġm Preference Provider Ġ= ĠPreference Provider ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Highlight Issues Update Ġ{ Ġenabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Content Description ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Linear Navigation Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Display Content Description Update Ġ{ Ġenabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Highlight Issues ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Linear Navigation Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Linear Navigation Enabled Update Ġ{ Ġenabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog Activity . show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ A 1 1 y All y Application , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . linear _ navigation _ overlay _ un available _ dialog _ message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Linear Navigation Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Highlight Issues ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Content Description ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStart Ġlistening ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Resume () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ