/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠSh rey as ĠPat il Ċ Ġ* Ċ Ġ* Ġ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 Ġdev . sh rey as pat il . not y . compose app . ui . screens Ċ Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . background Ċ import Ġandroidx . compose . foundation . click able Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . layout . fill Max Width Ċ import Ġandroidx . compose . foundation . layout . padding Ċ import Ġandroidx . compose . foundation . layout . required Size Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . La unched Effect Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . layout . Content Scale Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . text . Span Style Ċ import Ġandroidx . compose . ui . text . build Annotated String Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġdev . sh rey as pat il . not y . compose app . R Ċ import Ġdev . sh rey as pat il . not y . compose app . component . button . Not y Full Width Button Ċ import Ġdev . sh rey as pat il . not y . compose app . component . dialog . Failure Dialog Ċ import Ġdev . sh rey as pat il . not y . compose app . component . dialog . Loader Dialog Ċ import Ġdev . sh rey as pat il . not y . compose app . component . text . Password TextField Ċ import Ġdev . sh rey as pat il . not y . compose app . component . text . Username TextField Ċ import Ġdev . sh rey as pat il . not y . compose app . ui . theme . typography Ċ import Ġdev . sh rey as pat il . not y . compose app . utils . Not y Preview Ċ import Ġdev . sh rey as pat il . not y . compose app . utils . collect State Ċ import Ġdev . sh rey as pat il . not y . view . view model . Login ViewModel Ċ Ċ @ Composable Ċ fun ĠLogin Screen ( ĊĠĠĠ ĠviewModel : ĠLogin ViewModel , ĊĠĠĠ Ġon Navigate To Signup : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Navigate To Notes : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġval Ġstate Ġby ĠviewModel . collect State () ĊĊĠĠĠ ĠLogin Content ( ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġstate . isLoading , ĊĠĠĠĠĠĠĠ Ġusername Ġ= Ġstate . username , ĊĠĠĠĠĠĠĠ Ġpassword Ġ= Ġstate . password , ĊĠĠĠĠĠĠĠ ĠisValid Username Ġ= Ġstate . isValid Username Ġ?: Ġtrue , ĊĠĠĠĠĠĠĠ ĠisValid Password Ġ= Ġstate . isValid Password Ġ?: Ġtrue , ĊĠĠĠĠĠĠĠ Ġon Username Change Ġ= ĠviewModel :: set Username , ĊĠĠĠĠĠĠĠ Ġon Password Change Ġ= ĠviewModel :: set Password , ĊĠĠĠĠĠĠĠ Ġon Login Click Ġ= ĠviewModel :: login , ĊĠĠĠĠĠĠĠ Ġon Signup Click Ġ= Ġon Navigate To Signup , ĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġstate . error ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠLa unched Effect ( state . is LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . is LoggedIn ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Navigate To Notes () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠLogin Content ( ĊĠĠĠ ĠisLoading : ĠBoolean , ĊĠĠĠ Ġusername : ĠString , ĊĠĠĠ ĠisValid Username : ĠBoolean , ĊĠĠĠ Ġpassword : ĠString , ĊĠĠĠ ĠisValid Password : ĠBoolean , ĊĠĠĠ Ġon Username Change : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Password Change : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Login Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġon Signup Click : Ġ() Ġ-> ĠUnit , ĊĠĠĠ Ġerror : ĠString ? Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( isLoading ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLoader Dialog () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠFailure Dialog ( error ) ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill MaxSize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Material Theme . colors . surface ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. vertical Scroll ( remember Scroll State ()) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTop G reeting () ĊĊĠĠĠĠĠĠĠ ĠLogin Form ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġusername , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Username Ġ= ĠisValid Username , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Username Change Ġ= Ġon Username Change , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisValid Password Ġ= ĠisValid Password , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Password Change Ġ= Ġon Password Change , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Login Click Ġ= Ġon Login Click ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠSign Up Link ( Modifier . align ( Alignment . Center H orizontally ), Ġon Signup Click Ġ= Ġon Signup Click ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠTop G reeting () Ġ{ ĊĠĠĠ ĠColumn ( Modifier . fill Max Width ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠImage ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= Ġ" App ĠLogo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Ġ= Ġpainter Resource ( id Ġ= ĠR . drawable . not y _ app _ logo ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( top Ġ= Ġ 6 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. required Size ( 9 2 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. align ( Alignment . Center H orizontally ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Scale Ġ= ĠContent Scale . Fill Bounds ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Welcome \ n back ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= Ġty pography . h 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( horizontal Ġ= Ġ 1 6 . dp , Ġvertical Ġ= Ġ 3 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠLogin Form ( ĊĠĠĠ Ġusername : ĠString , ĊĠĠĠ ĠisValid Username : ĠBoolean , ĊĠĠĠ Ġpassword : ĠString , ĊĠĠĠ ĠisValid Password : ĠBoolean , ĊĠĠĠ Ġon Username Change : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Password Change : Ġ( String ) Ġ-> ĠUnit , ĊĠĠĠ Ġon Login Click : Ġ() Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠUsername TextField ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 1 6 . dp , Ġvertical Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Material Theme . colors . background ), ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġusername , ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġon Username Change , ĊĠĠĠĠĠĠĠ Ġis Error Ġ= Ġ! isValid Username ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠPassword TextField ( ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 1 6 . dp , Ġvertical Ġ= Ġ 8 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. background ( Material Theme . colors . background ), ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġpassword , ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġon Password Change , ĊĠĠĠĠĠĠĠ Ġis Error Ġ= Ġ! isValid Password ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠNot y Full Width Button ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Login ", ĊĠĠĠĠĠĠĠ ĠonClick Ġ= Ġon Login Click , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( vertical Ġ= Ġ 1 6 . dp , Ġhorizontal Ġ= Ġ 1 6 . dp ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠSign Up Link ( modifier : ĠModifier , Ġon Signup Click : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext Ġ= Ġbuild Annotated String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Don 't Ġhave Ġan Ġaccount ? ĠSign up ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Style ( Span Style ( color Ġ= ĠMaterial Theme . colors . primary ), Ġ 2 3 , Ġthis . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Annotated String () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġstyle Ġ= Ġty pography . subtitle 1 , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= Ġmodifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( vertical Ġ= Ġ 2 4 . dp , Ġhorizontal Ġ= Ġ 1 6 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. click able ( onClick Ġ= Ġon Signup Click ) ĊĠĠĠ Ġ) Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠPreview Login Content () Ġ= ĠNot y Preview Ġ{ ĊĠĠĠ ĠLogin Content ( ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġusername Ġ= Ġ" john doe ", ĊĠĠĠĠĠĠĠ Ġon Username Change Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġpassword Ġ= Ġ" password ", ĊĠĠĠĠĠĠĠ Ġon Password Change Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġon Login Click Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġon Signup Click Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ ĠisValid Password Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ ĠisValid Username Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġnull ĊĠĠĠ Ġ) Ċ } Ċ