package Ġcom . ain ul . op rek . ui . activities Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . drawable . Color Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . ain ul . op rek . R Ċ import Ġcom . ain ul . op rek . database . entities . User Ċ import Ġcom . ain ul . op rek . databinding . Activity Detail Project Binding Ċ import Ġcom . ain ul . op rek . ui . view models . Detail ViewModel Ċ import Ġcom . ain ul . op rek . util . Constants Ċ import Ġcom . ain ul . op rek . util . Constants . Status Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Ċ Ċ class ĠDetail Project Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Detail Project Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview model : ĠDetail ViewModel ĊĠĠĠ Ġprivate Ġvar ĠprojectId : ĠLong Ġ= Ġ- 1 L ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// Ġdefines Ġdata Ġbinding ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ detail _ project ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( intent . has Extra ( Constants . PROJECT _ ID ) Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . extras ?. getLong ( Constants . PROJECT _ ID ) Ġ!== Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠprojectId Ġ= Ġintent . extras !!. getLong ( Constants . PROJECT _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser : ĠUser Ġ= Ġintent . extras !!. get Parcelable ( Constants . USER ) !! ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġthe ĠprojectId , Ġassign Ġit Ġto Ġthe Ġview model ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model Ġ= ĠViewModel Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetail ViewModel . Factory ( application , ĠprojectId , Ġuser ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). get ( Detail ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnothing Ġto Ġshow , Ġfinish Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Error Ġgetting Ġinformation ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġview model Ġin Ġthe Ġxml , Ġand Ġattach Ġthe Ġactivity Ġas Ġlifecycle Owner ĊĠĠĠĠĠĠĠ Ġbinding . view model Ġ= Ġview model ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĊĠĠĠĠĠĠĠ Ġ// Ġfinish Ġthe Ġactivity Ġand Ġback Ġto Ġthe Ġprevious Ġscreen Ġwhenever Ġ` navigate Back ` Ġset Ġto Ġtrue ĊĠĠĠĠĠĠĠ Ġview model . navigate Back . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġview model . update Income . observe ( this , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( Constants . RESULT _ CODE _ UPDATED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . update Status Fab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Update Status Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Update Status Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠBottom Sheet Dialog ( this , ĠR . style . App Theme _ Bottom Sheet Dialog ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠLayoutInflater . from ( this ). inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . bottom _ sheet _ edit _ status , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById ( R . id . dialog _ container ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġview Ġto Ġdialog Ġ& Ġcreate Ġdialog Ġfrom Ġthe Ġinfl ated Ġlayout ĊĠĠĠĠĠĠĠ Ġdialog . set ContentView ( view ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġshow Ġdialog ĊĠĠĠĠĠĠĠ Ġdialog . window ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Background Drawable ( Color Drawable ( 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġupdate Status ( dialog , Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Status ( dialog : ĠBottom Sheet Dialog , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitem Done : ĠLinearLayout Ġ= Ġview . findViewById ( R . id . dialog _ item _ done ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Cancel : ĠLinearLayout Ġ= Ġview . findViewById ( R . id . dialog _ item _ cancel ) ĊĠĠĠĠĠĠĠ Ġval Ġitem Progress : ĠLinearLayout Ġ= Ġview . findViewById ( R . id . dialog _ item _ progress ) ĊĊĠĠĠĠĠĠĠ Ġitem Done . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . update Status ( Status . DONE . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Cancel . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . update Status ( Status . CANCEL . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġitem Progress . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . update Status ( Status . PROGRESS . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠConstants . REQUEST _ CODE _ UPDATE _ PROJECT Ġ&& ĠresultCode Ġ== ĠConstants . PROJECT _ UPDATED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . refresh () Ġ// Ġrefresh Ġdata Ġafter Ġupdate ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOverride Ġto Ġcreate Ġoptions Ġfor Ġedit Ġand Ġdelete Ġproject ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . detail _ project _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOverride Ġto Ġdefines Ġmethod Ġfor Ġthe Ġclicked Ġmenu Ġitem ĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . item _ edit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠAdd Project Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Constants . PROJECT _ ID , ĠprojectId ) Ġ// Ġsend Ġproject _ id Ġto Ġupdate ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġstart Ġactivity Ġfor Ġupdating Ġproject ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠConstants . REQUEST _ CODE _ UPDATE _ PROJECT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . item _ delete Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Item Ġdeleted ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview model . onDelete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠOverride Ġmethod Ġto Ġshow Ġback Ġarrow ĊĠĠĠ Ġoverride Ġfun Ġon Support Navigate Up (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }