package Ġnet . app it iza . mod er no . ui . activities . users Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . tele phony . Tele phony Manager Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . View Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . firestore . FieldValue Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . Set Options Ċ import Ġkotlinx . android . synt hetic . main . activity _ admin _ sites .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ device _ change .* Ċ import Ġkotlinx . android . synt hetic . main . activity _ register .* Ċ import Ġnet . app it iza . mod er no . Build Config Ċ import Ġnet . app it iza . mod er no . R Ċ import Ġnet . app it iza . mod er no . constants . Constants Ċ import Ġnet . app it iza . mod er no . ui . activities . Base Activity Ċ import Ġnet . app it iza . mod er no . utils . Preference Helper Ċ import Ġnet . app it iza . mod er no . utils . Utils Ċ import Ġjava . util . HashMap Ċ Ċ class ĠDevice Change Request Activity Ġ: ĠBase Activity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġis LoggedIn Ġby ĠPreference Helper ( Constants . PRE F _ KEY _ IS _ USER _ LOG GED _ IN , Ġfalse ) ĊĠĠĠ Ġprivate Ġvar ĠdisplayName Ġby ĠPreference Helper ( Constants . PRE F _ KEY _ IS _ USER _ DISPLAY _ NAME , Ġ"") ĊĠĠĠ Ġprivate Ġvar Ġuser email Ġby ĠPreference Helper ( Constants . PRE F _ KEY _ IS _ USER _ EMAIL , Ġ"") ĊĠĠĠ Ġprivate Ġvar Ġuser password Ġby ĠPreference Helper ( Constants . PRE F _ KEY _ IS _ USER _ PASSWORD , Ġ"") ĊĠĠĠ Ġprivate Ġvar Ġuser ime i Ġby ĠPreference Helper ( Constants . PRE F _ KEY _ IS _ USER _ USER _ IME I , Ġ"") ĊĠĠĠ Ġprivate Ġvar Ġuser type Ġby ĠPreference Helper ( Constants . PRE F _ KEY _ IS _ USER _ USER _ TYPE , Ġ"") ĊĠĠĠ Ġprivate Ġvar Ġm Auth : ĠFirebase Auth ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb : ĠFirebase Fire store ĊĠĠĠ Ġprivate Ġvar Ġm Progress : ĠProgress Dialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ PERMISSION S _ REQUEST _ CODE Ġ= Ġ 3 3 ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ device _ change ) ĊĠĠĠĠĠĠĠ Ġinitialize Fire Base () ĊĠĠĠĠĠĠĠ Ġset Click () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġinitialize Fire Base () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Progress Ġ= ĠProgress Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġm Auth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠĠĠĠĠ Ġdb Ġ= ĠFirebase Fire store . getInstance () ĊĠĠĠĠĠĠĠ Ġif Ġ( check Permissions ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtm Ġ= Ġget System Service ( Context . TELE PHONY _ SERVICE ) Ġas ĠTele phony Manager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice _ id Ġ= Ġtm . deviceId ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ users _ change _ device _ ime i . setText ( device _ id ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġtv _ users _ change _ device _ request . setOnClickListener Ġ{ Ġsend Request ( et _ users _ change _ device _ ime i . text . toString (), Ġet _ users _ change _ device _ reason . text . toString ()) Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsend Request ( ime i : ĠString , Ġreason : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( validation ( ime i , Ġreason )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress ?. setTitle ( getString ( R . string . app _ name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress ?. setMessage ( getString ( R . string . sending _ notification )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress ?. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress ?. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSign Ġin Ġsuccess , Ġupdate ĠUI Ġwith Ġthe Ġsigned - in Ġuser 's Ġinformation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ IME I ] Ġ= Ġ ime i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ CURRENT _ IME I ] Ġ= Ġuser ime i ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ REASON ] Ġ= Ġreason ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ EMAIL ] Ġ= Ġuser email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ NAME ] Ġ= ĠdisplayName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ STATUS ] Ġ= Ġ" Pending " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ Constants . DEVICE _ CHANGE _ REQUEST _ TIME ] Ġ= ĠField Value . server Timestamp () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb . collection ( Constants . COLLECTION _ DEVICE _ CHANGE _ REQUEST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. document () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( map , ĠSet Options . merge ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġsend _ task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( send _ task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress !!. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . show Dialog ( this , ĠgetString ( R . string . request _ sent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ users _ change _ device _ ime i . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ users _ change _ device _ reason . setText ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress !!. hide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . show Dialog ( this , Ġsend _ task . exception ?. message . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . show Dialog ( this , Ġ" Please Ġfill Ġall Ġdetails ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidation ( ime i : ĠString , Ġreason : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( TextUtils . isEmpty ( ime i )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Validation Warning ( getString ( R . string . title _ missing )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( TextUtils . isEmpty ( reason )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Validation Warning ( getString ( R . string . message _ missing )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( TextUtils . isEmpty ( user email )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Validation Warning ( getString ( R . string . user _ missing )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( android . os . Build . VERSION . SDK _ INT Ġ>= Ġandroid . os . Build . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPackage Manager . PERMISSION _ GRAN TED Ġ== ĠActivity Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ PHONE _ STATE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrequest Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshould Provide R ationale Ġ= ĠActivity Compat . should Show Request Permission R ationale ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ PHONE _ STATE ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( should Provide R ationale ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ admin _ add _ site , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . permission _ ration ale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . READ _ PHONE _ STATE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ PERMISSION S _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . READ _ PHONE _ STATE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ PERMISSION S _ REQUEST _ CODE ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ PERMISSION S _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġwas Ġgranted . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtm Ġ= Ġget System Service ( Context . TELE PHONY _ SERVICE ) Ġas ĠTele phony Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice _ id Ġ= Ġtm . deviceId ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ users _ change _ device _ ime i . setText ( device _ id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġet _ users _ change _ device _ ime i . setSelection ( device _ id . length ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPermission Ġdenied . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( tv _ users _ change _ device _ request , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . permission _ ration ale , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . ok , ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent : ĠIntent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . action Ġ= Ġ ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri : ĠUri Ġ= ĠUri . from Parts (" package ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBuild Config . APPLICATION _ ID , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . data Ġ= Ġuri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} Ċ } Ċ