package Ġcom . alf resco . content . data Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlinx . coroutines . flow . distinct Until Changed Ċ import Ġkotlinx . coroutines . flow . filter Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . flow . onStart Ċ Ċ class ĠSettings ( ĊĠĠĠ Ġval Ġcontext : ĠContext Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġshared Pref Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠ Ġprivate Ġval Ġtheme Key Ġ= Ġcontext . getString ( R . string . pref _ theme _ key ) ĊĠĠĠ Ġprivate Ġval Ġsync Network Key Ġ= Ġcontext . getString ( R . string . pref _ sync _ network _ key ) ĊĠĠĠ Ġprivate Ġval Ġpreference Changed Flow Ġ= ĠMutable Shared Flow < String >( extra Buffer Capacity Ġ= Ġ 1 ) ĊĊĠĠĠ Ġprivate Ġval Ġlistener Ġ= ĊĠĠĠĠĠĠĠ ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ Ġ_, Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreference Changed Flow . try Emit ( key ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġobserve Changes () Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Pref . register On Shared Preference ChangeListener ( listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtheme : ĠTheme ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġtheme From Stored Value ( shared Pref . getString ( theme Key , Ġnull )) ĊĊĠĠĠ Ġfun Ġobserve Theme (): ĠFlow < Theme > Ġ= ĊĠĠĠĠĠĠĠ Ġpreference Changed Flow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. onStart Ġ{ Ġemit ( theme Key ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ== Ġtheme Key Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtheme Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĊĠĠĠ Ġprivate Ġfun Ġtheme From Stored Value ( value : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ theme _ light _ value ) Ġ-> ĠTheme . Light ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ theme _ dark _ value ) Ġ-> ĠTheme . Dark ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ theme _ system _ value ) Ġ-> ĠTheme . System ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠTheme . System ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsync Network : ĠSync Network ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsync Network From Stored Value ( shared Pref . getString ( sync Network Key , Ġnull )) ĊĊĠĠĠ Ġprivate Ġfun Ġsync Network From Stored Value ( value : ĠString ?) Ġ= ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ sync _ network _ wifi _ value ) Ġ-> ĠSync Network . Wifi ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . pref _ sync _ network _ mobile _ value ) Ġ-> ĠSync Network . Mobile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSync Network . Wifi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcan Sync Over Meter ed Network : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġsync Network Ġ== ĠSync Network . Mobile ĊĊĠĠĠ Ġenum Ġclass ĠTheme Ġ{ ĊĠĠĠĠĠĠĠ ĠLight , ĊĠĠĠĠĠĠĠ ĠDark , ĊĠĠĠĠĠĠĠ ĠSystem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠSync Network Ġ{ ĊĠĠĠĠĠĠĠ ĠW ifi , ĊĠĠĠĠĠĠĠ ĠMobile ĊĠĠĠ Ġ} Ċ } Ċ