package Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . char alist Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . navigation . fragment . Fragment Navigator Extras Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . R Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . data . Char a Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . databinding . Fragment Char a List Binding Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . databinding . Item Char a Binding Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . Bottom Nav i Fragment Directions Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . base . Material Spinner Adapter Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . base . ViewType Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . base . ViewType Adapter Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . base . ViewType Holder Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . shared . Shared ViewModel Char a Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . shared . Shared ViewModel Char a Factory Ċ import Ġcom . github . ny an f ant as ia . sh iz ur un otes . ui . shared . Shared ViewModel Equipment ĊĊ Ċ class ĠChar a List Fragment Ġ: ĠFragment (), ĠOn Char a ActionListener Ċ { ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Char a List Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchar a List VM : ĠChar a List ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Char a : ĠShared ViewModel Char a ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshared Equipment : ĠShared ViewModel Equipment ĊĠĠĠ Ġprivate Ġval Ġchar a ListAdapter Ġby Ġlazy Ġ{ ĠView Type Adapter < ViewType < *> >( on Item ActionListener Ġ= Ġthis ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdropdown Text 1 . dismiss DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdropdown Text 2 . dismiss DropDown () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdropdown Text 3 . dismiss DropDown () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġshared Char a Ġ= ĠViewModel Provider ( require Activity ())[ Shared ViewModel Char a :: class . java ] ĊĠĠĠĠĠĠĠ Ġshared Equipment Ġ= ĠViewModel Provider ( require Activity ())[ Shared ViewModel Equipment :: class . java ] ĊĠĠĠĠĠĠĠ Ġchar a List VM Ġ= ĠViewModel Provider ( this , ĠShared ViewModel Char a Factory ( shared Char a ))[ Char a List ViewModel :: class . java ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Char a List Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġset Dropdown Text () ĊĠĠĠĠĠĠĠ Ġset Observer () ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġwith Ġ( binding ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar a Search Bar . add Text ChangeListener ( char a List VM . text Watcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar a ListAdapter . set List ( char a List VM . getView List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar a List Recycler . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġchar a ListAdapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Fragment ?. post p one Enter Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Tree Observer . add On Pre Draw Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Fragment ?. start Post p oned Enter Transition () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Hint Text Visibility ( download Db : ĠBoolean Ġ= Ġfalse , Ġno Result : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . download Db Hint . visibility Ġ= Ġif Ġ( download Db ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠĠĠĠĠ Ġbinding . text Search No Result . visibility Ġ= Ġif Ġ( no Result ) ĠView . VISIBLE Ġelse ĠView . GONE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Observer () Ġ{ ĊĠĠĠĠĠĠĠ Ġchar a List VM . live Char a List . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shared Char a . char a List . value . isNull OrEmpty () Ġ&& Ġshared Char a . loading Flag . value Ġ== Ġfalse Ġ&& Ġshared Equipment . loading Flag . value Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Hint Text Visibility ( download Db Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( shared Char a . char a List . value ?. isNotEmpty () Ġ== Ġtrue Ġ&& Ġit . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Hint Text Visibility ( no Result Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Hint Text Visibility () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar a ListAdapter . set Updated List ( char a List VM . getView List ( it )) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġshared Char a . loading Flag . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . char a List ProgressBar . visibility Ġ= Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġshared Equipment . loading Flag . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . char a List ProgressBar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġshared Char a . char a List . observe ( view Lifecycle Owner , Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate List () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Dropdown Text (){ ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdropdown Text 1 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġchar a List VM . get Spinner ClickListener ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter ( get Spinner Adapter ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdropdown Text 2 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġchar a List VM . get Spinner ClickListener ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter ( get Spinner Adapter ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdropdown Text 3 . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon ItemClickListener Ġ= Ġchar a List VM . get Spinner ClickListener ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Adapter ( get Spinner Adapter ( 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate List () Ġ{ ĊĠĠĠĠĠĠĠ Ġchar a List VM . filter Default () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Spinner Adapter ( type : ĠInt ): ĠMaterial Spinner Adapter < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMaterial Spinner Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . dropdown _ item _ char a _ list , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchar a List VM . dropDown Values Map [ type ] Ġ?: ĠarrayOf () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Char a Clicked Listener ( char a : ĠChar a , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Char a . m Set Selected Char a ( char a ) ĊĠĠĠĠĠĠĠ Ġshared Char a . back Flag Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= Ġbinding . char a List Recycler . find ViewHolder For Adapter Position ( position ) Ġas ĠView Type Holder . General ViewHolder ĊĠĠĠĠĠĠĠ Ġval Ġextras Ġ= ĠFragment Navigator Extras ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( view Holder . binding Ġas ĠItem Char a Binding ). item Char a Ġto Ġ" trans Item _${ char a . char a Id }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠBottom Nav i Fragment Directions . action Nav Bottom Navigation To Nav Char a Details (). set Char a Id ( char a . char a Id ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action , Ġextras ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Item Clicked ( position : ĠInt ) Ġ{ ĊĠĠĠ Ġ} Ċ }