package Ġhu . sz to mek . wh eres my buddy . presentation . screens . splash čĊč Ċ import Ġandroid . arch . lifecycle . ViewModel Provider č Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . widget . Toast č Ċ import Ġhu . sz to mek . wh eres my buddy . R č Ċ import Ġhu . sz to mek . wh eres my buddy . device . location . Res olvable Location Exception č Ċ import Ġhu . sz to mek . wh eres my buddy . device . notification . Intent Payload Handler č Ċ import Ġhu . sz to mek . wh eres my buddy . device . notification . actions .* č Ċ import Ġhu . sz to mek . wh eres my buddy . domain . IN ot ifications č Ċ import Ġhu . sz to mek . wh eres my buddy . presentation . common . Base Activity č Ċ import Ġhu . sz to mek . wh eres my buddy . presentation . common . State č Ċ import Ġhu . sz to mek . wh eres my buddy . presentation . di . Injectable č Ċ import Ġhu . sz to mek . wh eres my buddy . presentation . model . persist able . Splash Model č Ċ import Ġhu . sz to mek . wh eres my buddy . presentation . router . I Router č Ċ import Ġhu . sz to mek . wh eres my buddy . presentation . service . Location Service č Ċ import Ġpl . ta j ch ert . nam mu . Nam mu č Ċ import Ġpl . ta j ch ert . nam mu . Permission Callback č Ċ import Ġtim ber . log . Tim ber č Ċ import Ġjavax . inject . Inject čĊč Ċ class ĠSpl ash Activity Ġ: ĠBase Activity < Splash Model , ĠSpl ash ViewModel >(), ĠInjectable Ġ{ čĊčĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġrouter : ĠI Router čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġvm f : ĠViewModel Provider . Factory čĊĠĠĠ Ġ@ Inject čĊĠĠĠ Ġlateinit Ġvar Ġnotifications : ĠIN ot ifications čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQ _ LOCATION _ PERMISSION Ġ= Ġ 8 7 6 čĊčĊĠĠĠĠĠĠĠ Ġvar Ġpending Exception : ĠRes olvable Location Exception ? Ġ= Ġnull čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġget ViewModel Factory (): ĠViewModel Provider . Factory Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġvm f čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġget ViewModel Class (): ĠClass < Splash ViewModel > Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn ĠSpl ash ViewModel :: class . java čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠviewModel . check User () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġhandle StateChange ( state : ĠState < Splash Model > ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġstate ?. let Ġ{ ĠnewState Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ ĠnewState . data ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! newState . loading Ġ&& ĠnewState . error Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . has User ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġwhen Ġ( it . has G cm Token ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> ĠviewModel . check G cm Token () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcheck Intent () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . label _ login _ required , ĠToast . LENGTH _ SHORT ). show () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . to Login () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcheck Intent () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġnotification Action Ġ= ĠIntent Payload Handler . getAction From Intent ( intent ) čĊĠĠĠĠĠĠĠ Ġif Ġ( notification Action Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications . dismiss ( notification Action . notification Id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( notification Action ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAccept Connection Request Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . accept Request ( notification Action . requestId ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDe cline Connection Request Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . decl ine Request ( notification Action . requestId ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNew Connection Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . to Profile ( notification Action . from UserId ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNew Location Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . toMap ( notification Action . location Id ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocation Permission Required Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNam mu . ask For Permission ( this , Ġandroid . Manifest . permission . ACCESS _ F INE _ LOCATION , Ġobject Ġ: ĠPermission Callback Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpermission Granted () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretry Original () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpermission Ref used () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġshow Ġsad Ġtoast Ġ:( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocation Recover able Error Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pending Exception Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpending Exception ?. resolve ( this , ĠREQ _ LOCATION _ PERMISSION ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Couldn 't Ġfind Ġexception Ġin Ġextras Ġfor Ġaction ĠLocation Recover able Error ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Unknown Ġnotification Ġaction : Ġ[$ notification Action ]") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . to Landing () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . to Landing () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġretry Original () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġoriginal Action Ġ= ĠIntent Payload Handler . get Original Action From Intent ( intent ) čĊĠĠĠĠĠĠĠ Ġoriginal Action ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Splash Activity , ĠLocation Service :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent Payload Handler . put Action To Intent ( intent , Ġit ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Service ( intent ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġrouter . close () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġget Persist able Ui State (): ĠSpl ash Model Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn ĠSpl ash Model ( null , Ġnull ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQ _ LOCATION _ PERMISSION ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Original () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpending Exception Ġ= Ġnull čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġrouter . on Activity Result ( request Code , ĠresultCode , Ġdata ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) čĊĠĠĠĠĠĠĠ ĠNam mu . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . activity _ splash čĊĠĠĠ Ġ} č Ċ }