/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 . android . tools . idea . wizard . template . impl . fragments . login Fragment . src . app _ package . ui . login Ċ Ċ import Ġcom . android . tools . idea . wizard . template . get Material Component Name Ċ import Ġcom . android . tools . idea . wizard . template . escape Kotlin Identifier Ċ Ċ fun Ġlogin ViewModel Kt ( ĊĠ ĠpackageName : ĠString , ĊĠ Ġuse Android X : ĠBoolean Ċ ) Ġ= Ġ""" Ċ package Ġ${ escape Kotlin Identifier ( packageName )}. ui . login Ċ Ċ import Ġ${ get Material Component Name (" android . arch . lifecycle . LiveData ", Ġuse Android X )} Ċ import Ġ${ get Material Component Name (" android . arch . lifecycle . Mutable LiveData ", Ġuse Android X )} Ċ import Ġ${ get Material Component Name (" android . arch . lifecycle . ViewModel ", Ġuse Android X )} Ċ import Ġandroid . util . Patterns Ċ import Ġ${ escape Kotlin Identifier ( packageName )}. data . Login Repository Ċ import Ġ${ escape Kotlin Identifier ( packageName )}. data . Result Ċ Ċ import Ġ${ packageName }. R Ċ Ċ class ĠLogin ViewModel ( private Ġval Ġlogin Repository : ĠLogin Repository ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ login Form Ġ= ĠMutable LiveData < Login Form State >() ĊĠĠĠ Ġval Ġlogin Form State : ĠLive Data < Login Form State > Ġ= Ġ_ login Form ĊĊĠĠĠ Ġprivate Ġval Ġ_ login Result Ġ= ĠMutable LiveData < Login Result >() ĊĠĠĠ Ġval Ġlogin Result : ĠLive Data < Login Result > Ġ= Ġ_ login Result ĊĊĠĠĠ Ġfun Ġlogin ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġcan Ġbe Ġlaunched Ġin Ġa Ġseparate Ġasynchronous Ġjob ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġlogin Repository . login ( username , Ġpassword ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠResult . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= ĠLogin Result ( success Ġ= ĠLog ged In User View ( displayName Ġ= Ġresult . data . displayName )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Result . value Ġ= ĠLogin Result ( error Ġ= ĠR . string . login _ failed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlogin Data Changed ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is UserName Valid ( username )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Form . value Ġ= ĠLogin Form State ( username Error Ġ= ĠR . string . invalid _ username ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! is Password Valid ( password )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Form . value Ġ= ĠLogin Form State ( password Error Ġ= ĠR . string . invalid _ password ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ login Form . value Ġ= ĠLogin Form State ( is Data Valid Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠA Ġplaceholder Ġusername Ġvalidation Ġcheck ĊĠĠĠ Ġprivate Ġfun Ġis UserName Valid ( username : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( username . contains ("@ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPattern s . EMAIL _ ADDRESS . matcher ( username ). matches () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername . isNotBlank () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠA Ġplaceholder Ġpassword Ġvalidation Ġcheck ĊĠĠĠ Ġprivate Ġfun Ġis Password Valid ( password : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpassword . length Ġ> Ġ 5 ĊĠĠĠ Ġ} Ċ } Ċ """ Ċ