package Ġse . bar sk . park . storage Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġse . bar sk . park . Build Config Ċ import Ġse . bar sk . park . R Ċ import Ġse . bar sk . park . utils . Utils Ċ import Ġse . bar sk . park . utils . Time Utils Ċ Ċ /** Ċ Ġ* ĠClass Ġfor Ġhand ing Ġall Ġinteractions Ġwith Ġthe ĠSharedPreferences Ċ Ġ*/ Ċ class ĠShared Prefs ( private Ġval Ġcontext : ĠContext , Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfirst Version Code Ġ= Ġcontext . getString ( R . string . key _ first _ version _ code ) ĊĠĠĠ Ġprivate Ġval Ġfirst Version Name Ġ= Ġcontext . getString ( R . string . key _ first _ version _ name ) ĊĠĠĠ Ġprivate Ġval Ġcurrent Version Code Ġ= Ġcontext . getString ( R . string . key _ current _ version _ code ) ĊĠĠĠ Ġprivate Ġval Ġprevious Version Code Ġ= Ġcontext . getString ( R . string . key _ previous _ version _ code ) ĊĠĠĠ Ġprivate Ġval Ġserver Url Ġ= Ġcontext . getString ( R . string . key _ park _ server _ url ) ĊĠĠĠ Ġprivate Ġval Ġusage Statistics Ġ= Ġcontext . getString ( R . string . key _ usage _ statistics ) ĊĠĠĠ Ġprivate Ġval Ġcrash Reporting Ġ= Ġcontext . getString ( R . string . key _ crash _ reporting ) ĊĠĠĠ Ġprivate Ġval Ġdefault Usage Statistics Ġ= Ġcontext . getString ( R . string . default _ usage _ statistics ). to Boolean () ĊĠĠĠ Ġprivate Ġval Ġrefresh Interval Ġ= Ġcontext . getString ( R . string . key _ refresh _ interval ) ĊĠĠĠ Ġprivate Ġval Ġon Wait List Ġ= Ġcontext . getString ( R . string . key _ on _ wait _ list ) ĊĠĠĠ Ġprivate Ġval Ġdefault On Wait List Ġ= Ġcontext . getString ( R . string . default _ on _ wait _ list ). to Boolean () ĊĠĠĠ Ġprivate Ġval Ġprivacy On Board ing Ġ= Ġcontext . getString ( R . string . key _ privacy _ on _ boarding ) ĊĠĠĠ Ġprivate Ġval Ġdefault Privacy On Board ing Ġ= Ġcontext . getString ( R . string . default _ privacy _ on _ boarding ). to Boolean () ĊĊĠĠĠ Ġvar Ġsettings ChangeListener : ĠSettings ChangeListener ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġinternal Server ChangeListener Ġ= ĠInternal Server ChangeListener () ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġput Setting If NotExist ( first Version Code , ĠBuild Config . VERSION _ CODE . toString ()) ĊĠĠĠĠĠĠĠ Ġput Setting If NotExist ( current Version Code , ĠBuild Config . VERSION _ CODE . toString ()) ĊĠĠĠĠĠĠĠ Ġput Setting If NotExist ( first Version Name , ĠBuild Config . VERSION _ NAME ) ĊĠĠĠĠĠĠĠ Ġupgrade IfNeeded () ĊĠĠĠĠĠĠĠ Ġshared Preferences . register On Shared Preference ChangeListener ( internal Server ChangeListener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Setting ( key : ĠString , ĠdefaultValue : ĠString Ġ= Ġcontext . getString ( R . string . the _ empty _ string )): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen Ġgiven Ġa Ġnon - null Ġdefault Ġvalue ĠgetString Ġwill Ġnot Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġshared Preferences . getString ( key , ĠdefaultValue ) !! ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġput Setting ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . putString ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġput Setting ( key : ĠString , Ġvalue : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . put Boolean ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġput Setting If NotExist ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! shared Preferences . contains ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Setting ( key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupgrade IfNeeded () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstored Version Code Ġ= Ġread Setting ( current Version Code ) ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Version Code Ġ= ĠBuild Config . VERSION _ CODE . toString () ĊĠĠĠĠĠĠĠ Ġif Ġ( stored Version Code Ġ!= Ġcurrent Version Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( previous Version Code , Ġstored Version Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( this . current Version Code , Ġcurrent Version Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġupgrade Past 5 ( stored Version Code . toInt (), Ġcurrent Version Code . toInt ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIn Ġversion Ġ 2 . 1 Ġ( version Ġcode Ġ 6 ) Ġa Ġnew Ġprivacy Ġon Ġboard ing Ġdialog Ġwas Ġintroduced ĊĠĠĠĠ Ġ* Ġwhere Ġthe Ġuser Ġhave Ġto Ġchoose Ġif Ġthey Ġwant ĠO park Ġto Ġcollect Ġusage Ġstatistics Ġor Ġnot . ĊĠĠĠĠ Ġ* ĠFor get Ġthe Ġprevious Ġstats Ġsettings Ġfor Ġusers Ġwho Ġare Ġupgrading Ġto Ġ 2 . 1 Ġor Ġlater Ġso ĊĠĠĠĠ Ġ* Ġthat Ġnothing Ġis Ġreported Ġfor Ġupgrading Ġusers Ġbefore Ġthe Ġuser Ġhave Ġreally Ġopt ed Ġin . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupgrade Past 5 ( previous : ĠInt , Ġcurrent : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( previous Ġ< Ġ 6 Ġ&& Ġcurrent Ġ>= Ġ 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgive All Stats Consent ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhas Server () Ġ= Ġget Server (). isNotEmpty () ĊĠĠĠ Ġ// ĠNeed Ġto Ġfix Ġurl Ġwhen Ġreading Ġfrom Ġstorage , Ġrather Ġthan Ġwriting Ġto Ġstorage ĊĠĠĠ Ġ// Ġsince Ġthe Ġsettings Ġview Ġwrite Ġto Ġsettings Ġdirectly Ġwithout Ġa Ġchance Ġto Ġmodify Ġthe Ġvalue Ġbefore . ĊĠĠĠ Ġfun Ġget Server () Ġ= ĠUtils . fix Url ( read Setting ( server Url )) ĊĊĠĠĠ Ġfun Ġset Server ( server : ĠString ) Ġ= Ġput Setting ( server Url , Ġserver ) ĊĠĠĠ Ġfun Ġstats Enabled (): ĠBoolean Ġ= Ġshared Preferences . getBoolean ( usage Statistics , Ġdefault Usage Statistics ) ĊĠĠĠ Ġfun Ġcrash Reporting Enabled (): ĠBoolean Ġ= Ġshared Preferences . getBoolean ( crash Reporting , Ġdefault Usage Statistics ) ĊĠĠĠ Ġfun Ġget Automatic Update Interval (): ĠLong Ġ= Ġread Setting ( refresh Interval , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . default _ refresh _ interval )). to Long () ĊĊĠĠĠ Ġfun Ġon Wait List (): ĠBoolean Ġ= Ġshared Preferences . getBoolean ( on Wait List , Ġdefault On Wait List ) ĊĠĠĠ Ġfun Ġset On Wait List ( value : ĠBoolean ) Ġ= Ġput Setting ( on Wait List , Ġvalue ) ĊĠĠĠ Ġfun Ġhas Seen Privacy On Board ing (): ĠBoolean Ġ= Ġshared Preferences . getBoolean ( privacy On Board ing , Ġdefault Privacy On Board ing ) ĊĠĠĠ Ġfun Ġset Privacy On Board ing Seen () Ġ= Ġput Setting ( privacy On Board ing , Ġtrue ) ĊĊĠĠĠ Ġfun Ġgive All Stats Consent ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠ Ġeditor . put Boolean ( usage Statistics , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġeditor . put Boolean ( crash Reporting , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġrecord Crash Reporting Consent Change ( value , Ġeditor ) ĊĠĠĠĠĠĠĠ Ġrecord Usage Statistics Consent Change ( value , Ġeditor ) ĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRecord Ġthat Ġthe Ġuser Ġhave Ġgiven Ġ/ Ġwithdraw n Ġtheir Ġconsent Ġfor Ġsending Ġcrash Ġreports . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠThe Ġnew Ġconsent Ġvalue , Ġif Ġnull Ġthe Ġvalue Ġis Ġread Ġfrom ĠSharedPreferences . ĊĠĠĠĠ Ġ* Ġ@ param Ġeditor ĠThe Ġeditor Ġto Ġuse Ġto Ġupdate Ġthe Ġdata Ġwith Ġ( without Ġcalling Ġapply ), ĊĠĠĠĠ Ġ* Ġif Ġnull Ġa Ġnew Ġeditor Ġwill Ġbe Ġcreated Ġand Ġapply Ġwill Ġbe Ġcalled Ġafter Ġthe Ġupdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrecord Crash Reporting Consent Change ( value : ĠBoolean ? Ġ= Ġnull , Ġeditor : ĠSharedPreferences . Editor ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Consent Change ( value Ġ?: Ġcrash Reporting Enabled (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . key _ crash _ reporting _ consent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . key _ crash _ reporting _ consent _ timestamp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRecord Ġthat Ġthe Ġuser Ġhave Ġgiven Ġ/ Ġwithdraw n Ġtheir Ġconsent Ġfor Ġsending Ġusage Ġstatistics . ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠThe Ġnew Ġconsent Ġvalue , Ġif Ġnull Ġthe Ġvalue Ġis Ġread Ġfrom ĠSharedPreferences . ĊĠĠĠĠ Ġ* Ġ@ param Ġeditor ĠThe Ġeditor Ġto Ġuse Ġto Ġupdate Ġthe Ġdata Ġwith Ġ( without Ġcalling Ġapply ), ĊĠĠĠĠ Ġ* Ġif Ġnull Ġa Ġnew Ġeditor Ġwill Ġbe Ġcreated Ġand Ġapply Ġwill Ġbe Ġcalled Ġafter Ġthe Ġupdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrecord Usage Statistics Consent Change ( value : ĠBoolean ? Ġ= Ġnull , Ġeditor : ĠSharedPreferences . Editor ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrecord Consent Change ( value Ġ?: Ġstats Enabled (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . key _ usage _ stats _ consent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . key _ usage _ stats _ consent _ timestamp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Commit Pref Ed its ") ĊĠĠĠ Ġprivate Ġfun Ġrecord Consent Change ( value : ĠBoolean , Ġconsent Key : ĠString , Ġtimestamp Key : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor : ĠSharedPreferences . Editor ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġeditor Ġ?: Ġshared Preferences . edit () ĊĠĠĠĠĠĠĠ Ġe . put Boolean ( consent Key , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġe . put Long ( timestamp Key , ĠTime Utils . now (). millis ) ĊĠĠĠĠĠĠĠ Ġif Ġ( editor Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Theme () Ġ= ĊĠĠĠĠĠĠĠ Ġread Setting ( context . getString ( R . string . key _ theme ), Ġcontext . getString ( R . string . default _ theme )) ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠListener Ġused Ġto Ġbe Ġnotified Ġabout Ġchanges Ġdone Ġto Ġthe Ġserver Ġvia Ġthe Ġsettings Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠInternal Server ChangeListener Ġ: ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Shared Preference Changed ( shared Preferences : ĠSharedPreferences ?, Ġkey : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġserver Url ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings ChangeListener ?. on Settings Changed ( Settings ChangeListener . Setting . SERVER ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }