package Ġcom . m sto yan ov . music lessons Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . app . Nav Utils Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . m sto yan ov . music lessons . model . PhoneNumber Ċ import Ġcom . m sto yan ov . music lessons . model . Student Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠActivity Edit Student Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠfirstName : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠlastName : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġemail : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnotes : ĠEditText ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠAdapter Edit Student ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstudent : ĠStudent ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġphone Numbers Before Editing : ĠList < PhoneNumber > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ edit _ student ) ĊĊĠĠĠĠĠĠĠ Ġstudent Ġ= Ġintent . get Serializable Extra (" ST UD ENT ") Ġas ĠStudent ĊĠĠĠĠĠĠĠ Ġphone Numbers Before Editing Ġ= Ġstudent . phone Numbers . toList () ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById < View >( R . id . toolbar ) Ġas ĠToolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar !!. set Display Home As Up Enabled ( true ) ĊĊĠĠĠĠĠĠĠ ĠfirstName Ġ= ĠfindViewById ( R . id . first _ name ) ĊĠĠĠĠĠĠĠ ĠfirstName . setText ( student . firstName ) ĊĠĠĠĠĠĠĠ ĠfirstName . add TextChanged Listener ( Edit Student Text Watcher ( this )) ĊĊĠĠĠĠĠĠĠ ĠlastName Ġ= ĠfindViewById ( R . id . last _ name ) ĊĠĠĠĠĠĠĠ ĠlastName . setText ( student . lastName ) ĊĠĠĠĠĠĠĠ ĠlastName . add TextChanged Listener ( Edit Student Text Watcher ( this )) ĊĊĠĠĠĠĠĠĠ Ġemail Ġ= ĠfindViewById ( R . id . email ) ĊĠĠĠĠĠĠĠ Ġemail . setText ( student . email ) ĊĊĠĠĠĠĠĠĠ Ġnotes Ġ= ĠfindViewById ( R . id . notes ) ĊĠĠĠĠĠĠĠ Ġnotes . setText ( student . notes ) ĊĊĠĠĠĠĠĠĠ ĠprogressBar Ġ= ĠfindViewById ( R . id . progress _ bar ) ĊĠĠĠĠĠĠĠ ĠprogressBar . isIn determinate Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= ĠfindViewById < RecyclerView >( R . id . phone _ numbers _ list ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠAdapter Edit Student ( student . phone Numbers ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠfindViewById < Floating ActionButton >( R . id . add _ phone _ number ) ĊĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstudent . phone Numbers . add ( PhoneNumber (). copy ( student Id Ġ= Ġstudent . student Id )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġmenu Inflater ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ edit _ student , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Utils . navigate Up From Same Task ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ update Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Student () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate AlertDialog () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( student IsValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . action _ update ). isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . action _ update ). icon . alpha Ġ= Ġ 2 5 5 ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . action _ update ). isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . action _ update ). icon . alpha Ġ= Ġ 1 2 7 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠEdit Student Text Watcher ( private Ġval Ġactivity : ĠActivity ) Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name IsValid ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName . error Ġ= Ġactivity . resources . getString ( R . string . name _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . invalidate Options Menu () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Student () Ġ{ ĊĠĠĠĠĠĠĠ Ġstudent . firstName Ġ= ĠfirstName . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġstudent . lastName Ġ= ĠlastName . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġstudent . email Ġ= Ġemail . text . toString (). trim () ĊĠĠĠĠĠĠĠ Ġstudent . notes Ġ= Ġnotes . text . toString (). trim () ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠActivity Student Details :: class . java ) ĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThread . sleep ( 1 _ 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstudent Ġ= ĠMusic Less ons Application . db . student Dao . update Student With Phone Numbers ( student , Ġphone Numbers Before Editing ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" UPDATED _ ST UD ENT ", Ġstudent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate AlertDialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠString Ġ= Ġif Ġ( student . firstName . trim (). isNotEmpty () Ġ&& Ġstudent . lastName . trim (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Delete Ġstudent Ġ" Ġ+ Ġstudent . firstName . trim () Ġ+ Ġ" ?" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( student . firstName . trim (). isEmpty () Ġ&& Ġstudent . lastName . trim (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Delete Ġstudent Ġ" Ġ+ Ġstudent . lastName . trim () Ġ+ Ġ" ?" ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Delete Ġstudent Ġ" Ġ+ ĠgetString ( R . string . full _ name , Ġstudent . firstName . trim (), Ġstudent . lastName . trim ()) Ġ+ Ġ" ?" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . setMessage ( message ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" OK ") Ġ{ Ġ_, Ġ_ Ġ-> Ġdelete Student () Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . set Negative Button (" Cancel ") Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdo Ġnothing ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Student () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠActivity Main :: class . java ) ĊĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMusic Less ons Application . db . student Dao . delete ( student ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" DELETED _ ST UD ENT _ ID ", Ġstudent . student Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstudent IsValid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! name IsValid ()) Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġstudent . phone Numbers . map Ġ{ Ġpn Ġ-> Ġif Ġ(! pn . isValid ) Ġreturn Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġname IsValid (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠfirstName . text . toString (). trim (). isNotEmpty () Ġ|| ĠlastName . text . toString (). trim (). isNotEmpty () ĊĠĠĠ Ġ} Ċ } Ċ