package Ġco . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . System Clock Ċ import Ġandroid . preference . Preference Manager Ċ import Ġandroid . provider . Contacts Ċ import Ġandroid . view . View Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . channels . await Close Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . callback Flow Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjava . util .* Ċ import Ġkotlin . properties . ReadWrite Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ object ĠSharedPreferences Utils Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Ctx : ĠContext ĊĠĠĠ Ġlateinit Ġvar Ġpreferences : ĠSharedPreferences ĊĊĠĠĠ Ġfun Ġinit ( data : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Ctx Ġ= Ġdata ĊĠĠĠĠĠĠĠ Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( m Ctx ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġnickname Ġby ĠShared Preference Deleg ates . string ( null ) ĊĠĠĠ Ġvar Ġis Widget Open Ġby ĠShared Preference Deleg ates . boolean ( false ) ĊĊĠĠĠ Ġ// ĠĠĠ Ġvar Ġgiven _ name Ġby ĠShared Preference Deleg ates . string ("") ĊĠĠĠ Ġvar Ġfamily _ name Ġby ĠShared Preference Deleg ates . string ("") ĊĠĠĠ Ġvar Ġmail _ id Ġby ĠShared Preference Deleg ates . string ("") Ċ } Ċ Ċ object ĠShared Preference Deleg ates Ġ{ ĊĊĠĠĠ Ġfun Ġint ( defaultValue : ĠInt Ġ= Ġ 0 ) Ġ= Ġobject Ġ: ĠRead Write Property < SharedPreferences Utils , ĠInt > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property < *> ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . preferences . getInt ( property . name , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property <* >, Ġvalue : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . preferences . edit (). put Int ( property . name , Ġvalue ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlong ( defaultValue : ĠLong Ġ= Ġ 0 L ) Ġ= Ġobject Ġ: ĠRead Write Property < SharedPreferences Utils , ĠLong > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property < *> ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . preferences . getLong ( property . name , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property <* >, Ġvalue : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . preferences . edit (). put Long ( property . name , Ġvalue ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġboolean ( defaultValue : ĠBoolean Ġ= Ġfalse ) Ġ= Ġobject Ġ: ĠRead Write Property < SharedPreferences Utils , ĠBoolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property < *> ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . preferences . getBoolean ( property . name , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property <* >, Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . preferences . edit (). put Boolean ( property . name , Ġvalue ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfloat ( defaultValue : ĠFloat Ġ= Ġ 0 . 0 f ) Ġ= Ġobject Ġ: ĠRead Write Property < SharedPreferences Utils , ĠFloat > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property < *> ): ĠFloat Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . preferences . get Float ( property . name , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property <* >, Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . preferences . edit (). put Float ( property . name , Ġvalue ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstring ( defaultValue : ĠString ? Ġ= Ġnull ) Ġ= Ġobject Ġ: ĠRead Write Property < SharedPreferences Utils , ĠString ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property < *> ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . preferences . getString ( property . name , ĠdefaultValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property <* >, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . preferences . edit (). putString ( property . name , Ġvalue ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset String ( defaultValue : ĠSet < String >? Ġ= Ġnull ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRead Write Property < SharedPreferences Utils , ĠSet < String > ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property < *> ): ĠSet < String >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis Ref . preferences . getString Set ( property . name , ĠdefaultValue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠsetValue ( this Ref : ĠSharedPreferences Utils , Ġproperty : ĠK Property <* >, Ġvalue : ĠSet < String > ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis Ref . preferences . edit (). putString Set ( property . name , Ġvalue ). apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠView . click s (): ĠFlow < Unit > Ġ= Ġcallback Flow Ġ{ ĊĊĠĠĠ Ġlaunch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffer ( Unit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġawait Close Ġ{ ĊĠĠĠĠĠĠĠ Ġset OnClickListener ( null ) ĊĠĠĠ Ġ} Ċ }