package Ġcom . w lm . mv vm _ wan android . view model Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . w lm . mv vm _ wan android . base . Base ViewModel Ċ import Ġcom . w lm . mv vm _ wan android . base . Ui State Ċ import Ġcom . w lm . mv vm _ wan android . execute Response Ċ import Ġcom . w lm . mv vm _ wan android . repository . Login Repository Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠLogin ViewModel Ġ: ĠBase ViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġrepository Ġby Ġlazy Ġ{ ĠLogin Repository () Ġ} ĊĠĠĠ Ġval Ġui State Ġ= ĠMutable LiveData < Ui State < String >>() ĊĊĠĠĠ Ġfun Ġlogin ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( true , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Catch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . login ( username , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Response ( result , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( false , Ġnull , Ġ"$ username ,$ password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( false , Ġ" çĻ»å½ķ å¤±è´¥ ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( false , Ġ" çĻ»å½ķ å¤±è´¥ ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Cancellation Exception Man ually Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( username : ĠString , Ġpassword : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( true , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Catch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġrepository . register ( username , Ġpassword , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecute Response ( result , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( false , Ġnull , Ġ"$ username ,$ password ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . login ( username , Ġpassword ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( false , Ġ" æ³¨åĨĮ å¤±è´¥ ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Block Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġui State . value Ġ= ĠUi State ( false , Ġ" æ³¨åĨĮ å¤±è´¥ ", Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Cancellation Exception Man ually Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }