package Ġid . hard ian . password manager . view model Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġid . hard ian . password manager . database . Password Account Ċ import Ġid . hard ian . password manager . database . Password Data Ċ import Ġid . hard ian . password manager . repository . Password Account Repository Ċ import Ġid . hard ian . password manager . repository . Password Data Repository Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠPassword Add ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġrepo : ĠPassword Data Repository , ĊĠĠĠ Ġprivate Ġval Ġaccount Repo : ĠPassword Account Repository Ċ ) Ġ: ĊĠĠĠ ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġ_ done Saving Flag Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġdone Saving : ĠLive Data < Boolean > Ġ= Ġ_ done Saving Flag ĊĊĠĠĠ Ġprivate Ġvar Ġ_ name Validate Flag Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġname Validate Flag : ĠLive Data < Boolean > Ġ= Ġ_ name Validate Flag ĊĊĠĠĠ Ġprivate Ġvar Ġ_ url Validate Flag Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġurl Validate Flag : ĠLive Data < Boolean > Ġ= Ġ_ url Validate Flag ĊĊĠĠĠ Ġprivate Ġvar Ġ_ add Account Flag Ġ= ĠMutable LiveData < Boolean >() ĊĠĠĠ Ġval Ġadd Account Flag : ĠLive Data < Boolean > Ġ= Ġ_ add Account Flag ĊĊĊĠĠĠ Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" View ĠModel Ġis ĠInitialized ") ĊĠĠĠĠĠĠĠ Ġ_ add Account Flag . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Cle ared () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Cle ared () ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Password Add ViewModel Ġis Ġcleared ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdone Saving Finish () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ done Saving Flag . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġname Validate Finish () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ name Validate Flag . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġurl Validate Finish () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ url Validate Flag . value Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonClick Save ( name : ĠString , Ġurl : ĠString , Ġaccount : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! validate Input ( name , Ġurl )) Ġreturn ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġinsert ( name , Ġurl ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert Account ( account , Ġpassword , Ġid ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ done Saving Flag . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġinsert ( name : ĠString , Ġurl : ĠString ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpassword Data Ġ= ĠPassword Data ( 0 ) ĊĠĠĠĠĠĠĠ Ġpassword Data . password Name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġpassword Data . password Url Ġ= Ġurl ĊĠĠĠĠĠĠĠ Ġvar Ġid : ĠLong Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġrepo . insert Password Data ( password Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġinsert Account ( account : ĠString , Ġpassword : ĠString , Ġpassword Id : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Password ĠID : Ġ$ password Id ") ĊĠĠĠĠĠĠĠ Ġval Ġaccount Data Ġ= ĠPassword Account ( 0 , Ġaccount , Ġpassword , Ġpassword Id ) ĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Repo . insert Account ( account Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġvalidate Input ( name : ĠString , Ġurl : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġreturn Val Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ name Validate Flag . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Val Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( url . isBlank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ url Validate Flag . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Val Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreturn Val ĊĠĠĠ Ġ} Ċ Ċ }