package Ġcom . set iy awan . ro ome x ample . ui . main Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . set iy awan . ro ome x ample . R Ċ import Ġcom . set iy awan . ro ome x ample . data . model . Person Ċ import Ġcom . set iy awan . ro ome x ample . extensions . show Toast Ċ import Ġcom . set iy awan . ro ome x ample . ui . create _ and _ update . Create AndUpdate Activity Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠMain Adapter Click Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfab Ġ: ĠFloating ActionButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain RecyclerView Ġ: ĠRecyclerView ĊĠĠĠ Ġprivate Ġval Ġmain ViewModel Ġ: ĠMain ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) Ċ // ĠĠĠĠĠĠĠ Ġset Support ActionBar ( findViewById ( R . id . toolbar )) ĊĠĠĠĠĠĠĠ Ġsetup UI () ĊĠĠĠĠĠĠĠ Ġon Fab Tap () ĊĠĠĠĠĠĠĠ Ġsetup Adapter () ĊĠĠĠĠĠĠĠ Ġobserve () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain ViewModel . get Pers ons (). observe ( this , Ġ{ Ġhandle Person Change ( it ) Ġ}) ĊĠĠĠĠĠĠĠ Ġmain ViewModel . getState (). observe ( this , Ġ{ Ġhandle Main State ( it ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Person Change ( persons : ĠList < Person > ){ ĊĠĠĠĠĠĠĠ Ġmain RecyclerView . adapter ?. let Ġ{ Ġadapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter Ġis ĠMain Adapter ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . update List ( persons ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Main State ( state : ĠMain State ){ ĊĠĠĠĠĠĠĠ Ġwhen ( state ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMain State . Show Toast Ġ-> Ġshow Toast ( state . message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup UI (){ ĊĠĠĠĠĠĠĠ Ġfab Ġ= ĠfindViewById ( R . id . fab ) ĊĠĠĠĠĠĠĠ Ġmain RecyclerView Ġ= ĠfindViewById ( R . id . person _ recyclerview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġmain RecyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠMain Adapter ( mutable ListOf (), Ġthis @ MainActivity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ settings Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġmain ViewModel . all Person () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonTap ( person : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠCreate AndUpdate Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" is _ new ", Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra (" id ", Ġperson . id ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Fab Tap (){ ĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this @ MainActivity , ĠCreate AndUpdate Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Long Tap ( person : ĠPerson ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Toast (" on Ġlong Ġtap ") ĊĠĠĠ Ġ} Ċ }