package Ġcom . alf resco . content . search . components Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġcom . air bnb . e po xy . Async E po xy Controller Ċ import Ġcom . air bnb . mv rx . M aver icks View Ċ import Ġcom . air bnb . mv rx . fragment ViewModel Ċ import Ġcom . air bnb . mv rx . with State Ċ import Ġcom . alf resco . content . data . Buckets Ċ import Ġcom . alf resco . content . get Localized Name Ċ import Ġcom . alf resco . content . search . Chip ComponentType Ċ import Ġcom . alf resco . content . search . R Ċ import Ġcom . alf resco . content . search . databinding . Sheet Component Create Binding Ċ import Ġcom . alf resco . content . simple Controller Ċ import Ġcom . alf resco . ui . Bottom Sheet Dialog Fragment Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Behavior Ċ import Ġcom . google . android . material . bottom sheet . Bottom Sheet Dialog Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠComponent Ġsheet Ġfor Ġchip Ġcomponents Ċ Ġ*/ Ċ class ĠCreate Components Sheet Ġ: ĠBottom Sheet Dialog Fragment (), ĠM aver icks View Ġ{ ĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠComponent Create ViewModel Ġby Ġfragment ViewModel () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠSheet Component Create Binding ĊĊĠĠĠ Ġprivate Ġval Ġe po xy Check List Controller : ĠAsync E po xy Controller Ġby Ġlazy Ġ{ Ġe po xy Check List Controller () Ġ} ĊĠĠĠ Ġprivate Ġval Ġe po xy Radio List Controller : ĠAsync E po xy Controller Ġby Ġlazy Ġ{ Ġe po xy Radio List Controller () Ġ} ĊĠĠĠ Ġprivate Ġval Ġe po xy Check Facet List Controller : ĠAsync E po xy Controller Ġby Ġlazy Ġ{ Ġe po xy Check Facet List Controller () Ġ} ĊĠĠĠ Ġvar Ġon Apply : ĠComponent Apply Callback ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Reset : ĠComponent Reset Callback ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġon Cancel : ĠComponent Cancel Callback ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġexecuted Picker Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġmin Visible Item Ġ= Ġ 1 0 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠSheet Component Create Binding . inflate ( in flater , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdialog ?. window ?. set Soft Input Mode ( WindowManager . LayoutParams . SOFT _ INPUT _ STATE _ ALWAYS _ VISIBLE Ġor ĠWindow Manager . LayoutParams . SOFT _ INPUT _ ADJ UST _ RE SIZE ) ĊĠĠĠĠĠĠĠ Ġdialog ?. setOn Cancel Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel ?. invoke () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsetup Components () ĊĠĠĠĠĠĠĠ Ġset Listeners () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview ?. view Tree Observer ?. add On Global Layout Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( dialog Ġas ĠBottom Sheet Dialog ). findViewById < View >( com . google . android . material . R . id . design _ bottom _ sheet ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBottom Sheet Behavior . from < View >( it ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpeek Amount Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpeek Height Ġ= Ġ(( it . parent Ġas ĠView ). height Ġ* Ġpeek Amount ). toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Components () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith State ( viewModel ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . parent View . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . top View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . separator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . title . text Ġ= Ġrequire Context (). get Localized Name ( state . parent ?. category ?. name Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( state . parent ?. category ?. component ?. selector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . TEXT . component Ġ-> Ġsetup Text Component ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . CHECK _ LIST . component Ġ-> Ġsetup Check List Component () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . RADIO . component Ġ-> Ġsetup Radio List Component ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . NUMBER _ RANGE . component Ġ-> Ġsetup Number Range Component ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . SL IDER . component Ġ-> Ġsetup Slider Component ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . DATE _ RANGE . component Ġ-> Ġsetup DateRange Component ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . FAC ETS . component Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent . fac ets ?. buckets ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . size Ġ> Ġmin Visible Item ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . facet Check List Component . re cyclerView . layout Params Ġ= Ġget Recycler view LayoutParams () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . facet Check List Component . search Input Layout . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Facet Component () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . apply Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith State ( viewModel ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. category ?. component ?. selector Ġ== ĠCh ip ComponentType . DATE _ RANGE . component ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . from Date . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input Layout . error Ġ= ĠgetString ( R . string . component _ number _ range _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . toDate . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input Layout . error Ġ= ĠgetString ( R . string . component _ number _ range _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Apply ?. invoke ( state . parent . selected Name , Ġstate . parent . selected Query ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Apply ?. invoke ( state . parent ?. selected Name Ġ?: Ġ"", Ġstate . parent ?. selected Query Ġ?: Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . reset Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Reset ?. invoke ("", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . cancel Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Cancel ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . on Search Complete Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe po xy Check Facet List Controller . request Model Build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Text Component ( state : ĠComponent Create State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame Text ) ĊĠĠĠĠĠĠĠ Ġbinding . text Component . component Parent . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . text Component . name Input . is Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . text Component . name Input . request Focus () ĊĠĠĠĠĠĠĠ Ġbinding . text Component . name Input Layout . hint Ġ= Ġrequire Context (). get Localized Name ( state . parent ?. category ?. component ?. settings ?. placeholder Ġ?: Ġ"") ĊĠĠĠĠĠĠĠ Ġbinding . text Component . name Input . setText ( state . parent ?. selected Name ) ĊĠĠĠĠĠĠĠ Ġstate . parent ?. selected Name ?. length ?. let Ġ{ Ġlength Ġ-> Ġbinding . text Component . name Input . setSelection ( length ) Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . text Component . name Input Layout . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Single Component Data ( s . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Check List Component () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame Check List ) ĊĠĠĠĠĠĠĠ ĠviewModel . build Check ListModel () ĊĠĠĠĠĠĠĠ Ġbinding . check List Component . component Parent . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . check List Component . re cyclerView . set Controller ( e po xy Check List Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Radio List Component ( state : ĠComponent Create State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame Radio ) ĊĠĠĠĠĠĠĠ ĠviewModel . build Single DataModel () ĊĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. selected Name ?. isEmpty () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . copy Default Component Data () ĊĠĠĠĠĠĠĠ Ġbinding . radio List Component . radio Parent . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . radio List Component . re cyclerView . set Controller ( e po xy Radio List Controller ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Number Range Component ( state : ĠComponent Create State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame Number Range ) ĊĠĠĠĠĠĠĠ ĠviewModel . build Single DataModel () ĊĠĠĠĠĠĠĠ Ġbinding . number Range Component . component Parent . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . number Range Component . from Input . is Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġbinding . number Range Component . from Input . request Focus () ĊĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. selected Name ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom ToArray Ġ= Ġstate . parent . selected Name . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . from Value Ġ= Ġfrom ToArray [ 0 ]. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . to Value Ġ= Ġfrom ToArray [ 1 ]. trim () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Range Component . from Input . setText ( from ToArray [ 0 ]. trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Range Component . to Input . setText ( from ToArray [ 1 ]. trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Range Component . from Input . setSelection ( from ToArray [ 0 ]. trim (). length ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . number Range Component . from Input Layout . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġs . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= ĠviewModel . is From Value Valid ( min ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Range Component . number Range Error . visibility Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! valid Ġ-> ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . from Value Ġ= Ġmin ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Format Number Range ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . number Range Component . to Input Layout . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Ġ= Ġs . toString (). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= ĠviewModel . is To Value Valid ( max ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . number Range Component . number Range Error . visibility Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ! valid Ġ-> ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . to Value Ġ= Ġmax ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Format Number Range ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Slider Component ( state : ĠComponent Create State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame Slider ) ĊĠĠĠĠĠĠĠ ĠviewModel . from Value Ġ= Ġ" 0 " ĊĠĠĠĠĠĠĠ ĠviewModel . build Single DataModel () ĊĠĠĠĠĠĠĠ Ġbinding . slider Component . component Parent . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġbinding . slider Component . slider . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent ?. category ?. component ?. settings ?. min ?. let Ġ{ Ġmin Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue From Ġ= Ġmin . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent ?. category ?. component ?. settings ?. max ?. let Ġ{ Ġmax Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvalue To Ġ= Ġmax . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent ?. category ?. component ?. settings ?. step ?. let Ġ{ Ġstep Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstep Size Ġ= Ġstep . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. selected Name ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . slider Component . slider . value Ġ= Ġstate . parent . selected Name . toFloat () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . slider Component . slider . add On ChangeListener Ġ{ Ġ_, Ġvalue , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslider Value Ġ= Ġvalue . toInt (). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( viewModel . is To Value Valid ( slider Value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . to Value Ġ= Ġslider Value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse ĠviewModel . to Value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Format Number Range ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup DateRange Component ( state : ĠComponent Create State ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame DateRange ) ĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . component Parent . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input . input Type Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input . is Cursor Visible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input . input Type Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input . is Cursor Visible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġstate . parent ?. category ?. component ?. settings ?. date Format ?. let Ġ{ Ġformat Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . date Format Ġ= Ġformat . replace (" D ", Ġ" d "). replace (" Y ", Ġ" y ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. selected Name ?. isNotEmpty () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfrom ToArray Ġ= Ġstate . parent . selected Name . split ("- ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . from Date Ġ= ĠgetString ( R . string . date _ format , Ġfrom ToArray [ 0 ]. trim (), Ġfrom ToArray [ 1 ]. trim (), Ġfrom ToArray [ 2 ]. trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input . setText ( viewModel . from Date ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . toDate Ġ= ĠgetString ( R . string . date _ format , Ġfrom ToArray [ 3 ]. trim (), Ġfrom ToArray [ 4 ]. trim (), Ġfrom ToArray [ 5 ]. trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input . setText ( viewModel . toDate ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input . setOn Focus ChangeListener Ġ{ Ġview , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġview . perform Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input . setOn Focus ChangeListener Ġ{ Ġview , Ġhas Focus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( has Focus ) Ġview . perform Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! executed Picker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . component Parent . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecuted Picker Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Calendar ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! executed Picker ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . component Parent . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecuted Picker Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Calendar ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input Layout . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . from Date Ġ= Ġs . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input Layout . isError Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input Layout . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . toDate Ġ= Ġs . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . toString (). isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input Layout . error Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input Layout . isError Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun Ġsetup Facet Component () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . build Check ListModel () ĊĠĠĠĠĠĠĠ Ġbinding . parent View . addView ( binding . frame Facet ) ĊĠĠĠĠĠĠĠ Ġbinding . facet Check List Component . component Parent . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġbinding . facet Check List Component . re cyclerView . set Controller ( e po xy Check Facet List Controller ) ĊĠĠĠĠĠĠĠ Ġbinding . facet Check List Component . search Input Layout . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno - op ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Search Query ( s . toString (). trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Search Query ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . search Query Ġ= Ġcleanup Search Query ( query ) ĊĠĠĠĠĠĠĠ ĠviewModel . search Bucket ( search Text Ġ= ĠviewModel . search Query ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcleanup Search Query ( query : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġquery . replace ("\\ s +". to Regex (), Ġ" Ġ"). trim () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinvalidate () Ġ= Ġwith State ( viewModel ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . parent ?. category ?. component ?. selector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . CHECK _ LIST . component Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe po xy Check List Controller . request Model Build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . RADIO . component Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe po xy Radio List Controller . request Model Build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . FAC ETS . component Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe po xy Check Facet List Controller . request Model Build () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġe po xy Check List Controller () Ġ= Ġsimple Controller ( viewModel ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. category ?. component ?. settings ?. options ?. isNotEmpty () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent . category ?. component ?. settings ?. options ?. forEach Ġ{ Ġoption Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView Check Row Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( option . hashCode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Selected ( viewModel . is Option Selected ( state , Ġoption )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener Ġ{ Ġmodel , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Multiple Component Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . data (). name Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . data (). value Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġe po xy Radio List Controller () Ġ= Ġsimple Controller ( viewModel ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġif Ġ( state . parent ?. category ?. component ?. settings ?. options ?. isNotEmpty () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent . category ?. component ?. settings ?. options ?. forEach Ġ{ Ġoption Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView Radio Row Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( option . hashCode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ( option ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Selected ( viewModel . is Option Selected ( state , Ġoption )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener Ġ{ Ġmodel , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Single Component Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). get Localized Name ( model . data (). name Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . data (). value Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġe po xy Check Facet List Controller () Ġ= Ġsimple Controller ( viewModel ) Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠ Ġvar Ġlist Bucket : ĠList < Buckets >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state . parent ?. category ?. component ?. selector ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCh ip ComponentType . FAC ETS . component Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Bucket Ġ= Ġif Ġ( viewModel . search Query . isNotEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search Bucket List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . parent . fac ets ?. buckets ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( list Bucket ?. isNotEmpty () Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Bucket . forEach Ġ{ Ġbucket Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistView Facet Check Row Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid ( bucket . hashCode ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata ( bucket ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption Selected ( viewModel . is Option Selected ( state , Ġbucket )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Listener Ġ{ Ġmodel , Ġ_, Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Multiple Component Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). get Localized Name ( model . data (). label Ġ?: Ġ""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodel . data (). filter Query Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Calendar ( is From : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġsuspend Coroutine < String ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDate Picker Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Date Ġ= ĠviewModel . from Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Date Ġ= ĠviewModel . toDate , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis From Ġ= Ġis From , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateFormat Ġ= ĠviewModel . date Format ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Success Ġ{ Ġdate Ġ-> Ġit . resume ( date ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Failure Ġ{ Ġit . resume ( null ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecuted Picker Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . component Parent . isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ?. let Ġ{ Ġdate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is From ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . from Date Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . from Input . setText ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . toDate Ġ= Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . date Range Component . to Input . setText ( date ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . update Format DateRange () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Recycler view LayoutParams (): ĠLinearLayout . LayoutParams Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcalculated Height Ġ= ĠTyped Value . apply Dimension ( Typed Value . COMPLEX _ UNIT _ DIP , Ġmin Visible Item Ġ* Ġ 4 8 f , Ġresources . display Metrics ). toInt () ĊĠĠĠĠĠĠĠ Ġreturn ĠLinearLayout . LayoutParams ( Relative Layout . LayoutParams . MATCH _ PARENT , Ġcalculated Height ) ĊĠĠĠ Ġ} Ċ } Ċ