package Ġcom . kos ala am Inc . kos ala am . feature . login In Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . net . Network Info Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . method . Hide Returns Transformation Method Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . google . firebase . Firebase Network Exception Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . auth . Firebase Auth Exception Ċ import Ġcom . google . firebase . auth . Firebase User Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . k tx . Firebase Ċ import Ġcom . kos ala am Inc . kos ala am . R Ċ import Ġcom . kos ala am Inc . kos ala am . databinding . Activity Login In Binding Ċ import Ġcom . kos ala am Inc . kos ala am . feature . main . MainActivity Ċ import Ġcom . kos ala am Inc . kos ala am . feature . sign Up . Big ger Dot Password Transformation Method Ċ import Ġcom . kos ala am Inc . kos ala am . global . Application Ċ import Ġcom . kos ala am Inc . kos ala am . util . Loading Dialog Ċ Ċ class ĠLogin In Activity Ġ: ĠAppCompatActivity (){ ĊĠĠĠ Ġprivate Ġvar Ġbinding Ġ: ĠActivity Login In Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġauth : ĠFirebase Auth ĊĠĠĠ Ġval ĠTAG Ġ: ĠString Ġ= Ġ" Login In Activity " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloading Dialog : ĠLoading Dialog ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġ: Login In ViewModel Ġby Ġlazy { ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this ). get ( Login In ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠDelete Ġback stack Ġafter Ġlogin ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġloading Dialog Ġ= ĠLoading Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġauth Ġ= ĠFirebase . auth ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView < Activity Login In Binding >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠR . layout . activity _ login _ in ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Login In Activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogin In Vm Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding !!. login Edit Password . transformation Method Ġ= ĠBig ger Dot Password Transformation Method ĊĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . is Clickable = false ĊĠĠĠĠĠĠĠ Ġinit observe () ĊĠĠĠ Ġ} ĊĠĠĠ Ġpublic Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġval ĠcurrentUser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠ Ġif ( currentUser Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// reload (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit observe (){ ĊĠĠĠĠĠĠĠ Ġwith ( viewModel ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemail _ text _ after . observe ( this @ Login In Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getContent IfNot Handled ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Login In ViewModel . email Check == true Ġ&& ĠLogin In ViewModel . pass Word Check == true ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . background Ġ= Ġget Drawable ( R . drawable . login _ main oval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . is Clickable = true ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . background Ġ= Ġget Drawable ( R . drawable . login _ default back ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . is Clickable = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword _ after . observe ( this @ Login In Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getContent IfNot Handled ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Login In ViewModel . email Check == true Ġ&& ĠLogin In ViewModel . pass Word Check == true ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . background Ġ= Ġget Drawable ( R . drawable . login _ main oval ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . is Clickable = true ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . background Ġ= Ġget Drawable ( R . drawable . login _ default back ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. tv Login Login bt . is Clickable = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpass Word Visible . observe ( this @ Login In Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getContent IfNot Handled ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Login In ViewModel . password Visible == false ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin In ViewModel . password Visible = true ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. login Off eye . setImage Drawable ( get Drawable ( R . drawable . login _ eye _ on )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. login Edit Password . transformation Method Ġ= ĠHide Returns Transformation Method . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin In ViewModel . password Visible = false ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. login Off eye . setImage Drawable ( get Drawable ( R . drawable . login _ eye _ off )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding !!. login Edit Password . transformation Method Ġ= Big ger Dot Password Transformation Method ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsign In _ Bt . observe ( this @ Login In Activity , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . getContent IfNot Handled ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding !!. login Edit Password . text . toString ()!= null Ġ&& Ġbinding !!. login Edit Email . text . toString ()!= null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( check Internet ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloading Dialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Login In Activity ," Check Ġyour Ġinternet ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Login In Activity ," Check Ġemail Ġor Ġpassword ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġsign In (){ ĊĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth . signIn With Email And Password ( Login In ViewModel . email String , ĠLogin In ViewModel . password String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener ( this ) Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" signIn With Email : success ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġauth . currentUser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . user Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( user ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . w ( TAG , Ġ" signIn With Email : failure ", Ġtask . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( base Context , Ġ" Authentication Ġfailed .", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch ( e : ĠIllegalArgumentException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e Ġ: ĠFirebase Network Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠFirebase Auth Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate UI ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ ĠLogin In ViewModel . email Check = false ĊĠĠĠĠĠĠĠ ĠLogin In ViewModel . pass Word Check = false ĊĠĠĠĠĠĠĠ ĠLogin In ViewModel . password Visible = false ĊĠĠĠĠĠĠĠ Ġbinding = null ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UI ( user Ġ: ĠFirebase User ? ){ ĊĠĠĠĠĠĠĠ Ġloading Dialog . dismiss () ĊĠĠĠĠĠĠĠ Ġif ( user != Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , MainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . user Ġ= Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . prefs . setString (" platform "," email ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . prefs . setString (" user Email ", Login In ViewModel . email String ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . prefs . setString (" password ", Login In ViewModel . password String ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġuser Ġis Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġ@ Suppress (" DE PREC ATION ") ĊĠĠĠ Ġprivate Ġfun Ġcheck Internet (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= Ġthis . getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġactive Network : ĠNetwork Info ? Ġ= Ġcm . active Network Info ĊĠĠĠĠĠĠĠ Ġval Ġis Connected : ĠBoolean Ġ= Ġactive Network ?. isConnected Or Connecting Ġ== Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġis Connected ĊĠĠĠ Ġ} Ċ Ċ }