package Ġcom . raf ay . notes . login Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . navigation . nav Options Ċ import Ġcom . google . android . material . transition . Material Shared Axis Ċ import Ġcom . raf ay . notes . R Ċ import Ġcom . raf ay . notes . databinding . Fragment Login Binding Ċ import Ġcom . raf ay . notes . k tx . ErrorMessage Ċ import Ġcom . raf ay . notes . k tx . long Toast Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ Ċ class ĠLogin Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Login Binding ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Login ViewModel >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġre enter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Login Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding . button Login . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . login ( binding . edit Email . text . toString (), Ġbinding . edit Password . text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . button Register . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( R . id . action _ login Fragment _ to _ sign Up Fragment ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . loading . collect Ġ{ Ġenabled Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Login . isEnabled Ġ= Ġ! enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . button Register . isEnabled Ġ= Ġ! enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit Email . isEnabled Ġ= Ġ! enabled ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit Password . isEnabled Ġ= Ġ! enabled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . error . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Message . BadRequest Ġ-> Ġlong Toast (" Invalid Ġemail Ġand Ġpassword ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Message . Generic Error Ġ-> Ġlong Toast (" Unable Ġto Ġlogin , Ġplease Ġtry Ġagain Ġlater ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . navigation . collect Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin ViewModel . Navigation . Login Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . home Fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Options Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpop Up To ( find Nav Controller (). current Destination !!. id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclusive Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ