package Ġcom . element ary . tasks . core . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġcom . element ary . tasks . R Ċ import Ġcom . google . firebase . remote config . Firebase Remote Config Ċ import Ġcom . google . firebase . remote config . Firebase Remote Config Settings Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠRemote Prefs ( context : ĠContext ) Ġ{ ĊĊĠ Ġprivate Ġval Ġm Firebase Remote Config : ĠFirebase Remote Config ? Ġ= Ġtry Ġ{ ĊĠĠĠ ĠFirebase Remote Config . getInstance () ĊĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠ Ġnull ĊĠ Ġ} ĊĊĠ Ġprivate Ġval Ġm Observer s Ġ= Ġmutable ListOf < Sale Observer >() ĊĠ Ġprivate Ġval Ġm Update Observer s Ġ= Ġmutable ListOf < Update Observer >() ĊĠ Ġprivate Ġval Ġpm : ĠPackage Manager Ġ= Ġcontext . package Manager ĊĠ Ġprivate Ġval ĠpackageName : ĠString Ġ= Ġcontext . packageName ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġconfig Settings Ġ= ĠFirebase Remote Config Settings . Builder () ĊĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġthis . m Firebase Remote Config ?. set Config Settings Async ( config Settings ) ĊĠĠĠ Ġthis . m Firebase Remote Config ?. set Defaults Async ( R . xml . remote _ config _ defaults ) ĊĠĠĠ Ġfetch Config () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġfetch Config () Ġ{ ĊĠĠĠ Ġm Firebase Remote Config ?. fetch ( 3 6 0 0 )?. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠ ĠTim ber . d (" fetch Config : Ġ${ task . is Successful }") ĊĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Firebase Remote Config . fetch And Activate () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġdisplay Version Message () ĊĠĠĠĠĠ Ġif Ġ(! Module . is Pro ) Ġdisplay Sale Message () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġadd Update Observer ( observer : ĠUpdate Observer ) Ġ{ ĊĠĠĠ Ġif Ġ(! m Update Observer s . contains ( observer )) Ġ{ ĊĠĠĠĠĠ Ġm Update Observer s . add ( observer ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfetch Config () ĊĠ Ġ} ĊĊĠ Ġfun Ġremove Update Observer ( observer : ĠUpdate Observer ) Ġ{ ĊĠĠĠ Ġif Ġ( m Update Observer s . contains ( observer )) Ġ{ ĊĠĠĠĠĠ Ġm Update Observer s . remove ( observer ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġadd Sale Observer ( observer : ĠSale Observer ) Ġ{ ĊĠĠĠ Ġif Ġ(! m Observer s . contains ( observer )) Ġ{ ĊĠĠĠĠĠ Ġm Observer s . add ( observer ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfetch Config () ĊĠ Ġ} ĊĊĠ Ġfun Ġremove Sale Observer ( observer : ĠSale Observer ) Ġ{ ĊĠĠĠ Ġif Ġ( m Observer s . contains ( observer )) Ġ{ ĊĠĠĠĠĠ Ġm Observer s . remove ( observer ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdisplay Version Message () Ġ{ ĊĠĠĠ Ġval Ġversion Code Ġ= Ġm Firebase Remote Config ?. getLong ( VERSION _ CODE ) Ġ?: Ġ 0 ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġp Info Ġ= Ġpm . get Package Info ( packageName , Ġ 0 ) ĊĠĠĠĠĠ Ġval Ġver Code Ġ= Ġp Info . version Code ĊĠĠĠĠĠ Ġif Ġ( version Code Ġ> Ġver Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġversion Ġ= Ġm Firebase Remote Config ?. getString ( VERSION _ NAME ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġm Update Observer s ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġobserver . on Update ( version ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠPackage Manager . Name NotFoundException ) Ġ{ ĊĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġnotify No Update () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnotify No Update () Ġ{ ĊĠĠĠ Ġfor Ġ( observer Ġin Ġm Update Observer s ) Ġ{ ĊĠĠĠĠĠ Ġobserver . no Update () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġdisplay Sale Message () Ġ{ ĊĠĠĠ Ġval Ġis Sale Ġ= Ġm Firebase Remote Config ?. getBoolean ( S ALE _ STARTED ) Ġ?: Ġfalse ĊĠĠĠ Ġif Ġ( is Sale ) Ġ{ ĊĠĠĠĠĠ Ġval Ġexpiry Ġ= Ġm Firebase Remote Config ?. getString ( S ALE _ EXPI RY _ DATE ) Ġ?: Ġ"" ĊĠĠĠĠĠ Ġval Ġdiscount Ġ= Ġm Firebase Remote Config ?. getString ( S ALE _ VALUE ) Ġ?: Ġ"" ĊĠĠĠĠĠ Ġfor Ġ( observer Ġin Ġm Observer s ) Ġ{ ĊĠĠĠĠĠĠĠ Ġobserver . on Sale ( discount , Ġexpiry ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĠĠĠ Ġnotify No Sale () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġnotify No Sale () Ġ{ ĊĠĠĠ Ġfor Ġ( observer Ġin Ġm Observer s ) Ġ{ ĊĠĠĠĠĠ Ġobserver . no Sale () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinterface ĠUpdate Observer Ġ{ ĊĠĠĠ Ġfun ĠonUpdate ( version : ĠString ) ĊĊĠĠĠ Ġfun Ġno Update () ĊĠ Ġ} ĊĊĠ Ġinterface ĠSale Observer Ġ{ ĊĠĠĠ Ġfun Ġon Sale ( discount : ĠString , Ġexpiry Date : ĠString ) ĊĊĠĠĠ Ġfun Ġno Sale () ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠS ALE _ STARTED Ġ= Ġ" sale _ started " ĊĠĠĠ Ġprivate Ġconst Ġval ĠS ALE _ VALUE Ġ= Ġ" sale _ save _ value " ĊĠĠĠ Ġprivate Ġconst Ġval ĠS ALE _ EXPI RY _ DATE Ġ= Ġ" sale _ until _ time _ utc " ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠVERSION _ CODE Ġ= Ġ" version _ code " ĊĠĠĠ Ġprivate Ġconst Ġval ĠVERSION _ NAME Ġ= Ġ" version _ name " ĊĠ Ġ} Ċ } Ċ