/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠCode p unk , ĠLLC Ċ Ġ* ĠAuthor ( s ): ĠS cott ĠSl ater Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// 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 . code p unk . core . presentation . auth Ċ Ċ import Ġandroid . accounts . Account Manager Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . widget . Content Loading ProgressBar Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Nav Options Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . navigation . ui . AppBar Configuration Ċ import Ġandroidx . navigation . ui . setup ActionBar With Nav Controller Ċ import Ġcom . code p unk . core . Build Config Ċ import Ġcom . code p unk . core . Build Config . CATEGORY _ CH OOSE Ċ import Ġcom . code p unk . core . Build Config . CATEGORY _ LOG _ IN Ċ import Ġcom . code p unk . core . Build Config . CATEGORY _ SIGN _ UP Ċ import Ġcom . code p unk . core . R Ċ import Ġcom . code p unk . core . databinding . Activity Auth Binding Ċ import Ġcom . code p unk . core . di . factory . ViewModel Factory Ċ import Ġdagger . android . Android Injection Ċ import Ġdagger . android . Android Injector Ċ import Ġdagger . android . Dispatch ing Android Injector Ċ import Ġdagger . android . support . Has Support Fragment Injector Ċ import Ġjavax . inject . Inject Ċ Ċ /** Ċ Ġ* ĠAn ĠActivity Ġthat Ġhandles Ġall Ġactions Ġrel ating Ġto Ġcreating , Ġselecting , Ġand Ġauthentic ating Ċ Ġ* Ġan Ġaccount . Ċ Ġ*/ Ċ class ĠAuth Activity Ġ: ĊĠĠĠ ĠAppCompatActivity (), ĊĠĠĠ ĠHas Support Fragment Injector Ġ{ ĊĊĠĠĠ Ġ// Ġregion ĠProperties ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPerforms Ġdependency Ġinjection Ġon Ġfragments . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġfragment Dispatch ing Android Injector : ĠDispatch ing Android Injector < Fragment > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe ĠAndroid Ġaccount Ġmanager . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġaccount Manager : ĠAccount Manager ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġinjected Ġ[ ViewModel Provider . Factory ] Ġthat Ġwe Ġwill Ġuse Ġto Ġget Ġan Ġinstance Ġof ĊĠĠĠĠ Ġ* Ġ[ Auth ViewModel ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory < Auth ViewModel > ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Auth ViewModel ] Ġinstance Ġbacking Ġthis Ġfragment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġauth ViewModel : ĠAuth ViewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( Auth ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġbinding Ġfor Ġthis Ġactivity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Auth Binding ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġ[ Nav Controller ] Ġfor Ġthe Ġactivity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġnav Controller : ĠNav Controller Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠNavigation . find Nav Controller ( this , ĠR . id . auth _ nav _ fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġapp Ġbar Ġconfiguration Ġfor Ġthe Ġactivity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġapp Bar Configuration : ĠApp Bar Configuration Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠApp Bar Configuration ( nav Controller . graph ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġactivity 's Ġ[ Content Loading ProgressBar ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" WE AK ER _ ACCESS ") ĊĠĠĠ Ġlateinit Ġvar Ġloading ProgressBar : ĠContent Loading ProgressBar ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġ// Ġend region ĠProperties ĊĊĠĠĠ Ġ// Ġregion ĠLifecycle Ġmethods ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġthe Ġcontent Ġview Ġand Ġpull s Ġvalues Ġfrom Ġthe Ġpassed Ġ[ Intent ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠAndroid Injection . inject ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ auth ) ĊĠĠĠĠĠĠĠ Ġloading ProgressBar Ġ= Ġbinding . loading Progress ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġsetup ActionBar With Nav Controller ( nav Controller , Ġapp Bar Configuration ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠTODO ĊĠĠĠĠĠĠĠ Ġauth ViewModel . auth Live Resource . observe ( this , ĠObserver Ġ{ Ġon Auth Resource ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġauth ViewModel . register Live Resource . observe ( this , ĠObserver Ġ{ Ġon Resource ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġauth ViewModel . send Activation Live Resource . observe ( this , ĠObserver Ġ{ Ġon Resource ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġauth ViewModel . send Password Reset Live Resource . observe ( this , ĠObserver Ġ{ Ġon Resource ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġsupplied Ġintent Ġspecifies Ġit , Ġnavigate Ġto Ġan Ġalternate Ġdestination ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġpop Ġup Ġinclusive Ġto Ġthat Ġnew Ġdestination ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . categories ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Options Ġ= ĠNav Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Pop Up To ( R . id . fragment _ auth , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( Build Config . CATEGORY _ CH OOSE ) Ġ-> Ġresolve Intent ( intent , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( CATEGORY _ SIGN _ UP ) Ġ-> Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ auth _ to _ sign _ up , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . extras , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( Build Config . CATEGORY _ LOG _ IN ) Ġ-> Ġnav Controller . navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ auth _ to _ log _ in , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . extras , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĠLifecycle Ġmethods ĊĊĠĠĠ Ġ// Ġregion ĠInherit ed Ġmethods ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact s Ġto Ġa Ġnew Ġintent . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) ĊĠĠĠĠĠĠĠ Ġintent ?. categories ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( CATEGORY _ CH OOSE ) Ġ-> Ġresolve Intent ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( CATEGORY _ SIGN _ UP ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ auth _ to _ sign _ up , Ġintent . extras ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( CATEGORY _ LOG _ IN ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( R . id . action _ auth _ to _ log _ in , Ġintent . extras ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReact s Ġto Ġthe Ġ" up " Ġbutton Ġbeing Ġpressed . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġnav Controller . navigate Up () Ġ|| Ġsuper . on Support Navigate Up () ĊĊĠĠĠ Ġ// Ġend region ĠInherit ed Ġmethods ĊĊĠĠĠ Ġ// Ġregion ĠImplemented Ġmethods ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠImplementation Ġof Ġ[ Has Support Fragment Injector ]. ĠReturns Ġa ĊĠĠĠĠ Ġ* Ġ[ Dispatch ing Android Injector ] Ġthat Ġinject s Ġdependencies Ġinto Ġfragments . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsupport Fragment Injector (): ĠAndroid Injector < Fragment > Ġ= ĊĠĠĠĠĠĠĠ Ġfragment Dispatch ing Android Injector ĊĊĠĠĠ Ġ// Ġend region ĠImplemented Ġmethods ĊĊĠĠĠ Ġ// Ġregion ĠMethods ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Intent ( intent : ĠIntent , Ġpop Up : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġintent . categories ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġaction : ĠInt Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Options Ġ= ĠNav Options . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pop Up ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pop Up To ( R . id . fragment _ auth , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontains ( CATEGORY _ CH OOSE ) Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠTODO ĠClean Ġup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠIf Ġthere 's Ġonly Ġone Ġaccount Ġand Ġit 's Ġthe Ġcurrent Ġone , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġthen Ġchange Ġaction Ġto ĠR . id . action _ auth _ to _ register ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 ) ĠGet Ġall Ġsaved Ġaccounts Ġfor Ġtype ĠAUTH ENT IC ATOR _ ACCOUNT _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype : ĠString Ġ= ĠBuild Config . AUTHENT IC ATOR _ ACCOUNT _ TYPE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaccounts Ġ= Ġaccount Manager . get Account sBy Type ( type ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 ) ĠGet Ġthe Ġ" current " Ġaccount . ĠThe Ġcurrent Ġaccount Ġis Ġeither Ġthe Ġaccount Ġwhose Ġname Ġhas ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbeen Ġsaved Ġin Ġshared Ġpreferences , Ġor Ġthe Ġsole Ġaccount Ġfor Ġthe Ġgiven Ġtype Ġif Ġonly ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġone Ġaccount Ġhas Ġbeen Ġstored Ġvia Ġthe Ġaccount Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( accounts . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠR . id . action _ auth _ to _ sign _ up ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( action , Ġintent . extras , Ġnav Options ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġend region ĠMethods Ċ Ċ } Ċ