package Ġcom . bre in . api ĊĊ Ċ import Ġandroid . Manifest Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . MODE _ PRIVATE Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Log Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġcom . bre in . domain . Bre in Activity Type Ċ import Ġcom . bre in . domain . Bre in Config Ċ import Ġcom . bre in . util . Bre in Util Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ @ Suppress Lint (" Static Field Leak ") Ċ object ĠBre in ify Manager Ġ{ ĊĊĠĠĠ Ġ// Ġcontains Ġthe Ġdevice Ġtoken ĊĠĠĠ Ġvar Ġpush Device Registration : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar Ġuser Email : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar ĠuserId : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġvar ĠsessionId : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġapplication Ġcontext ĊĠĠĠ Ġprivate Ġvar Ġapplication : ĠApplication ? Ġ= Ġnull ĊĊĠĠĠ Ġ// Ġcontains Ġthe Ġmain Ġactivity ĊĠĠĠ Ġprivate Ġvar Ġmain Activity : ĠActivity ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar ĠapiKey : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġsecret : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġbackground Interval : ĠLong Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe Ġdevice Registration ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġpush Device Registration ĠString ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Device Registration ( push Device Registration : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġpush Device Registration Ġis : Ġ$ push Device Registration ") ĊĠĠĠĠĠĠĠ Ġthis . push Device Registration Ġ= Ġpush Device Registration ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġuser Ġas Ġwell Ġ-> Ġnecessary Ġfor Ġcorrect Ġrequest ĊĠĠĠĠĠĠĠ ĠBre in ify . getUser (). set Push Device Registration ( push Device Registration ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġthe ĠAndroid ĠApplication ĠObject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠApplication Ġcontains ĠAndroid ĠApplication ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġget Application (): ĠApplication ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġapplication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠActivity Ġmain Activity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġget MainActivity (): ĠActivity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmain Activity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmain Activity ĠActivity Ġcontains Ġmain Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġset MainActivity ( main Activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . main Activity Ġ= Ġmain Activity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġthe ĠAndroid ĠApplication ĠObject ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġapplication ĠAndroid ĠApplication ĠObject ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġset Application ( application : ĠApplication ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . application Ġ= Ġapplication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes Ġthe Ġappropriate Ġcallbacks Ġand Ġtimer Ġfor Ġbackground Ġprocessing ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġapplication Ġ ĠApplication Ġcontains Ġthe Ġapplication Ġobject ĊĠĠĠĠ Ġ* Ġ@ param Ġmain Activity ĠActivity Ġcontains Ġmain Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param ĠapiKey ĠĠĠĠĠĠ ĠString Ġcontains Ġthe ĠBre in ify ĠAPI ĠKey ĊĠĠĠĠ Ġ* Ġ@ param Ġsecret ĠĠĠĠĠĠ ĠString Ġcontains Ġthe ĠBre inf iy Ġsecret ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġinitialize ( ĊĠĠĠĠĠĠĠ Ġapplication : ĠApplication ?, ĊĠĠĠĠĠĠĠ Ġmain Activity : ĠActivity ?, ĊĠĠĠĠĠĠĠ ĠapiKey : ĠString ?, ĊĠĠĠĠĠĠĠ Ġsecret : ĠString ?, ĊĠĠĠĠĠĠĠ Ġbackground Interval : ĠLong ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . application Ġ= Ġapplication ĊĠĠĠĠĠĠĠ Ġthis . main Activity Ġ= Ġmain Activity ĊĠĠĠĠĠĠĠ Ġthis . apiKey Ġ= ĠapiKey ĊĠĠĠĠĠĠĠ Ġthis . secret Ġ= Ġsecret ĊĠĠĠĠĠĠĠ Ġthis . background Interval Ġ= Ġbackground Interval ĊĠĠĠĠĠĠĠ Ġinit Lifecycle And Engine ( background Interval ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes Ġthe ĠLifecycle Ġsupport Ġand ĠEngine ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbackground Interval Ġlong Ġcontains Ġbackground Ġinterval ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Lifecycle And Engine ( background Interval : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġregister Ġthe Ġcallbacks Ġfor Ġlifecycle Ġsupport Ġ- Ġnecessary Ġto Ġdetermine Ġif Ġapp ĊĠĠĠĠĠĠĠ Ġ// Ġis Ġin Ġbackground Ġor Ġforeground ĊĊĠĠĠĠĠĠĠ Ġ// Ġde activated ĊĠĠĠĠĠĠĠ Ġ// Ġapplication ?. register Activity Lifecycle Callbacks ( Bre in ify Lifecycle ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġconfigure Ġthe ĠAPI ĊĠĠĠĠĠĠĠ ĠBre in ify . set Config ( apiKey , Ġsecret ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġread Ġuser Ġdefaults Ġ( email , ĠuserId , Ġtoken ) ĊĠĠĠĠĠĠĠ Ġread And Init User Defaults () ĊĊĠĠĠĠĠĠĠ Ġ// Ġconfigure Ġthe Ġbackground Ġprocessing ĊĠĠĠĠĠĠĠ Ġ// Ġinit Background Handler ( background Interval ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġconfigure Ġthe Ġsession ĊĠĠĠĠĠĠĠ Ġconfigure Session () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠBackground ĠHandler Ġfor Ġsending Ġmessages ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbackground Interval Ġlong Ġinterval Ġin Ġms ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġinit Background Handler ( background Interval : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġinit Background Handler Ġinvoked Ġwith Ġduration : Ġ$ background Interval ") ĊĊĠĠĠĠĠĠĠ ĠTimer (). schedule ( object Ġ: ĠTimer Task () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" init Background Handler ", Ġ" Bre in ify Ġ- Ġcalled Ġon Ġmain Ġthread ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġflag Ġif Ġsending Ġis Ġpossible ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Location Info () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġbackground Interval ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġin Ġcase Ġof ĠAPI ĠShutdown Ġand Ġwill Ġstop Ġall Ġservices ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġshutdown () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġshutdown Ġinvoked Ġ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġinitializes Ġthe Ġsession Ġid Ġwith Ġan Ġidentifier ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconfigure Session () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . sessionId Ġ= ĠUUID . randomUUID (). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsend Ġan Ġactivity ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġactivity Type ĠĠĠĠĠ ĠString Ġcontains Ġthe Ġactivity Ġtype ĊĠĠĠĠ Ġ* Ġ@ param Ġadditional Content ĠMap Ġcan Ġcontain Ġadditional Ġdata ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Activity ( ĊĠĠĠĠĠĠĠ Ġactivity Type : ĠString ?, ĊĠĠĠĠĠĠĠ Ġadditional Content : ĠHashMap < String , ĠAny ?> ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġsending Ġactivity Ġof Ġtype : Ġ$ activity Type ") ĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( this . user Email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . getUser (). set Email ( this . user Email !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( this . userId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . getUser (). set UserId ( this . userId !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( additional Content )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( additional Content Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . getUser (). set Additional (" notification ", Ġadditional Content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Type Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . activity ( activity Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsend Ġan Ġidentify Ġinformation Ġonly Ġif Ġtoken Ġis Ġgiven ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Ident ify Info () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġsend Ident ify Info Ġinvoked ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( push Device Registration )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapp User Ġ= ĠBre in ify . getB re in User () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapp User . set Push Device Registration ( this . push Device Registration ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbre in Activity : ĠBre in Activity Ġ= ĠBre in ify . getB re in Activity () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġcollect Additional Tag Information () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! map . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbre in Activity . set Tags Dic ( map ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġsend Activity ( Bre in Activity Type . IDENT IFY , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbre in Activity . set Activity Type ( Bre in Activity Type . IDENT IFY ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . activity ( bre in Activity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcollect Additional Tag Information (): ĠHashMap < String , ĠAny > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpackage Manager Ġ= ĠBre in ify Manager . main Activity ?. package Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġapp Version Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġapp Install Date Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠappName Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity ?. let Ġ{ Ġval Ġpackage Info Ġ= Ġpackage Manager ?. get Package Info ( it . packageName , Ġ 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontains Ġthe Ġversion Ġof Ġthe ĠApp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Version Ġ= Ġpackage Info ?. version Name . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Info Ġ= Ġpackage Info ?. application Info ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast UpdateTime Ġ= Ġpackage Info ?. last UpdateTime ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Zone Date Ġ= ĠSimpleDateFormat (" yyyy - MM - dd ĠHH : mm : ss ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Install Date Ġ= Ġtime Zone Date . format ( last UpdateTime ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcollect Ġname Ġof Ġthe Ġapp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlabel Res Ġ= Ġapplication Info ?. label Res ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcontains Ġthe ĠappName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappName Ġ= Ġlabel Res ?. let Ġ{ Ġit 1 Ġ-> Ġapplication ?. application Context ?. getString ( it 1 ) Ġ}. toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcollect Ġversion Ġof ĠBre in ify ĠSDK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbre in ify Sdk Version Ġ= ĠBre in Config . VERSION ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Dic Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" app Installation " Ġto Ġapp Install Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" app Version " Ġto Ġapp Version , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" appName " Ġto ĠappName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bre in ify - SDK " Ġto Ġbre in ify Sdk Version ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġas ĠHashMap < String , ĠAny > ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtags Dic ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhash Map Of < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġsend Ġa Ġlocation Ġinformation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsend Location Info () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġsend Location Info Ġinvoked ") ĊĠĠĠĠĠĠĠ Ġif Ġ( this . application Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bre in ify Ġ- Ġsend Location Info Ġ- Ġcannot Ġcheck Ġpermissions Ġbecause Ġapplication Ġobject Ġnot Ġset " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ(! Bre in Util . contains Value ( push Device Registration )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre inf iy Ġ- Ġsend Location Info . ĠNo Ġdevice Registration Token Ġset .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġaccess F ine Location Permission : ĠInt Ġ= ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . application !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ F INE _ LOCATION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaccess Co arse Location Permission : ĠInt Ġ= ĠActivity Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . application !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġif Ġ( access Co arse Location Permission Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccess F ine Location Permission Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" no Ġpermission Ġgranted Ġto Ġinvoke Ġlocation Ġrequests ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsend Activity (" send Loc ", Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġread Ġthe Ġuser Ġdefaults Ġand Ġinitializes Ġthe Ġbre in Ġemail Ġand ĠuserId Ġproperties ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġread And Init User Defaults () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġread And Init User Defaults Ġinvoked ") ĊĠĠĠĠĠĠĠ Ġif Ġ( this . application Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bre in ify Ġ- Ġread And Init User Defaults Ġcan Ġnot Ġwork , Ġbecause Ġapplication Ġobject Ġnot Ġset ." ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġprefs : ĠSharedPreferences Ġ= Ġthis . application !!. get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBRE IN _ PRE F _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġbre in Push Registration : ĠString ? Ġ= Ġprefs . getString ( BRE IN _ PUSH _ DEVICE _ REGISTR ATION , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġbre in Email : ĠString ? Ġ= Ġprefs . getString ( BRE IN _ USER _ EMAIL , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġgenerate ĠUUID Ġif Ġnot Ġalready Ġgenerated ĊĠĠĠĠĠĠĠ Ġval Ġbre in UserId : ĠString ? Ġ= Ġprefs . getString ( BRE IN _ USER _ ID , ĠUUID . randomUUID (). toString ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( bre in UserId )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . userId Ġ= Ġbre in UserId ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( bre in Email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . email Ġ= Ġbre in Email ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( Bre in Util . contains Value ( bre in Push Registration )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . push Device Registration Ġ= Ġbre in Push Registration ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġemail Ġand ĠuserId Ġin Ġuser Ġdefaults Ġand Ġsend ĊĠĠĠĠ Ġ* Ġan Ġidentify Info Ġto Ġthe Ġbackend . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġsave User Defaults () Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġsave User Defaults Ġinvoked ") ĊĠĠĠĠĠĠĠ Ġsave User DefaultValue ( BRE IN _ USER _ EMAIL , Ġuser Email ) ĊĠĠĠĠĠĠĠ Ġsave User DefaultValue ( BRE IN _ USER _ ID , ĠuserId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSave Ġthe Ġdevice Ġtoken ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdevice Token ĠString Ġcontains Ġpush Device Registration ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġconfigure Device Token ( device Token : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Bre in ify Ġ- Ġconfigure Device Token Ġinvoked Ġw it Ġtoken : Ġ$ device Token ") ĊĠĠĠĠĠĠĠ Ġif Ġ( device Token Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Device Registration ( device Token ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġsave Ġdevice Ġregistration ĊĠĠĠĠĠĠĠ Ġsave User DefaultValue ( BRE IN _ PUSH _ DEVICE _ REGISTR ATION , Ġdevice Token ) ĊĊĠĠĠĠĠĠĠ Ġsave User Defaults () ĊĊĠĠĠĠĠĠĠ Ġ// Ġsend ĠIdent ify ĊĠĠĠĠĠĠĠ Ġsend Ident ify Info () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠHelper Ġto Ġsave Ġkey Ġ- Ġvalue Ġpair Ġas Ġuser Ġdefaults ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġkey ĠĠ ĠString Ġcontains Ġthe Ġkey ĊĠĠĠĠ Ġ* Ġ@ param Ġvalue ĠString Ġcontains Ġthe Ġvalue ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave User DefaultValue ( key : ĠString ?, Ġvalue : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . application Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor : ĠSharedPreferences . Editor Ġ= Ġthis . application !!. get SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBRE IN _ PRE F _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMODE _ PRIVATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). edit () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ!= Ġnull Ġ&& Ġvalue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . putString ( key , Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġapp Ġis Ġset Ġto Ġforeground , Ġset Ġsaved ĠsessionId ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġapp IsIn Foreground () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . sessionId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBre in ify . getUser (). set SessionId ( this . sessionId !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInv oked Ġwhen Ġapp Ġis Ġin Ġset Ġto Ġbackground , Ġremove ĠsessionId ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UNUSED ") ĊĠĠĠ Ġfun Ġapp IsIn Background () Ġ{ ĊĠĠĠĠĠĠĠ ĠBre in ify . getUser (). set SessionId ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConfig ures Ġthe Ġdefault Ġnotification Ġchannel ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġchannel Id ĠĠĠĠĠĠ ĠInt ĠResource Ġcontains Ġthe Ġchannel ĠId ĊĠĠĠĠ Ġ* Ġ@ param Ġchannel Desc Id ĠĠ ĠInt ĠResource Ġcontains Ġthe Ġchannel Ġdescription ĠId ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġconfigure Default Notification Channel ( channelId : ĠInt , Ġchannel Desc Id : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= Ġget Application ()?. application Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġcontext ?. getSystem Service ( Context . NOTIFICATION _ SERVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠNotification Manager ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Id String Ġ= Ġcontext . getString ( channelId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( manager . get Notification Channel ( channelId String ) Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Id String , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( channelId ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ HIGH ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . description Ġ= Ġcontext . getString ( channel Desc Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsome Ġhandy Ġconstants ĊĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Bre in ify Manager " ĊĠĠĠ Ġconst Ġval ĠBRE IN _ PRE F _ NAME Ġ= Ġ" bre in ify . pref " ĊĠĠĠ Ġconst Ġval ĠBRE IN _ PUSH _ DEVICE _ REGISTR ATION Ġ= Ġ" bre in Push Device Registration " ĊĠĠĠ Ġconst Ġval ĠBRE IN _ USER _ EMAIL Ġ= Ġ" bre in User Email " ĊĠĠĠ Ġconst Ġval ĠBRE IN _ USER _ ID Ġ= Ġ" bre in UserId " Ċ Ċ }