/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠGoogle ĠLLC Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . google . samples . apps . ios ched . util Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . preference . Preference Manager Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġcom . google . samples . apps . ios ched . shared . analytics . Analytics Actions Ċ import Ġcom . google . samples . apps . ios ched . shared . analytics . Analytics Helper Ċ import Ġcom . google . samples . apps . ios ched . shared . data . prefs . Preference Storage Ċ import Ġcom . google . samples . apps . ios ched . shared . data . prefs . Shared Preference Storage Ċ import Ġcom . google . samples . apps . ios ched . shared . domain . internal . Default Scheduler Ċ import Ġcom . google . samples . apps . ios ched . ui . signin . SignIn ViewModel Delegate Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠFirebase ĠAnalytics Ġimplementation Ġof ĠAnalytics Helper Ċ Ġ*/ Ċ class ĠFirebase Analytics Helper ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġsign In ViewModel Delegate : ĠSign In ViewModel Delegate , ĊĠĠĠ Ġpreference Storage : ĠPreference Storage Ċ ) Ġ: ĠAnalytics Helper Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġfirebase Analytics : ĠFirebase Analytics Ġ= ĠFirebase Analytics . getInstance ( context ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġstores Ġa Ġstrong Ġreference Ġto Ġpreference Ġchange ][ Preference Manager ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġpref Listener : ĠSharedPreferences . On Shared Preference ChangeListener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġanalytics Enabled : ĠBoolean Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġset ( enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġenabled ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Setting ĠAnalytics Ġenabled : Ġ$ enabled ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Analytics . set Analytics Collection Enabled ( enabled ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize ĠAnalytics Ġtracker . Ġ ĠIf Ġthe Ġuser Ġhas Ġpermitted Ġtracking Ġand Ġhas Ġalready Ġsigned ĠT OS , ĊĠĠĠĠ Ġ* Ġ( possible Ġexcept Ġon Ġfirst Ġrun ), Ġinitialize Ġanalytics ĠIm mediate ly . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ ĠDefault Scheduler . execute Ġ{ Ġ// ĠPrevent Ġaccess Ġto Ġpreferences Ġon Ġmain Ġthread ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Enabled Ġ= Ġpreference Storage . send Usage Statistics ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Analytics Ġinitialized ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġlistener Ġwill Ġinitialize ĠAnalytics Ġwhen Ġthe ĠT OS Ġis Ġsigned , Ġor Ġenable / disable ĊĠĠĠĠĠĠĠ Ġ// ĠAnalytics Ġbased Ġon Ġthe Ġ" anonymous Ġdata Ġcollection " Ġsetting . ĊĠĠĠĠĠĠĠ Ġsetup Preference ChangeListener ( context ) ĊĊĠĠĠĠĠĠĠ Ġsign In ViewModel Delegate . observe Signed In User (). observe Fore ver Ġ{ Ġsigned In Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUser Signed In ( signed In Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Updated Ġuser Ġsigned Ġin Ġto Ġ$ signed In ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsign In ViewModel Delegate . observe Registered User (). observe Fore ver Ġ{ Ġregistered Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetUser Registered ( registered Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Updated Ġuser Ġregistered Ġto Ġ$ registered ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsend Screen View ( screen Name : ĠString , Ġactivity : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Firebase Analytics . Param . ITEM _ ID , Ġscreen Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Firebase Analytics . Param . CONTENT _ TYPE , ĠFA _ CONTENT _ TYPE _ SC RE ENV IEW ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfirebase Analytics . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetCurrent Screen ( activity , Ġscreen Name , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Event ( Firebase Analytics . Event . SELECT _ CONTENT , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Screen ĠView Ġrecorded : Ġ$ screen Name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlog Ui Event ( itemId : ĠString , Ġaction : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Firebase Analytics . Param . ITEM _ ID , ĠitemId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( Firebase Analytics . Param . CONTENT _ TYPE , ĠFA _ CONTENT _ TYPE _ UI _ EVENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( FA _ KEY _ UI _ ACTION , Ġaction ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfirebase Analytics . log Event ( Firebase Analytics . Event . SELECT _ CONTENT , Ġparams ) ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Event Ġrecorded Ġfor Ġ$ itemId , Ġ$ action ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUser Signed In ( is Signed In : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo ( ale xl uc as ) Ġ: ĠSet Ġup Ġuser Ġproperties Ġin Ġboth Ġdev Ġand Ġprod ĊĠĠĠĠĠĠĠ Ġfirebase Analytics . setUser Property ( U PROP _ USER _ SIGNED _ IN , Ġis Signed In . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetUser Registered ( is Registered : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġtodo ( ale xl uc as ) Ġ: ĠSet Ġup Ġuser Ġproperties Ġin Ġboth Ġdev Ġand Ġprod ĊĠĠĠĠĠĠĠ Ġfirebase Analytics . setUser Property ( U PROP _ USER _ REGISTER ED , Ġis Registered . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġup Ġa Ġlistener Ġfor Ġpreference Ġchanges . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Preference ChangeListener ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= ĠSharedPreferences . On Shared Preference ChangeListener Ġ{ Ġpref , Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Boolean Preference Action ( pref , Ġkey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠClass CastException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Shared Preference ChangeListener ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== ĠShared Preference Storage . PRE F _ SEND _ USAGE _ STAT ISTICS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Stats Ġ= Ġpref . getBoolean ( key , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Enabled Ġ= Ġsend Stats ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ui Event (" Preference : Ġ$ key ", Ġaction ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠDefault Scheduler . execute Ġ{ Ġ// ĠPrevent Ġaccess Ġto Ġpreferences Ġon Ġmain Ġthread ĊĠĠĠĠĠĠĠĠĠĠĠ ĠShared Preference Storage ( context ). register On Preference ChangeListener ( listener ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpref Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Preference ĠChange ĠListener Ġhas Ġbeen Ġset Ġup .") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Boolean Preference Action ( prefs : ĠSharedPreferences , Ġkey : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( prefs . getBoolean ( key , Ġtrue )) ĠAnalytics Actions . ENABLE ĊĠĠĠĠĠĠĠ Ġelse ĠAnalytics Actions . DISABLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠU PROP _ USER _ SIGNED _ IN Ġ= Ġ" user _ signed _ in " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠU PROP _ USER _ REGISTER ED Ġ= Ġ" user _ registered " ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠLog Ġa Ġspecific Ġscreen Ġview Ġunder Ġthe Ġ` screen Name ` Ġstring . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFA _ CONTENT _ TYPE _ SC RE ENV IEW Ġ= Ġ" screen " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFA _ KEY _ UI _ ACTION Ġ= Ġ" ui _ action " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFA _ CONTENT _ TYPE _ UI _ EVENT Ġ= Ġ" ui Ġevent " ĊĠĠĠ Ġ} Ċ } Ċ