package Ġcom . ak in ci . chat ter . feature . login . view Ċ Ċ import Ġandroid . animation . Value Animator . INF IN ITE Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment Ċ import Ġandroidx . transition . Fade Ċ import Ġandroidx . transition . Transition Inflater Ċ import Ġandroidx . transition . Transition Set Ċ import Ġcom . ak in ci . chat ter . R Ċ import Ġcom . ak in ci . chat ter . common . component . Sn ackBar Ċ import Ġcom . ak in ci . chat ter . common . extension . validate Min Character Ċ import Ġcom . ak in ci . chat ter . common . helper . Resource Ċ import Ġcom . ak in ci . chat ter . databinding . Fragment Login Binding Ċ import Ġcom . ak in ci . chat ter . feature . login . view model . Login ViewModel Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġtim ber . log . Tim ber Ċ Ċ @ Android EntryPoint Ċ class ĠLogin Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠFragment Login Binding ĊĠĠĠ Ġprivate Ġval Ġlogin ViewModel Ġ: ĠLogin ViewModel Ġby Ġview Models () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , ĠR . layout . fragment _ login , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġview Lifecycle Owner ĊĠĠĠĠĠĠĠ Ġbinding . vm Ġ= Ġlogin ViewModel ĊĊĠĠĠĠĠĠĠ Ġ/** Ġview Ġtransition Ġconfiguration Ġ**/ ĊĠĠĠĠĠĠĠ Ġval Ġenter Transition Set Ġ= ĠTransition Set () ĊĠĠĠĠĠĠĠ Ġenter Transition Set . add Transition ( Transition Inflater . from ( context ). inflate Transition ( android . R . transition . move )) ĊĠĠĠĠĠĠĠ Ġenter Transition Set . duration Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġshared Element Enter Transition Ġ= Ġenter Transition Set ĊĊĠĠĠĠĠĠĠ Ġval Ġenter Fade Ġ= ĠF ade () ĊĠĠĠĠĠĠĠ Ġenter Fade . start Delay Ġ= Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġenter Fade . duration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= Ġenter Fade ĊĊĠĠĠĠĠĠĠ Ġval Ġexit Fade Ġ= ĠF ade () ĊĠĠĠĠĠĠĠ Ġexit Fade . start Delay Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġexit Fade . duration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠ Ġexit Transition Ġ= Ġexit Fade ĊĠĠĠĠĠĠĠ Ġ/** Ġ**/ ĊĊĠĠĠĠĠĠĠ Ġ/** ĠLogin ĠButton Ġaction Ġ**/ ĊĠĠĠĠĠĠĠ Ġbinding . btn Login . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġvalidate Ġlogin Ġfields . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( binding . et UserName . validate Min Character ( 2 )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġfields Ġare Ġvalid . ĠPro ceed Ġto Ġlogin . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogin ViewModel . action Login () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackBar . make ( binding . root , Ġ Ġ" Please Ġcheck Ġinput Ġfields .", ĠSn ackBar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (" Login Fragment Ġcreated .. ") ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ// login Ġscreen Ġch atter Ġicon Ġanimation ĊĠĠĠĠĠĠĠ Ġbinding . animation . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat Count Ġ= ĠIN FIN ITE ĊĠĠĠĠĠĠĠ Ġ}. play Animation () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġlogin ViewModel . login EventHandler . observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( it ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Info Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġinfo Ġmessage Ġon Ġsn ackBar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackBar . make ( binding . root , Ġit . message , ĠSn ackBar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ?. let Ġ{ Ġis User Verified Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( is User Verified ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĠNavigate Ġuser Ġto Ġchat Ġdashboard . Ġ**/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Host Fragment . find Nav Controller ( this ). navigate ( R . id . action _ login Fragment _ to _ chat Dashboard Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġshow Ġinfo Ġmessage Ġon Ġsn ackBar ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackBar . make Large ( binding . root , Ġit . message , ĠSn ackBar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }