package Ġir . es ma e ili . stop car . ui . fragments . cars Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Port er D uff Color Filter Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Interpolator Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . google . android . material . text field . TextInput EditText Ċ import Ġir . es ma e ili . stop car . BR Ċ import Ġir . es ma e ili . stop car . R Ċ import Ġir . es ma e ili . stop car . adapter . Color Pick Adapter Ċ import Ġir . es ma e ili . stop car . databinding . Dialog New Car Binding Ċ import Ġir . es ma e ili . stop car . models . Alert View Ċ import Ġir . es ma e ili . stop car . models . Car Color Ċ import Ġir . es ma e ili . stop car . models . EventType Ċ import Ġir . es ma e ili . stop car . models . Response Ċ import Ġir . es ma e ili . stop car . ui . base . Base Bottom Sheet Ċ import Ġir . es ma e ili . stop car . ui . fragments . new car . Car Color Callback Ċ import Ġir . es ma e ili . stop car . ui . fragments . new car . New Car Fragment Ċ import Ġir . es ma e ili . stop car . ui . fragments . park . Select Car Dialog ViewModel Provider Ċ import Ġir . es ma e ili . stop car . utils . Constants Ċ import Ġir . es ma e ili . stop car . utils . New Car EditText ChangeListener Ċ import Ġir . es ma e ili . stop car . utils . Number Exclude Filter Ċ import Ġir . es ma e ili . stop car . utils . Utils Ċ import Ġjp . was ab eef . recyclerview . anim ators . Slide In Up Animator Ċ import Ġjavax . inject . Inject ĊĊ Ċ class ĠNew Car Dialog Fragment Ġ: ĠBase Bottom Sheet < Dialog New Car Binding , ĠNew Car Dialog ViewModel >(), ĊĠĠĠ ĠCar Color Callback Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġfactory : ĠNew Car Dialog ViewModel Provider ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĠĠĠ Ġlateinit Ġvar ĠmContext : ĠContext ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm ViewModel : ĠNew Car Dialog ViewModel ĊĠĠĠ Ġprivate Ġvar Ġis Color Expanded Ġ= Ġfalse ĊĠĠĠ Ġlateinit Ġvar Ġutils : ĠUtils ĊĠĠĠĠĠĠĠ Ġ@ Inject Ġset ĊĊĠĠĠ Ġoverride Ġfun Ġon Color Pick ed ( car Color : ĠCar Color ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . set Car Color ( car Color . color ) ĊĠĠĠĠĠĠĠ Ġexpand Color Picker () ĊĠĠĠĠĠĠĠ Ġchange Car Drawable Color ( car Color ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Car Drawable Color ( car Color : ĠCar Color ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( car Color . color . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . tv New Car Color . setTextColor ( Color . parse Color ( car Color . color )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . tv New Car Color . compound Draw ables . forEach Ġ{ Ġdrawable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( drawable Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawable . color Filter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort er D uff Color Filter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ( car Color . color ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPort er D uff . Mode . SRC _ IN ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . dialog _ new _ car ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Binding Variable (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBR . viewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget ViewModel (): ĠNew Car Dialog ViewModel Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel Ġ= ĠViewModel Provider ( this , Ġfactory ). get ( New Car Dialog ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġm ViewModel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . viewModel Ġ= Ġm ViewModel ĊĠĠĠĠĠĠĠ Ġview Data Binding . shared ViewModel Ġ= Ġshared ViewModel ĊĠĠĠĠĠĠĠ Ġview Data Binding . layout Manager Ġ= ĠGrid LayoutManager ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmContext , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . COLOR _ P ICK _ SPAN _ COUNT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . VERTICAL , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . adapter Ġ= ĠColor Pick Adapter ( m ViewModel . get Car Colors (), Ġthis ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . slide In Up Animator Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSlide In Up Animator ( Interpolator Ġ{ ĠConstants . ITEM _ ANIM ATOR _ INTER POL ATOR Ġ}) ĊĠĠĠĠĠĠĠ Ġview Data Binding . rv New Car Color . is Nested Scrolling Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġedit Text Events () ĊĠĠĠĠĠĠĠ Ġinit Observer s () ĊĠĠĠĠĠĠĠ Ġsetup Toolbar () ĊĠĠĠĠĠĠĠ Ġinit Saved State Observer s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Saved State Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . input Is NotEmpty ( view Data Binding . ed t New Car Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . get Car Name (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġset TextInput Layout ( view Data Binding . ed t New Car Name , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . input Is NotEmpty ( view Data Binding . ed t New Car Model )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . get Car Model (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġset TextInput Layout ( view Data Binding . ed t New Car Model , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġm ViewModel . get Car Color (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Car Drawable Color ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCar Color ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . input Is NotEmpty ( view Data Binding . ed t Ir Code )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . get Car Pl aque Ir Code (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġset TextInput Layout ( view Data Binding . ed t Ir Code , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . input Is NotEmpty ( view Data Binding . ed t Part Three Code )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . get Car Pl aque Part Three Code (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġset TextInput Layout ( view Data Binding . ed t Part Three Code , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . input Is NotEmpty ( view Data Binding . ed t New Car Keyword )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . get Car Pl aque Key Word (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġset TextInput Layout ( view Data Binding . ed t New Car Keyword , Ġit ) Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( utils . input Is NotEmpty ( view Data Binding . ed t New Car Two Part )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . get Car Pl aque Part Two (). observe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġset TextInput Layout ( view Data Binding . ed t New Car Two Part , Ġit ) Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset TextInput Layout ( input : ĠText Input EditText , Ġtext : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput . setText ( text ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġinit Observer s () Ġ{ ĊĠĠĠĠĠĠĠ Ġm ViewModel . getNew Car LiveData (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . set Alert Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlert View . Custom Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEventType . SUCCESS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . label _ success _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . label _ success _ save _ car ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ done _ gray _ 2 4 dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ New Car Dialog Fragment . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResponse . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared ViewModel . set Alert Event ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlert View . Custom Toast ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEventType . ERROR , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . label _ error _ title ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresources . getString ( R . string . label _ error _ save _ car ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ error _ white _ 2 4 dp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ New Car Dialog Fragment . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġm ViewModel . get EventHandler (). observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . EVENT _ EXPAND _ COLOR _ P ICK ER Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpand Color Picker () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexpand Color Picker () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Color Expanded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . rv New Car Color . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . tv New Car Color . set Compound Draw ables With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ arrow _ drop _ down _ gray _ 2 4 dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ car _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Color Expanded Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . rv New Car Color . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . tv New Car Color . set Compound Draw ables With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ arrow _ drop _ up _ gray _ 2 4 dp , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . ic _ car _ color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Color Expanded Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Sheet Always Expanded (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Activity . set Support ActionBar ( view Data Binding . toolbar ) ĊĠĠĠĠĠĠĠ Ġbase Activity . support ActionBar !!. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġedit Text Events () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Name . edit Text ?. setOn Editor ActionListener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextView . On Editor ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Editor Action ( p 0 : ĠTextView ?, Ġp 1 : ĠInt , Ġp 2 : ĠKeyEvent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ== ĠEditor Info . IME _ ACTION _ NEXT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Model . edit Text ?. request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Model . edit Text ?. setOn Editor ActionListener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTextView . On Editor ActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Editor Action ( p 0 : ĠTextView ?, Ġp 1 : ĠInt , Ġp 2 : ĠKeyEvent ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p 1 Ġ== ĠEditor Info . IME _ ACTION _ NEXT Ġ|| Ġp 1 Ġ== ĠEditor Info . IME _ ACTION _ DONE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutils . hide Keyboard ( base Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . tv New Car Color . request Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Ir C de . edit Text ?. add TextChanged Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNew Car EditText ChangeListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Three Part ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Three Part . edit Text ?. add TextChanged Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNew Car EditText ChangeListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Keyword ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Keyword . edit Text ?. add TextChanged Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNew Car EditText ChangeListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Two Part ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Keyword . edit Text ?. filters Ġ= ĠarrayOf ( Number Exclude Filter ()) ĊĠĠĠĠĠĠĠ Ġview Data Binding . input New Car Two Part . edit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s ?. length Ġ== Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutils . hide Keyboard ( base Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget BackgroundColor (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Night Mode Ġ= Ġm ViewModel . get Preference ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . KEY _ DARK _ N IGHT , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . N IGHT _ MODE _ DEFAULT _ VALUE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( is Night Mode ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( mContext , ĠR . color . color _ night _ background ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . getColor ( mContext , ĠR . color . color _ white ) ĊĠĠĠ Ġ} ĊĊ Ċ }