package Ġcom . example . my application . features . ui . screens Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . bio metric . Bio metric Prompt Ċ import Ġandroidx . compose . foundation . gest ures . Orientation Ċ import Ġandroidx . compose . foundation . gest ures . Scroll able State Ċ import Ġandroidx . compose . foundation . gest ures . remember Scroll able State Ċ import Ġandroidx . compose . foundation . gest ures . scroll able Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . remember Scroll State Ċ import Ġandroidx . compose . foundation . text . Keyboard Options Ċ import Ġandroidx . compose . foundation . vertical Scroll Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Arrow Back Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . runtime . li ved ata . observe As State Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . alpha Ċ import Ġandroidx . compose . ui . platform . Local Lifecycle Owner Ċ import Ġandroidx . compose . ui . res . p ainter Resource Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . text . TextStyle Ċ import Ġandroidx . compose . ui . text . font . Font Weight Ċ import Ġandroidx . compose . ui . text . input . Keyboard Type Ċ import Ġandroidx . compose . ui . text . input . Password Visual Transformation Ċ import Ġandroidx . compose . ui . text . input . TextField Value Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġandroidx . compose . ui . unit . sp Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġcom . example . my application . R Ċ import Ġcom . example . my application . features . main . MainActivity Ċ import Ġcom . example . my application . features . main . MainActivity ViewModel Ċ import Ġcom . example . my application . data . Loading State Ċ import Ġcom . example . my application . data . Result Ċ import Ġcom . example . my application . features . ui .* Ċ import Ġcom . example . my application . utils .* Ċ import Ġcom . example . my application . utils . Dragon Log . sp it Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlin . math . acos ĊĊ Ċ //@ Experimental Unit Api Ċ @ Experimental Cor outines Api Ċ @ Experimental Compose Api Ċ @ Composable Ċ fun ĠAdd New Password ( main Activity : ĠMainActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel : ĠMainActivity ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller State : ĠNav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State Ġ: ĠScaffold State , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġalpha : ĠFloat , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscroll able State Ġ: ĠScroll able State Ġ= Ġremember Scroll able State { 1 f } ){ ĊĊĠĠĠ ĠScaffold ( scaffold State Ġ= Ġscaffold State , Ġtop Bar Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠDefault Top bar ( nav Controller State Ġ= Ġnav Controller State ) ĊĠĠĠ Ġ}, Ġmodifier Ġ= ĠModifier . scroll able ( scroll able State , Ġorientation Ġ= ĠOrientation . Vertical ). alpha ( alpha )) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Content ( fingerprint Util Ġ= Ġmain Activity . fingerprint Util , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain Activity Ġ= Ġmain Activity , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠviewModel , Ġscaffold State Ġ= Ġscaffold State , Ġnav Controller State ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ private Ġfun ĠMain Content ( fingerprint Util : ĠF ingerprint Utils , Ġmain Activity : ĠMainActivity , ĠviewModel : ĠMainActivity ViewModel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State : ĠScaffold State ?, ĠĠ Ġnav Controller State : ĠNav Controller , Ġ Ġaction Coroutine Scope Ġ: ĠCor outine Scope Ġ= Ġremember Coroutine Scope ()){ ĊĊĠĠĠ Ġval Ġweb Text State Ġ= Ġremember Ġ{ Ġmutable State Of ( TextField Value ()) Ġ} ĊĠĠĠ Ġval Ġweb Name Text State Ġ= Ġremember Ġ{ Ġmutable State Of ( TextField Value ()) Ġ} ĊĠĠĠ Ġval Ġbu zz Text State Ġ= Ġremember Ġ{ Ġmutable State Of ( TextField Value ()) Ġ} ĊĠĠĠ Ġval Ġusername State Ġ= Ġremember Ġ{ Ġmutable State Of ( TextField Value ()) Ġ} ĊĠĠĠ Ġval Ġopen Dialog Ġ= Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠĠĠ Ġval Ġbutton State Ġ= Ġremember { Ġmutable State Of ( false ) Ġ} ĊĊĠĠĠ Ġval Ġsave Password To Db State : ĠUi State < out ĠBoolean ?> ? Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġ. save Password Data LiveData . observe As Single State ( initial Ġ= Ġnull ). value ĊĊĠĠĠ ĠAlertDialog Component ( open Dialog Ġ= Ġopen Dialog ) ĊĊĠĠĠ ĠLa unched Effect ( key 1 Ġ= Ġsave Password To Db State ){ ĊĠĠĠĠĠĠĠ Ġsave Password To Db State ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isLoading ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Dialog . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Dialog . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// There Ġwas Ġan Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State ?. sn ackbar Host State ?. show Snackbar ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller State . pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġpassword Text State Ġ= Ġremember Ġ{ Ġmutable State Of ( TextField Value ()) Ġ} ĊĊĠĠĠ Ġval Ġstates ToCheck Ġ= ĠarrayOf ( buzz Text State , ĊĠĠĠĠĠĠĠ Ġweb Name Text State , Ġpassword Text State , Ġweb Text State , Ġusername State ) ĊĊĊĠĠĠ Ġval Ġscroll able State Ġ= Ġremember Scroll able State Ġ{ delta Ġ-> ĊĠĠĠĠĠĠĠ Ġdelta ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ ĠColumn ( modifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠ Ġ. padding ( 2 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ. scroll able ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorientation Ġ= ĠOrientation . Vertical , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġscroll able State ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠText (" Add ĠNew ĠPassword !", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . padding ( 2 8 . dp ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfontSize Ġ= ĠS izes . title Size , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . colors . primary , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠTextStyle ( font Weight Ġ= ĠFontWeight . Bold ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . size ( 3 0 . dp )) ĊĊĠĠĠĠĠĠĠ ĠDefault TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates ToCheck = Ġstates ToCheck , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext State Ġ= Ġweb Text State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton State Ġ= Ġbutton State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText (" Website ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options . Default . copy ( keyboard Type Ġ= ĠKeyboard Type . Uri ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleading Icon Ġ= Ġ{ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= Ġ( R . drawable . ic _ website )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= null Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠDefault TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext State Ġ= Ġweb Name Text State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates ToCheck = Ġstates ToCheck , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton State Ġ= Ġbutton State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText (" Website ĠName ") Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleading Icon Ġ= Ġ{ ĠIcon ( p ainter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpainter Resource ( id Ġ= Ġ( R . drawable . ic _ website )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= null Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Default . copy ( keyboard Type Ġ= ĠKeyboard Type . Text ), ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠPassword ( password Text State ) ĊĊĠĠĠĠĠĠĠ ĠDefault TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext State Ġ= Ġusername State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates ToCheck = Ġstates ToCheck , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton State Ġ= Ġbutton State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText ( string Resource ( R . string . title _ username )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleading Icon Ġ= Ġ{ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= Ġ( R . drawable . ic _ buzz _ msg )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= null Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Default . copy ( keyboard Type Ġ= ĠKeyboard Type . Text ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠDefault TextField ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext State Ġ= Ġbu zz Text State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstates ToCheck = Ġstates ToCheck , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton State Ġ= Ġbutton State , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText ( string Resource ( R . string . title _ other _ info )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġleading Icon Ġ= Ġ{ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= Ġ( R . drawable . ic _ buzz _ msg )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= null Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkeyboard Options Ġ= ĠKeyboard Options ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. Default . copy ( keyboard Type Ġ= ĠKeyboard Type . Text ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠSp acer ( modifier Ġ= ĠModifier . size ( 3 0 . dp )) ĊĊĊĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfingerprint Util . register ( activity Ġ= Ġmain Activity , Ġprocess Result Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Coroutine Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . crypto Object ?. cipher ?. run { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . save Password ( web Text State . value . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweb Name Text State . value . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpassword Text State . value . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother Info Ġ= Ġbu zz Text State . value . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġusername Ġ= Ġusername State . value . text , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . error String ?. run { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscaffold State ?. sn ackbar Host State ?. show Snackbar ( this @ run ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġenabled Ġ= Ġbutton State . value , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 2 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. required Height ( 5 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Save ĠPassword ", ĠfontSize Ġ= Ġ 1 8 . sp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Composable Ċ fun ĠPassword ( password Text State : ĠMutable State < TextField Value > ){ ĊĠĠĠ ĠOut lined TextField ( value Ġ= Ġpassword Text State . value , ĊĠĠĠĠĠĠĠ Ġvisual Transformation Ġ= ĠPassword Visual Transformation (), ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. padding ( 1 0 . dp ), ĊĠĠĠĠĠĠĠ Ġon Value Change Ġ= Ġ{ Ġpassword Text State . value Ġ= it Ġ}, ĊĠĠĠĠĠĠĠ Ġlabel Ġ= Ġ{ ĠText (" Password ") Ġ}, ĊĠĠĠĠĠĠĠ Ġleading Icon Ġ= Ġ{ ĠIcon ( p ainter Ġ= Ġpainter Resource ( id Ġ= Ġ( R . drawable . ic _ password )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Description Ġ= null Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) Ċ } Ċ