package Ġcom . k un park . resource . view . login čĊč Ċ import Ġandroid . graphics . Rect č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . text . InputType č Ċ import Ġandroid . util . Log č Ċ import Ġandroid . view . View č Ċ import Ġandroid . widget . Toast č Ċ import Ġandroidx . activity . view Models č Ċ import Ġandroidx . lifecycle . Observer č Ċ import Ġcom . google . android . gms . tasks . On Complete Listener č Ċ import Ġcom . google . firebase . iid . Firebase InstanceId č Ċ import Ġcom . google . gson . JsonObject č Ċ import Ġcom . k un park . resource . R č Ċ import Ġcom . k un park . resource . base . Base Activity č Ċ import Ġcom . k un park . resource . utils .* č Ċ import Ġcom . k un park . resource . view . main . MainActivity č Ċ import Ġkotlinx . android . synt hetic . main . activity _ login .* č Ċ import Ġjava . util .* čĊč Ċ class ĠLogin Activity Ġ: ĠBase Activity () Ġ{ čĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠLogin ViewModel Ġby Ġview Models Ġ() čĊĠĠĠ Ġoverride Ġfun Ġinit Event () Ġ{ čĊčĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġinit View () Ġ{ čĊĠĠĠĠĠĠĠ ĠFirebase InstanceId . getInstance (). instanceId čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener ( On Complete Listener Ġ{ Ġtask Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! task . is Successful ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w (" TAG ", Ġ" getInstance Id Ġfailed ", Ġtask . exception ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Complete Listener čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoken Ġ= Ġtask . result ?. token čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġinit ViewModel () Ġ{ čĊĠĠĠĠĠĠĠ ĠviewModel . login Success . observe ( this , ĠObserver Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull Ġ&& Ġit ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD az one Application . getInstance (). m Pref ?. setString ( Constants . USER _ ID , Ġet Id . text . toString ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠD az one Application . getInstance (). m Pref ?. setString ( Constants . PASSWORD , Ġet Pass . text . toString ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Progress Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall Activity ( MainActivity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ ĠviewModel . has SSL . observe ( this , ĠObserver Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin ( et Pass . text . toString (), Ġet Id . text . toString ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ ĠviewModel . errorMessage . observe ( this , ĠObserver Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Progress Dialog () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġit , ĠToast . LENGTH _ LONG ). show () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ login ) čĊčĊĠĠĠĠĠĠĠ Ġbtn Login ?. setOnClickListener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Validation Login () Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUtils . set Server Site ( et Domain . text . toString ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck SSL () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġcheck Validation Login (), ĠToast . LENGTH _ LONG ). show () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġet Domain ?. setText ( D az one Application . getInstance (). m Pref ?. getString ( Constants . COMP ANY _ NAME , Ġ"")) čĊĠĠĠĠĠĠĠ Ġet Pass ?. setText ( D az one Application . getInstance (). m Pref ?. getString ( Constants . PASSWORD , Ġ"")) čĊĠĠĠĠĠĠĠ Ġet Id ?. setText ( D az one Application . getInstance (). m Pref ?. getString ( Constants . USER _ ID , Ġ"")) čĊčĊĠĠĠĠĠĠĠ Ġcs Main ?. view Tree Observer ?. add On Global Layout Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= ĠRect () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġcs Main . getWindow Visible Display Frame ( r ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Height Ġ= Ġcs Main . root View . height čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey pad Height Ġ= Ġscreen Height Ġ- Ġr . bottom čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key pad Height Ġ> Ġscreen Height Ġ* Ġ 0 . 1 5 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Logo . visibility Ġ= ĠView . GONE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimg Logo . visibility Ġ= ĠView . VISIBLE čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġlogin ( password : ĠString , ĠuserName : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJsonObject () čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" language Code ", ĠLocale . getDefault (). language ) čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" time Zone Offset ", ĠTime Utils . getTime zone Offset In Minutes (). toString ()) čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" company Domain ", ĠD az one Application . getInstance (). m Pref ?. getString ( Constants . COMP ANY _ NAME , Ġ"") Ġ?: Ġ"") čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" password ", Ġpassword ) čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" userID ", ĠuserName ) čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" mobile OS Version ", Ġ" Android " Ġ+ Ġandroid . os . Build . VERSION . RELEASE ) čĊčĊĠĠĠĠĠĠĠ Ġshow Progress Dialog () čĊĠĠĠĠĠĠĠ ĠviewModel . login ( params ) čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġcheck SSL () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠJsonObject () čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" Domain ", ĠLocale . getDefault (). language ) čĊĠĠĠĠĠĠĠ Ġparams . addProperty (" Applications ", Ġ" Cre w Resource ") čĊčĊĠĠĠĠĠĠĠ Ġshow Progress Dialog () čĊĠĠĠĠĠĠĠ ĠviewModel . check SSL ( params ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġcheck Validation Login (): ĠString ? Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Domain ?. text ?. isEmpty () Ġ== Ġtrue Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . require _ domain ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Id ?. text ?. isEmpty () Ġ== Ġtrue Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . require _ id ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Pass ?. text ?. isEmpty () Ġ== Ġtrue Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . require _ pass ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġshow Hide Password ( view : ĠView ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( et Pass . input Type Ġ== ĠInput Type . TYPE _ TEXT _ VARI ATION _ VISIBLE _ PASSWORD ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Pass . input Type Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Type . TYPE _ CLASS _ TEXT Ġor ĠInput Type . TYPE _ TEXT _ VARI ATION _ PASSWORD čĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Show . setImage Resource ( R . drawable . ic _ show _ password ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġet Pass . input Type Ġ= ĠInput Type . TYPE _ TEXT _ VARI ATION _ VISIBLE _ PASSWORD čĊĠĠĠĠĠĠĠĠĠĠĠ Ġimg Show . setImage Resource ( R . drawable . ic _ hide _ password ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }