/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠK a ush ik ĠN . ĠSan ji Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . ui . signup Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . databinding . Activity SignUp Binding Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . di . component . Activity Component Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . ui . base . Base Activity Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . ui . login . Login Activity Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . ui . main . MainActivity Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . common . Status Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . common . observe Event Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . common . observe Resource Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . common . view Binding Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . display . show When Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . widget . setError Status Ċ import Ġcom . mind ork s . ka ush ik ns an ji . instagram . demo . utils . widget . setText OnChange Ċ Ċ /** Ċ Ġ* Ġ[ Base Activity ] Ġsubclass Ġthat Ġinfl ates Ġthe Ġlayout Ġ' R . layout . activity _ sign _ up ' Ġto Ġshow Ġthe ĠSign - Up Ġscreen . Ċ Ġ* Ġ[ SignUp ViewModel ] Ġis Ġthe Ġprimary Ġ[ android x . lifecycle . ViewModel ] Ġof Ġthis ĠActivity . Ċ Ġ* Ċ Ġ* Ġ@ author ĠK a ush ik ĠN ĠSan ji Ċ Ġ*/ Ċ class ĠSign Up Activity Ġ: ĠBase Activity < SignUp ViewModel >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" SignUp Activity " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠView Binding Ġinstance Ġfor Ġthis ĠActivity ĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġview Binding ( Activity SignUp Binding :: inflate ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInject s Ġdependencies Ġexposed Ġby Ġ[ Activity Component ] Ġinto ĠActivity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġinject Dependencies ( activity Component : ĠActivity Component ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Component . inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠProvides Ġthe Ġ[ Root ĠView ][ View ] Ġfor Ġthe ĠActivity ĊĠĠĠĠ Ġ* Ġinfl ated Ġusing Ġ` Android ĠView Binding `. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġprovide ContentView (): ĠView Ġ= Ġbinding . root ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes Ġthe ĠLayout Ġof Ġthe ĠActivity . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsetup View ( savedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġtext Ġchange Ġlistener Ġon ĠEmail Ġfield Ġfor Ġvalidations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit SignUp Email . do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġemail Ġtext Ġchanges , Ġdelegate Ġto Ġthe ĠSign Up ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Email Change ( text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġtext Ġchange Ġlistener Ġon ĠPassword Ġfield Ġfor Ġvalidations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit SignUp Password . do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġpassword Ġtext Ġchanges , Ġdelegate Ġto Ġthe ĠSign Up ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Password Change ( text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġtext Ġchange Ġlistener Ġon ĠName Ġfield Ġfor Ġvalidations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġedit SignUp Name . do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġname Ġtext Ġchanges , Ġdelegate Ġto Ġthe ĠSign Up ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Name Change ( text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġclick Ġlistener Ġon Ġ" Sign ĠUp " ĠButton ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton SignUp . setOnClickListener Ġ{ ĠviewModel . on SignUp () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġclick Ġlistener Ġon Ġ" Login Ġwith ĠEmail " ĠButton ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Button SignUp Option Login . setOnClickListener Ġ{ ĠviewModel . on Login With Email () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġthat Ġinitializes Ġthe Ġ[ android x . lifecycle . LiveData ] Ġob servers . ĊĠĠĠĠ Ġ* ĠCan Ġbe Ġoverridden Ġby Ġsubclasses Ġto Ġinitialize Ġother Ġ[ android x . lifecycle . LiveData ] Ġob servers . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġsetup Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setup Observer s () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠEmail Ġfield Ġvalue Ġto Ġset Ġthe Ġnew Ġvalue Ġon Ġchange ĊĠĠĠĠĠĠĠ ĠviewModel . email Field . observe ( this ) Ġ{ Ġemail Value Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit SignUp Email . setText OnChange ( email Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠPassword Ġfield Ġvalue Ġto Ġset Ġthe Ġnew Ġvalue Ġon Ġchange ĊĠĠĠĠĠĠĠ ĠviewModel . password Field . observe ( this ) Ġ{ Ġpassword Value Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit SignUp Password . setText OnChange ( password Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠName Ġfield Ġvalue Ġto Ġset Ġthe Ġnew Ġvalue Ġon Ġchange ĊĠĠĠĠĠĠĠ ĠviewModel . name Field . observe ( this ) Ġ{ Ġname Value Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edit SignUp Name . setText OnChange ( name Value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠEmail Ġfield Ġvalidation Ġresult Ġto Ġshow Ġthe Ġerror Ġif Ġany ĊĠĠĠĠĠĠĠ ĠviewModel . email Validation . observe Resource ( this ) Ġ{ Ġstatus : ĠStatus , Ġmessage Res Id : ĠInt ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textInput SignUp Email . setError Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Res Id ?. run Ġ{ ĠgetString ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠPassword Ġfield Ġvalidation Ġresult Ġto Ġshow Ġthe Ġerror Ġif Ġany ĊĠĠĠĠĠĠĠ ĠviewModel . password Validation . observe Resource ( this ) Ġ{ Ġstatus : ĠStatus , Ġmessage Res Id : ĠInt ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textInput SignUp Password . setError Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Res Id ?. run Ġ{ ĠgetString ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠName Ġfield Ġvalidation Ġresult Ġto Ġshow Ġthe Ġerror Ġif Ġany ĊĠĠĠĠĠĠĠ ĠviewModel . name Validation . observe Resource ( this ) Ġ{ Ġstatus : ĠStatus , Ġmessage Res Id : ĠInt ? Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . textInput SignUp Name . setError Status ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Res Id ?. run Ġ{ ĠgetString ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġon ĠSign - Up Ġrequest Ġprogress Ġto Ġshow / hide Ġthe ĠProgress ĠCircle ĊĠĠĠĠĠĠĠ ĠviewModel . sign Up Progress . observe ( this ) Ġ{ Ġstarted : ĠBoolean Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġthe ĠProgress ĠCircle Ġwhen Ġ[ started ], Ġelse Ġleave Ġit Ġhidden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . progress SignUp . show When ( started ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġfor ĠMainActivity Ġlaunch Ġevents ĊĠĠĠĠĠĠĠ ĠviewModel . launch Main . observe Event ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠMainActivity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () Ġ// ĠTermin ate Ġthis Ġactivity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister Ġan Ġobserver Ġfor ĠLogin Activity Ġlaunch Ġevents ĊĠĠĠĠĠĠĠ ĠviewModel . launch Login . observe Event ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( application Context , ĠLogin Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () Ġ// ĠTermin ate Ġthis Ġactivity ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }