/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠJ i ey i Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġt aiwan . no . one . feat . login . presentation . fragments Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . dev rapid . kot link n ifer . lo ge Ċ import Ġcom . google . android . material . transition . Material Shared Axis Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . flow . de bounce Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġt aiwan . no . one . core . presentation . activity . Base Activity Ċ import Ġt aiwan . no . one . core . presentation . fragment . Base Fragment Ċ import Ġt aiwan . no . one . feat . login . databinding . Fragment Forgot Password Binding Ċ import Ġt aiwan . no . one . feat . login . presentation . view models . Analytics ViewModel Ċ import Ġt aiwan . no . one . feat . login . presentation . view models . Login ViewModel Ċ import Ġt aiwan . no . one . k tx . view . after Text Changes Ċ Ċ internal Ġclass ĠF orgot Password Fragment Ġ: ĠBase Fragment < Base Activity <* >, ĠFragment Forgot Password Binding >() Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvm Ġby Ġview Models < Login ViewModel >() ĊĠĠĠ Ġprivate Ġval Ġanalytics Vm Ġby Ġview Models < Analytics ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . X , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġreturn Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . X , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . X , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . X , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind LiveData () Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . reset Resp . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Success Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Vm . navig ated Go Back From Reset () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure (:: lo ge ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvm . isValid Email . observe ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . btn Reset . isEnabled Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġview Component Binding () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd StatusBar Height Margin Top ( binding . btn Back ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Flow Preview ĊĠĠĠ Ġoverride Ġfun Ġcomponent Listeners Binding () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . btn Reset . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . reset Password ( binding . ti et Email . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Vm . clicked Reset Password () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . btn Back . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate Up () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanalytics Vm . navig ated Go Back From Forgot Password () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . ti et Email ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. after Text Changes () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( ta iw an . no . one . k tx . view . Constant . DEFAULT _ DE BOUN CE _ TEXT _ CHANGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ Ġvm . valid Email Format ( it . toString ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( lifecycle Scope ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrendered ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . valid Email Format ( binding . ti et Email . toString ()) Ċ // ĠĠĠĠĠĠĠ ĠFirebase . firestore . collection (" users ") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( Firebase . auth . currentUser ?. uid . or Empty ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Snapshot Listener ( require Activity ()) Ġ{ Ġdocument Snapshot , Ġfirebase Fire store Exception Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog w ( document Snapshot ?. data ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ