package Ġcom . example . h obby fi . ui . shared Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . navigation . fragment . nav Args Ċ import Ġcom . example . h obby fi . R Ċ import Ġcom . example . h obby fi . adapters . tag . Tag Selection ListAdapter Ċ import Ġcom . example . h obby fi . databinding . Fragment Tag Selection Binding Ċ import Ġcom . example . h obby fi . models . data . Tag Ċ import Ġcom . example . h obby fi . shared . Constants Ċ import Ġcom . example . h obby fi . shared . safe Navigate Ċ import Ġcom . example . h obby fi . shared . show Warning Toast Ċ import Ġcom . example . h obby fi . ui . base . Base Fragment Ċ import Ġcom . example . h obby fi . view models . factories . Tag List ViewModel Factory Ċ import Ġcom . example . h obby fi . view models . shared . Tag Selection Fragment ViewModel Ċ import Ġcom . example . sp end id ly . utils . Vertical Space Item Decoration Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ Ċ class ĠTag Selection Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠTag Selection ListAdapter ĊĠĠĠ Ġprivate Ġval Ġargs : ĠTag Selection Fragment Args Ġby Ġnav Args () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠTag Selection Fragment ViewModel Ġby Ġview Models ( factory Producer Ġ= Ġ{ ĊĠĠĠĠĠĠĠ ĠTag List ViewModel Factory ( require Activity (). application , Ġargs . selected Tags . toList ()) ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġprivate Ġvar Ġ_ binding : ĠFragment Tag Selection Binding ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFragment Tag Selection Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠTag Selection ListAdapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargs . tags . to Mutable List (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState ?. get Parcelable ArrayList < Tag >( Constants . TAGS )?. to Mutable List () Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . initial Selected Tags . to Mutable List () Ġ// Ġnew Ġlist Ġto Ġmodify Ġtags ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag List . addItem Decoration ( Vertical Space Item Decoration ( 1 5 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag List . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ onCreate View Ġroot ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġnav Controller . current Back Stack Entry ?. saved State Handle ?. get LiveData < Tag >( Constants . tags Key )?. observe ( view Lifecycle Owner ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . add Tag ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . increment Custom Tag Counter () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Bar . left Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . previous Back Stack Entry ?. saved State Handle ?. set ( Constants . selected Tags Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . initial Selected Tags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack () Ġ} Ġ// Ġdismiss Ġbutton ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbutton Bar . right Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . previous Back Stack Entry ?. saved State Handle ?. set ( Constants . selected Tags Key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( adapter . getSelected Tags () Ġ== ĠviewModel . initial Selected Tags ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . initial Selected Tags Ġelse Ġadapter . getSelected Tags ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack () Ġ} Ġ// Ġconfirm Ġbutton ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwith ( nav Controller . previous Back Stack Entry ?. destination ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtarget Fragment Id Ġ= Ġthis ?. id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( target Fragment Id Ġ== ĠR . id . register Fragment Ġ|| Ġtarget Fragment Id Ġ== ĠR . id . chat room Create Fragment ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . custom Tag Create Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( viewModel . custom Tag Create Counter Ġ>= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. show Warning Toast ( getString ( R . string . too _ many _ custom _ tags )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOnClickListener ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . safe Navigate ( R . id . action _ tag Selection Dialog Fragment _ to _ custom Tag Create Dialog Fragment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . custom Tag Create Button . visibility Ġ= ĠView . GONE Ġ// Ġcan 't Ġcreate Ġcustom Ġtags Ġin Ġediting / other Ġplaces ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Parcelable ArrayList ( Constants . TAGS , ĠArrayList ( adapter . getSelected Tags ())) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= Ġnull Ġ// Ġnull ify Ġthe Ġbinding Ġ( fragment Ġout li ves Ġthe Ġbinding ) ĊĠĠĠ Ġ} Ċ }