package Ġcom . c ure ya . c ure 4 mind . register Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . c ure ya . c ure 4 mind . R Ċ import Ġcom . c ure ya . c ure 4 mind . databinding . Fragment Forgot Password Change Pass Binding Ċ import Ġcom . c ure ya . c ure 4 mind . model . User Ċ import Ġcom . c ure ya . c ure 4 mind . register . SignUp Fragment . Companion . PASSWORD Ċ import Ġcom . c ure ya . c ure 4 mind . register . SignUp Fragment . Companion . USER _ LIST Ċ import Ġcom . c ure ya . c ure 4 mind . util . database Ċ import Ġcom . google . android . material . bottomnavigation . Bottom Navigation View Ċ import Ġcom . google . firebase . auth . Email Auth Provider Ċ import Ġcom . google . firebase . auth . k tx . auth Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Error Ċ import Ġcom . google . firebase . database . Value EventListener Ċ import Ġcom . google . firebase . k tx . Firebase Ċ Ċ class ĠChange Password Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġauth Ġ= ĠFirebase . auth ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Forgot Password Change Pass Binding ĊĠĠĠ Ġprivate Ġval Ġnav Argument : ĠChange Password Fragment Args Ġby Ġnav Args () ĊĠĠĠ Ġprivate Ġvar Ġnew Password Ġ= Ġ"" ĊĠĠĠ Ġprivate Ġval Ġkey Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġnav Argument . key ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Forgot Password Change Pass Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġdelete Phone Auth () ĊĊĠĠĠĠĠĠĠ Ġbinding . save Pass Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpassword Ġ= Ġbinding . new Pass EditText . text . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfirm Password Ġ= Ġbinding . confirm Pass EditText . text . toString (). trim () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( validate Password s ( password , Ġconfirm Password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġretrieve Data And SignIn User ( password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Password s Ġfield Ġerror ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġretrieve Data And SignIn User ( new Password : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . child ( USER _ LIST ). child ( key ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Listener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( snapshot : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( snapshot . value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġsnapshot . getValue ( User :: class . java ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġuser . email !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Change Password Fragment . new Password Ġ= Ġnew Password ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsign In CurrentUser ( email , Ġuser . password !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" User Ġdoes Ġnot Ġexists ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( error : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġin Ġretrieving Ġphone Ġnumber Ġdata ", Ġerror . to Exception ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĠĊĊĠĠĠ Ġ// Ġdeleting Ġthe Ġaccount Ġthat Ġlogged - in Ġwith Ġphone Ġauth ĊĠĠĠ Ġ// Ġwith Ġdifferent Ġuid Ġduring Ġmanual Ġo tp Ġvalidation ĊĠĠĠ Ġprivate Ġfun Ġdelete Phone Auth () Ġ{ ĊĠĠĠĠĠĠĠ Ġauth . currentUser ?. delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Phone Auth Ġdeleted ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġdeleting Ġphone Ġerror ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset New Password To Database () Ġ{ ĊĠĠĠĠĠĠĠ Ġdatabase . child ( USER _ LIST ). child ( key ). child ( PASSWORD ). setValue ( new Password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" new Ġpassword Ġset Ġto Ġdatabase ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" error Ġsetting Ġnew Ġpassword Ġto Ġdatabase ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġsign Ġin Ġwith Ġemail Ġand Ġold Ġpassword ĊĠĠĠ Ġprivate Ġfun Ġsign In CurrentUser ( email : ĠString , Ġold Password : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġauth . signIn With Email And Password ( email , Ġold Password ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" User Ġsigned Ġin ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate New Password () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" error Ġsigning Ġin Ġthe Ġuser Ġwith Ġemail : Ġ$ email , Ġpassword : Ġ$ old Password ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate New Password () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġauth . currentUser !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser . update Password ( new Password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset New Password To Database () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgo To Home Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Password Ġupdated ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" error Ġupdating Ġpassword : Ġ$ new Password ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . stack Trace ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Password s ( password : ĠString , Ġconfirm Password : ĠString ) Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpassword . isNotEmpty () Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword . length Ġ> Ġ 7 Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ== Ġconfirm Password ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Home Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( auth . currentUser Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . find Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( R . id . action _ change Password Fragment _ to _ home Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" second Ġtime Ġnav Ġcall Ġaborted ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" can 't Ġnavigate ; Ġuser Ġdoes Ġnot Ġexists ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbottom View Ġ= Ġ( activity Ġas ĠAppCompatActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findViewById < Bottom Navigation View >( R . id . nav _ view ) ĊĠĠĠĠĠĠĠ Ġbottom View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbottom View Ġ= Ġ( activity Ġas ĠAppCompatActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. findViewById < Bottom Navigation View >( R . id . nav _ view ) ĊĠĠĠĠĠĠĠ Ġbottom View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Change Password Fragment " ĊĠĠĠ Ġ} Ċ }