package Ġcom . al mar ai . eas yp ick . views . screens Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . speech . Recognizer Intent Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view .* Ċ import Ġandroid . view . animation . Animation Utils Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . Saved State Handle Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . al mar ai . data . easy _ pick _ models . Result Ċ import Ġcom . al mar ai . data . easy _ pick _ models . filter . Filters Ċ import Ġcom . al mar ai . data . easy _ pick _ models . route . Route Ċ import Ġcom . al mar ai . data . easy _ pick _ models . route . Route Service Status Ċ import Ġcom . al mar ai . data . easy _ pick _ models . route . Route Status Ċ import Ġcom . al mar ai . data . easy _ pick _ models . util . exhaustive Ċ import Ġcom . al mar ai . eas yp ick . R Ċ import Ġcom . al mar ai . eas yp ick . adapters . Routes Adapter Ċ import Ġcom . al mar ai . eas yp ick . views . custom . search _ view . On Barcode Scan ClickListener Ċ import Ġcom . al mar ai . eas yp ick . views . custom . search _ view . On Speech ToText ClickListener Ċ import Ġcom . al mar ai . eas yp ick . databinding . Screen Route Selection Binding Ċ import Ġcom . al mar ai . eas yp ick . extensions .* Ċ import Ġcom . al mar ai . eas yp ick . utils . Alert T ones Ċ import Ġcom . al mar ai . eas yp ick . utils . Bundle Keys Ċ import Ġcom . al mar ai . eas yp ick . utils . Filter Fun nel Ċ import Ġcom . al mar ai . eas yp ick . utils . Filter Screen Source Ċ import Ġcom . al mar ai . eas yp ick . views . utils . alert _ dialog . show AlertDialog Ċ import Ġcom . al mar ai . eas yp ick . view _ models . Route Selection ViewModel Ċ import Ġcom . al mar ai . eas yp ick . voice . use _ cases . Navigate Screen Ċ import Ġcom . al mar ai . eas yp ick . voice . use _ cases . Screen Ċ import Ġcom . al mar ai . machine _ learning . Live Barcode Sc anning Activity Ċ import Ġcom . al mar ai . machine _ learning . Live Barcode Sc anning Activity . Companion . BAR CODE _ SCAN NER _ ACTIVITY _ RESULT Ċ import Ġcom . al mar ai . machine _ learning . Live Barcode Sc anning Activity . Companion . EXTRA _ SCAN N ED _ BAR CODE Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . android . synt hetic . main . view _ search . view .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . util .* Ċ Ċ @ Android EntryPoint Ċ class ĠRoute Selection Screen Ġ: ĠFragment (), ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġroutes ViewModel : ĠRoute Selection ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġnav Controller : ĠNav Controller ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġscreen Route Selection Binding : ĠScreen Route Selection Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroutes : ĠList < Route > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠRoutes Adapter ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Search View : Ġcom . al mar ai . eas yp ick . views . custom . search _ view . Search View ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ= Ġbind UIS creen ( in flater , Ġcontainer ) ĊĊĠĠĠ Ġprivate Ġfun Ġbind UIS creen ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . inflate ( in flater , ĠR . layout . screen _ route _ selection , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner Ġ= Ġthis @ Route Selection Screen ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ= Ġthis @ Route Selection Screen . routes ViewModel ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġscreen Route Selection Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= ĠNavigation . find Nav Controller ( view ) ĊĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠBAR CODE _ SCAN NER _ ACTIVITY _ RESULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Barcode Sc anned Result ( result Code , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠTEXT _ TO _ SPE E CH _ ACTIVITY _ RESULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Speech ToText Result ( result Code , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Speech ToText Result ( result Code : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata ?. getString ArrayList Extra ( Recognizer Intent . EXTRA _ RESULTS )?. get ( 0 ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . toLowerCase ( Locale . ROOT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. contains ( VOICE _ START _ SERV ING _ COMMAND . toLowerCase ( Locale . ROOT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Number Ġ= Ġresult . filter Ġ{ Ġit . is Digit () Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// If Ġthe Ġabove Ġis Ġa Ġvalid Ġroute Ġnumber , Ġstart Ġserving Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġroutes . first Ġ{ Ġit . number Ġ== Ġroute Number . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( adapter . is Route Not Serv iced ( route . route Status )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . process Selected Route ( route . number ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠNoSuch ElementException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Search View . setText ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Barcode Sc anned Result ( result Code : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġdata ?. getString Extra ( EXTRA _ SCAN N ED _ BAR CODE ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġscanned Ġbarcode Ġin Ġthe Ġsearch Ġview ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Search View . setText ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Set Ġscreen Ġtitle ĊĠĠĠĠĠĠĠ Ġactivity ?. title Ġ= ĠgetString ( R . string . title _ route _ selection ) ĊĊĠĠĠĠĠĠĠ ĠNavigate Screen . CURRENT _ SCREEN Ġ= ĠScreen . Route Selection Screen ĊĊĠĠĠĠĠĠĠ Ġset Has Search View ( true ) ĊĊĠĠĠĠĠĠĠ Ġanimate UI () ĊĊĠĠĠĠĠĠĠ Ġobserve Routes () ĊĠĠĠĠĠĠĠ Ġobserve Routes Statuses () ĊĊĠĠĠĠĠĠĠ Ġset RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġhandle Other Screen Results () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Other Screen Results () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsaved State Handle Ġ= Ġnav Controller . current Back Stack Entry ?. saved State Handle ĊĊĠĠĠĠĠĠĠ Ġhandle Route Processed From Products Screen ( saved State Handle ) ĊĠĠĠĠĠĠĠ Ġhandle Filters From Filter Screen ( saved State Handle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Route Processed From Products Screen ( saved State Handle : ĠSaved State Handle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsaved State Handle ?. get LiveData < Pair < Int , ĠRoute Status >>( Bundle Keys . ROUTE _ PROC ES SED )?. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . first Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlert T ones . play Tone ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Update Ġthe Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow AlertDialog ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . alert _ title _ route _ served , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . alert _ message _ route _ served _ updated , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation ResourceId Ġ= ĠR . raw . anim _ tick ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Filters From Filter Screen ( saved State Handle : ĠSaved State Handle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsaved State Handle ?. get LiveData < Filters >( Bundle Keys . FILTER _ MODEL )?. observe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObserver Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroutes ViewModel . filters Model Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . execute Pending Bindings () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Filter Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Fun nel ( adapter , Ġresult ). filter Routes ( routes ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Notify Ġthe Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// The Ġfilter Ġlist Ġmight Ġtake Ġsome Ġtime Ġto Ġfilter , Ġso Ġadd Ġsome Ġlag Ġto Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 7 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroutes ViewModel . set Route Service Details ( adapter . current List ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroutes ViewModel . is Filtered . value Ġ= Ġroutes . size Ġ!= Ġadapter . current List . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Routes () Ġ{ ĊĠĠĠĠĠĠĠ Ġroutes ViewModel . routes . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Fetching Ġ-> Ġshow ViewState Alert ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlert . Loading , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . fetch ing _ routes ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġshow Data Ui ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Error Ġ-> Ġshow ViewState Alert ( Alert . Error , Ġresult . exception Message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve Routes Statuses () Ġ{ ĊĠĠĠĠĠĠĠ Ġroutes ViewModel . routes Service Status . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ Ġresult Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResult . Success Ġ-> Ġupdate Routes Statuses ( result . data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. exhaustive ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ routes _ screen , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġm Search View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( menu . find Item ( R . id . menu _ route _ action _ search ). action View Ġas Ġcom . al mar ai . eas yp ick . views . custom . search _ view . Search View ) ĊĠĠĠĠĠĠĠ Ġadd Barcode Scan Listener To Search View () ĊĠĠĠĠĠĠĠ Ġadd Speech ToText Listener To Search View () ĊĠĠĠĠĠĠĠ Ġadd Text ChangeListener To Search View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Speech ToText Listener To Search View () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Search View . on Speech ToText ClickListener Ġ= Ġobject Ġ: ĠOn Speech ToText ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġspeech Intent Ġ= ĠIntent ( Recognizer Intent . ACTION _ RE CO GN IZE _ SPE E CH ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe cognizer Intent . EXTRA _ LANGUAGE _ MODEL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRe cognizer Intent . LANGUAGE _ MODEL _ FREE _ FORM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( speech Intent , ĠTEXT _ TO _ SPE E CH _ ACTIVITY _ RESULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Barcode Scan Listener To Search View () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Search View . on Barcode Scan ClickListener Ġ= Ġobject Ġ: ĠOn Barcode Scan ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Route Selection Screen . require Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLive Barcode Sc anning Activity :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠBAR CODE _ SCAN NER _ ACTIVITY _ RESULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Text ChangeListener To Search View () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Search View . search _ input _ text . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Filter Ġthe Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Fun nel ( adapter , ĠFilters ()). search Routes ( s . toString (). trim (), Ġroutes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . filter Screen Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠRoute Selection Screen Directions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. action Route Selection Screen To Filter Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFilter Screen Source . Route Selection Screen , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroutes ViewModel . filters Model ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . navigate ( action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . menu _ route _ action _ search Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Search View . open Search () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch View ( require Context ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . action View Ġas Ġcom . al mar ai . eas yp ick . views . custom . search _ view . Search View ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcom . al mar ai . eas yp ick . views . custom . search _ view . Search View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSearch View ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Routes Statuses ( list : ĠList < Route Service Status >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( list . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Update Ġall Ġroutes Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist . forEach Ġ{ Ġupdated Route Status Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġroute Ġ= Ġroutes . first Ġ{ Ġit . number Ġ== Ġupdated Route Status . number Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( index , Ġroute ) Ġin Ġroutes . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route . number Ġ== Ġupdated Route Status . number ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġroute . route Status Ġ!= Ġupdated Route Status . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute . route Status Ġ= Ġupdated Route Status . status ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Notify Ġthe Ġadapter Ġfor Ġthe Ġroute Ġstatus Ġchange ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . notify Item Changed ( index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Data Ui ( list : ĠList < Route >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// If Ġthe Ġreceived Ġdata Ġis Ġempty ĊĠĠĠĠĠĠĠ Ġif Ġ( list . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ViewState Alert ( Alert . No Data Available , ĠR . string . no _ data _ available _ routes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Hide Ġthe Ġalert ĊĠĠĠĠĠĠĠ Ġhide ViewState Alert () ĊĊĠĠĠĠĠĠĠ Ġroutes Ġ= Ġlist ĊĠĠĠĠĠĠĠ Ġadapter . submit List ( list ) ĊĠĠĠĠĠĠĠ Ġ// adapter . notify DataSet Changed () ĊĊĠĠĠĠĠĠĠ Ġroutes ViewModel . set Route Service Details ( list ) ĊĊĠĠĠĠĠĠĠ Ġset List Focus () ĊĊĠĠĠĠĠĠĠ Ġroutes ViewModel . getAll Route Status () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġanimate UI () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbottom To Top Ġ= ĠAnimation Utils . load Animation ( activity , ĠR . anim . anim _ bottom _ to _ top ) ĊĠĠĠĠĠĠĠ Ġval Ġtop To Bottom Ġ= ĠAnimation Utils . load Animation ( activity , ĠR . anim . anim _ top _ to _ bottom ) ĊĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . screen Route Selection Background Image . start Animation ( top To Bottom ) ĊĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . screen Route Selection Serv iced Label . start Animation ( top To Bottom ) ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . screen Route Selection Serv iced Text . start Animation ( top To Bottom ) ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . screen Product Filtered . start Animation ( top To Bottom ) ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . screen Route Selection Ser ving Label . start Animation ( top To Bottom ) ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . screen Route Selection Ser ving Text . start Animation ( top To Bottom ) ĊĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . re cyclerView . layout Main Recycler view . start Animation ( bottom To Top ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġre cyclerView Ġ= Ġscreen Route Selection Binding . re cyclerView . layout Main Recycler view ĊĠĠĠĠĠĠĠ Ġre cyclerView . animation Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġre cyclerView . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠRoutes Adapter ( this , Ġroutes ViewModel ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( query : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Show Ġthe Ġproduct Ġdetails Ġdialog ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( new Text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Filter Ġthe Ġlist ĊĠĠĠĠĠĠĠ ĠFilter Fun nel ( adapter , ĠFilters ()). search Routes ( new Text , Ġroutes ) ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset List Focus () Ġ= ĊĠĠĠĠĠĠĠ Ġscreen Route Selection Binding . re cyclerView . layout Main Recycler view ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show Focus ( lifecycle Scope Ġ= Ġview Lifecycle Owner . lifecycle Scope ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Route Selection Screen " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT _ TO _ SPE E CH _ ACTIVITY _ RESULT Ġ= Ġ 1 0 0 2 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠV O ICE _ START _ SERV ING _ COMMAND Ġ= Ġ" Start ĠSer ving " ĊĠĠĠ Ġ} Ċ } Ċ