package Ġco . touch lab . k amp kit . android . ui . comp os ables Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Color Ċ import Ġandroidx . compose . foundation . Image Ċ import Ġandroidx . compose . foundation . layout . Arrange ment Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . material . Material Theme Ċ import Ġandroidx . compose . material . Surface Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . collect As State Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . remember Ċ import Ġandroidx . compose . runtime . save able . remember Save able Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . graphics . as Image Bitmap Ċ import Ġandroidx . compose . ui . platform . Local Lifecycle Owner Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . lifecycle . flow With Lifecycle Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġco . touch lab . k amp kit . android . R Ċ import Ġco . touch lab . k amp kit . android . ui . Error Ċ import Ġco . touch lab . k amp kit . android . ui . Login Fields Ċ import Ġco . touch lab . k amp kit . android . ui . view model . User ViewModel Ċ import Ġco . touch lab . k amp kit . models . Data State Ċ import Ġco . touch lab . k amp kit . response . User Ċ import Ġco . touch lab . ker mit . Logger Ċ import Ġcom . google . zx ing . Barcode Format Ċ import Ġcom . google . zx ing . Encode Hint Type Ċ import Ġcom . google . zx ing . qrcode . QR Code Writer ĊĊĊ Ċ @ Composable Ċ fun ĠLogin Screen ( ĊĠĠĠ Ġuser ViewModel : ĠUser ViewModel , ĊĠĠĠ Ġnav Controller : ĠNav Controller , ĊĠĠĠ Ġlog : ĠLogger Ċ ) Ġ{ ĊĊĠĠĠ Ġval Ġlifecycle Owner Ġ= ĠLocal Lifecycle Owner . current ĊĊĊĠĠĠ Ġval Ġlifecycle Aware User Flow Ġ= Ġremember ( user ViewModel . user Flow , lifecycle Owner ){ ĊĠĠĠĠĠĠĠ Ġuser ViewModel . user Flow . flow With Lifecycle ( lifecycle Owner . lifecycle ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ@ Suppress Lint (" State Flow Value Called In Composition ") ĊĠĠĠ Ġval Ġuser State Ġby Ġlifecycle Aware User Flow . collect As State ( user ViewModel . user Flow . value ) ĊĊĊĠĠĠ ĠUser Screen Content ( ĊĠĠĠĠĠĠĠ Ġuser State Ġ= Ġuser State , ĊĠĠĠĠĠĠĠ Ġon Login Click Ġ= Ġ{ Ġemail , Ġpassword Ġ-> Ġuser ViewModel . login ( email , Ġpassword ) Ġ}) Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠUser Screen Content ( ĊĠĠĠ Ġuser State Ġ: ĠData State < User >, ĊĠĠĠ Ġon Login Click : Ġ( String , ĠString ) Ġ-> ĠUnit Ċ ){ ĊĠĠĠ Ġvar Ġemail Ġby Ġremember Save able Ġ{ Ġmutable State Of ("") Ġ} ĊĠĠĠ Ġvar Ġpassword Ġby Ġremember Save able Ġ{ Ġmutable State Of ("") Ġ} ĊĊĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . background , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize () ĊĠĠĠ Ġ){ ĊĊĠĠĠĠĠĠĠ ĠColumn ( modifier Ġ= ĠModifier . fill MaxSize ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user State . data Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogin Fields ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġemail , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġpassword , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Email Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Password Change Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Login Click , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon SignUp Click Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemail , password Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( user State . exception Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError ("${ user State . exception } Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( vertical Arrange ment Ġ= ĠArrange ment . Center , Ġhorizontal Alignment Ġ= ĠAlignment . Center H orizontally ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġstring Resource ( id Ġ= ĠR . string . welcome , user State . data ?. email Ġ?: Ġ" tr mon ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuid Ġ= Ġuser State . data ?. uid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! uid . isNull OrEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage ( bitmap Ġ= Ġget Qr Code Bitmap ( uid ). as Image Bitmap (), Ġcontent Description Ġ= Ġ" Qr code " Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊ Ċ } ĊĊ Ġfun Ġget Qr Code Bitmap ( uid : ĠString ): ĠBitmap Ġ{ ĊĠĠĠ Ġval Ġsize Ġ= Ġ 2 5 6 Ġ// pixels ĊĠĠĠ Ġval Ġqr Code Content Ġ= Ġuid ĊĠĠĠ Ġval Ġhints Ġ= Ġhash Map Of < Encode Hint Type , ĠInt >(). also Ġ{ Ġit [ Encode Hint Type . M ARGIN ] Ġ= Ġ 1 Ġ} Ġ// ĠMake Ġthe ĠQR Ġcode Ġbuffer Ġborder Ġnarrow er ĊĠĠĠ Ġval Ġbits Ġ= ĠQR Code Writer (). encode ( qr Code Content , ĠBar code Format . QR _ CODE , Ġsize , Ġsize ) ĊĠĠĠ Ġreturn ĠBitmap . create Bitmap ( size , Ġsize , ĠBitmap . Config . RGB _ 5 6 5 ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġsize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Pixel ( x , Ġy , Ġif Ġ( bits [ x , Ġy ]) ĠColor . BLACK Ġelse ĠColor . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }