/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 Ġ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 . ad ss ched . shared . data . signin . datas ources Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . google . samples . apps . ad ss ched . shared . data . signin . Authenticated UserInfo Ċ import Ġcom . google . samples . apps . ad ss ched . shared . data . signin . Firebase UserInfo Ċ import Ġcom . google . samples . apps . ad ss ched . shared . domain . internal . Default Scheduler Ċ import Ġcom . google . samples . apps . ad ss ched . shared . domain . sessions . Notification Alarm Updater Ċ import Ġcom . google . samples . apps . ad ss ched . shared . fc m . F cm Token Updater Ċ import Ġcom . google . samples . apps . ad ss ched . shared . result . Result Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠAn Ġ[ Auth State User DataSource ] Ġthat Ġlist ens Ġto Ġchanges Ġin Ġ[ Firebase Auth ]. Ċ Ġ* Ċ Ġ* ĠWhen Ġa Ġ[ Firebase User ] Ġis Ġavailable , Ġit Ċ Ġ* Ġ Ġ* ĠPosts Ġit Ġto Ġthe Ġuser Ġobservable Ċ Ġ* Ġ Ġ* ĠF etches Ġthe ĠID Ġtoken Ċ Ġ* Ġ Ġ* ĠStores Ġthe ĠF CM ĠID ĠToken Ġin ĠFire store Ċ Ġ* Ġ Ġ* ĠPosts Ġthe Ġuser ĠID Ġto Ġthe Ġobservable Ċ Ġ*/ Ċ class ĠFirebase Auth State User DataSource Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġval Ġfirebase : ĠFirebase Auth , ĊĠĠĠ Ġprivate Ġval Ġtoken Updater : ĠF cm Token Updater , ĊĠĠĠ Ġnotification Alarm Updater : ĠNotification Alarm Updater Ċ ) Ġ: ĠAuth State User DataSource Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcurrent Firebase User Observable Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData < Result < Authenticated UserInfo ? >>() ĊĊĠĠĠ Ġprivate Ġvar Ġis Already Listening Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġvar Ġlast Uid : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠListener Ġthat Ġsaves Ġthe Ġ[ Firebase User ], Ġf etches Ġthe ĠID Ġtoken ĊĠĠĠ Ġ// Ġand Ġupdates Ġthe Ġuser ĠID Ġobservable . ĊĠĠĠ Ġprivate Ġval Ġauth State Listener : Ġ(( Firebase Auth ) Ġ-> ĠUnit ) Ġ= Ġ{ Ġauth Ġ-> ĊĠĠĠĠĠĠĠ ĠDefault Scheduler . execute Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Received Ġa ĠFirebase Auth Ġupdate .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPost Ġthe Ġcurrent Ġuser Ġfor Ġob servers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Firebase User Observable . post Value ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . Success ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase UserInfo ( auth . currentUser ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth . currentUser ?. let Ġ{ ĠcurrentUser Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe ĠF CM ĠID Ġtoken Ġin Ġfire store ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Updater . update Token ForUser ( currentUser . uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( auth . currentUser Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLogout , Ġcancel Ġall Ġal arms ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Alarm Updater . cancel All () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġauth . currentUser ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Uid Ġ!= Ġauth . uid ) Ġ{ Ġ// ĠPrevent Ġduplicates ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotification Alarm Updater . update All ( it . uid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġlast ĠUID Ġto Ġprevent Ġsetting Ġtoo Ġmany Ġal arms . ĊĠĠĠĠĠĠĠ Ġlast Uid Ġ= Ġauth . uid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Listening () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Already Listening ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase . add Auth State Listener ( auth State Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Already Listening Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Basic UserInfo (): ĠLive Data < Result < Authenticated UserInfo ? >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcurrent Firebase User Observable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġfirebase . remove Auth State Listener ( auth State Listener ) ĊĠĠĠ Ġ} Ċ } Ċ