package Ġme . sst tk kl . mr mem or izer Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . util . Log Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . launch Ċ import Ġme . sst tk kl . mr mem or izer . ui . utils . Live Today Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . Local Time Ċ Ċ object ĠApp Preferences Ġ{ ĊĊĠĠĠ Ġconst Ġval ĠNOT IFICATION _ CHANNEL _ ID Ġ= Ġ" review _ notification " ĊĊĠĠĠ Ġprivate Ġval Ġpref Ġ= ĠPreference Manager . getDefault SharedPreferences ( My App . context ) ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ STAT ISTICS _ UPDATED _ DATE Ġ= Ġ" statistics _ updated _ date " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TO DAY _ RE VIEW _ TIMES Ġ= Ġ" today _ review _ times " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TOTAL _ RE VIEW _ TIMES Ġ= Ġ" total _ review _ times " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TO DAY _ PUN CT U ALLY _ RE VIEW _ TIMES Ġ= Ġ" today _ p unct ually _ review _ times " ĊĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ TOTAL _ PUN CT U ALLY _ RE VIEW _ TIMES Ġ= Ġ" total _ p unct ually _ review _ times " ĊĊĠĠĠ Ġprivate Ġvar Ġstatistics Updated Date : ĠLocalDate ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠLocalDate . of Epoch Day ( pref . getLong ( KEY _ STAT ISTICS _ UPDATED _ DATE , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( KEY _ STAT ISTICS _ UPDATED _ DATE , Ġvalue . to Epoch Day ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLive Today . observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! statistics Updated Date . isEqual ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatistics Updated Date Ġ= ĠLocalDate . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday Review Times Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoday P unct ually Review Times Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ä»Ĭ æĹ¥ å¤į ä¹ł æ¬¡æķ° ĊĠĠĠ Ġvar Ġtoday Review Times : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpref . getLong ( KEY _ TO DAY _ RE VIEW _ TIMES , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( KEY _ TO DAY _ RE VIEW _ TIMES , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ æĢ» åħ± å¤į ä¹ł æ¬¡æķ° ĊĠĠĠ Ġvar Ġtotal Review Times : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpref . getLong ( KEY _ TOTAL _ RE VIEW _ TIMES , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( KEY _ TOTAL _ RE VIEW _ TIMES , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ä»Ĭ æĹ¥ åĩĨ æĹ¶ å¤į ä¹ł æ¬¡æķ° ĊĠĠĠ Ġvar Ġtoday P unct ually Review Times : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpref . getLong ( KEY _ TO DAY _ PUN CT U ALLY _ RE VIEW _ TIMES , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( KEY _ TO DAY _ PUN CT U ALLY _ RE VIEW _ TIMES , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ æĢ» åħ± åĩĨ æĹ¶ å¤į ä¹ł æ¬¡æķ° ĊĠĠĠ Ġvar Ġtotal P unct ually Review Times : ĠLong ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpref . getLong ( KEY _ TOTAL _ PUN CT U ALLY _ RE VIEW _ TIMES , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Long ( KEY _ TOTAL _ PUN CT U ALLY _ RE VIEW _ TIMES , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinc Review Time ( p unct ual : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtoday Review Times ++ ĊĠĠĠĠĠĠĠ Ġtotal Review Times ++ ĊĠĠĠĠĠĠĠ Ġif Ġ( p unct ual ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoday P unct ually Review Times ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtotal P unct ually Review Times ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠLog . d (" App Preferences ", Ġ" today Review Times : Ġ$ today Review Times ") ĊĠĠĠĠĠĠĠ ĠLog . d (" App Preferences ", Ġ" total Review Times : Ġ$ total Review Times ") ĊĠĠĠĠĠĠĠ ĠLog . d (" App Preferences ", Ġ" today P unct ually Review Times : Ġ$ today P unct ually Review Times ") ĊĠĠĠĠĠĠĠ ĠLog . d (" App Preferences ", Ġ" total P unct ually Review Times : Ġ$ total P unct ually Review Times ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconst Ġval ĠKEY _ DA IL Y _ NOTICE _ ENABLED Ġ= Ġ" daily _ notice _ enabled " ĊĠĠĠ Ġconst Ġval ĠKEY _ DA IL Y _ NOTICE _ TIME Ġ= Ġ" daily _ notice _ time " ĊĊĠĠĠ Ġvar Ġdaily Notice Enabled : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġpref . getBoolean ( KEY _ DA IL Y _ NOTICE _ ENABLED , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Boolean ( KEY _ DA IL Y _ NOTICE _ ENABLED , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdaily Notice Time : ĠLocal Time ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠLocal Time . of Second OfDay ( pref . getInt ( KEY _ DA IL Y _ NOTICE _ TIME , Ġ 3 6 0 0 Ġ* Ġ 2 0 ). to Long ()) ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpref . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. put Int ( KEY _ DA IL Y _ NOTICE _ TIME , Ġvalue . to Second OfDay ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠOn Daily Notice Config ChangeListener ( val Ġcallback : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġpref Listener Ġ= ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ Ġ_, Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== ĠKEY _ DA IL Y _ NOTICE _ ENABLED Ġ|| Ġkey Ġ== ĠKEY _ DA IL Y _ NOTICE _ TIME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister On Daily Notice Config ChangeListener ( listener : ĠOn Daily Notice Config ChangeListener ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpref . register On Shared Preference ChangeListener ( listener . pref Listener ) ĊĠĠĠ Ġ} Ċ }