package Ġcom . al vin h kh . bu set a . search . ui čĊčĊč Ċ import Ġandroid . app . Search Manager č Ċ import Ġandroidx . lifecycle . ViewModel Provider č Ċ import Ġandroid . content . Activity NotFoundException č Ċ import Ġandroid . content . Intent č Ċ import Ġandroid . net . Uri č Ċ import Ġandroid . os . Build č Ċ import Ġandroid . os . Bundle č Ċ import Ġcom . google . android . material . chip . Chip č Ċ import Ġandroidx . core . content . Context Compat č Ċ import Ġandroidx . appcompat . app . AppCompatActivity č Ċ import Ġandroidx . preference . Preference Manager č Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager č Ċ import Ġandroid . text . Editable č Ċ import Ġandroid . text . Text Watcher č Ċ import Ġandroid . util . Base 6 4 č Ċ import Ġandroid . view . input method . Editor Info č Ċ import Ġandroid . widget . Compound Button č Ċ import Ġandroid . widget . TextView č Ċ import Ġandroid . widget . Toast č Ċ import Ġandroidx . lifecycle . LiveData čĊč Ċ import Ġcom . al vin h kh . bu set a . C č Ċ import Ġcom . al vin h kh . bu set a . R č Ċ import Ġcom . al vin h kh . bu set a . k mb . model . K mb App Intent Data č Ċ import Ġcom . al vin h kh . bu set a . m tr . ui . M tr Bus Activity č Ċ import Ġcom . al vin h kh . bu set a . k mb . ui . K mb Activity č Ċ import Ġcom . al vin h kh . bu set a . l wb . ui . L wb Activity č Ċ import Ġcom . al vin h kh . bu set a . route . model . Route Stop č Ċ import Ġcom . al vin h kh . bu set a . m tr . ui . M tr Station Activity č Ċ import Ġcom . al vin h kh . bu set a . nl b . ui . N lb Activity č Ċ import Ġcom . al vin h kh . bu set a . nw st . ui . Nw st Activity č Ċ import Ġcom . al vin h kh . bu set a . route . model . Route č Ċ import Ġcom . al vin h kh . bu set a . route . ui . Route List ViewModel č Ċ import Ġcom . al vin h kh . bu set a . search . dao . Suggestion Database č Ċ import Ġcom . al vin h kh . bu set a . search . model . Suggestion č Ċ import Ġcom . al vin h kh . bu set a . ui . Pin ned Header Item Decoration č Ċ import Ġcom . al vin h kh . bu set a . utils . Color Util č Ċ import Ġcom . al vin h kh . bu set a . utils . Preference Util č Ċ import Ġcom . google . gson . Gson č Ċ import Ġkotlinx . android . synt hetic . main . activity _ search .* č Ċ import Ġjava . util .* čĊč Ċ import Ġjava . util . regex . Pattern čĊčĊč Ċ class ĠSearch Activity Ġ: ĠAppCompatActivity () Ġ{ čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsuggestion Database : ĠSuggest ion Database čĊčĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠRoute List ViewModel čĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Adapter : ĠSearch View Adapter čĊčĊĠĠĠ Ġprivate Ġvar Ġis Opened Ġ= Ġfalse čĊĠĠĠ Ġprivate Ġvar Ġsearch Query Text Ġ= Ġ"" čĊĠĠĠ Ġprivate Ġvar Ġchecked Providers Ġ= Ġarray ListOf < String >() čĊĠĠĠ Ġprivate Ġvar Ġquery LiveData : ĠLive Data < Mutable List < Route >> ? Ġ= Ġnull čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= ĠContext Compat . getColor ( this , ĠR . color . background ) čĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ> ĠBuild . VERSION _ CODES . P ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. status Bar Color Ġ= Ġcolor čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. navigation Bar Color Ġ= ĠContext Compat . getColor ( this , ĠR . color . transparent ) čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. status Bar Color Ġ= ĠColor Util . dar ken Color ( color ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. navigation Bar Color Ġ= ĠColor Util . dar ken Color ( color ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġsuggestion Database Ġ= ĠSuggest ion Database . getInstance ( this ) !! čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ search ) čĊčĊĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġobject : ĠSearch View Adapter . On ItemClickListener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( data : ĠSearch View Adapter . Data ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . set Class ( application Context , ĠSearch Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . type Ġ== ĠSearch View Adapter . Data . TYPE _ SU G GEST ION ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsuggestion Ġ= Ġdata . obj Ġas ĠSuggest ion čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . ROUTE _ NO , Ġsuggestion . route ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . COMP ANY _ CODE , Ġsuggestion . company Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data . type Ġ== ĠSearch View Adapter . Data . TYPE _ ROUTE ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute Ġ= Ġdata . obj Ġas ĠRoute čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . ROUTE _ NO , Ġroute . name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . COMP ANY _ CODE , Ġroute . company Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Click ( data : ĠSearch View Adapter . Data ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġwith ( provider _ group ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Codes Ġ= Ġarray ListOf ( C . PROVIDER . K MB , ĠC . PROVIDER . CT B , ĠC . PROVIDER . NW FB , ĠC . PROVIDER . N LB , ĠC . PROVIDER . L RT FEED ER ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Listener Ġ= ĠCompound Button . On Checked ChangeListener Ġ{ Ġbutton View , Ġis Checked Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Code Ġ= Ġbutton View . tag Ġas ĠString čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( company Code . isEmpty ()) Ġreturn @ On Checked ChangeListener čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isChecked Ġ&& Ġ! checked Providers . contains ( company Code )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Providers . add ( company Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! isChecked Ġ&& Ġchecked Providers . contains ( company Code )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchecked Providers . remove ( company Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload SearchResult ( search Query Text , Ġchecked Providers , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( company Code Ġin Ġcompany Codes ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Name Ġ= ĠRoute . company Name ( context , Ġcompany Code , Ġ"") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Ġ= ĠCh ip ( context , Ġnull , ĠR . style . Widget _ Material Components _ Chip _ Filter ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . tag Ġ= Ġcompany Code čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . text Ġ= Ġcompany Name čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . chip Icon Ġ= ĠContext Compat . get Drawable ( context , ĠR . drawable . ic _ outline _ directions _ bus _ 2 4 dp ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . set Chip Icon Tint Resource ( R . color . icons ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . is Close Icon Visible Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . is Clickable Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . is Check able Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . isChecked Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . setOn Checked ChangeListener ( chip Listener ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . addView ( chip ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Provider ( this ). get ( Route List ViewModel :: class . java ) čĊĠĠĠĠĠĠĠ Ġwith ( recycler _ view ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Item Decoration ( Pin ned Header Item Decoration ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter Ġ= ĠSearch View Adapter ( listener ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġview Adapter čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġnew Intent Ġ= Ġhandle Intent ( intent ) čĊĠĠĠĠĠĠĠ Ġif Ġ(! new Intent . has Extra ( Search Manager . QUERY )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( new Intent ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠActivity NotFoundException ) Ġ{ Ġ} čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Search Manager . QUERY , Ġnew Intent . getString Extra ( Search Manager . QUERY )) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġintent . getString Extra ( Search Manager . QUERY )?. toUpperCase ( Locale . EN GL ISH ) čĊĠĠĠĠĠĠĠ Ġif Ġ( query Ġ== ĠC . PRE F . AD _ KEY Ġ|| Ġquery Ġ== ĠC . PRE F . AD _ SHOW ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĠPreference Manager . getDefault SharedPreferences ( application Context ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhidden Ġ= Ġpreferences . getBoolean ( C . PRE F . AD _ HIDE , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġpreferences . edit () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . put Boolean ( C . PRE F . AD _ HIDE , Ġquery Ġ== ĠC . PRE F . AD _ KEY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . apply () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstring Id Ġ= ĠR . string . message _ request _ hide _ ad čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( query Ġ== ĠC . PRE F . AD _ SHOW ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Id Ġ= ĠR . string . message _ request _ show _ ad čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hidden Ġ&& Ġquery Ġ== ĠC . PRE F . AD _ KEY ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstring Id Ġ= ĠR . string . message _ request _ hide _ ad _ again čĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , Ġstring Id , ĠToast . LENGTH _ LONG ). show () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġload SearchResult ( query ? :" ", Ġchecked Providers , Ġtrue ) čĊĠĠĠĠĠĠĠ Ġwith ( search _ et ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent . action čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ SEARCH Ġ== Ġaction Ġ&& Ġ! query . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . clear () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext . insert ( 0 , Ġquery ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Editor ActionListener ( TextView . On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġ_ Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġtext ?. replace ("[ ^ a - zA - Z 0 - 9 ]* ". to Regex (), Ġ"") ?. toUpperCase ( Locale . EN GL ISH ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload SearchResult ( t ? :" ", Ġchecked Providers , Ġtrue ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Editor ActionListener Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( p 0 : ĠEdit able ?) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġp 0 ?. replace ("[ ^ a - zA - Z 0 - 9 ]* ". to Regex (), Ġ"") ?. toUpperCase ( Locale . EN GL ISH ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload SearchResult ("$ t %", Ġchecked Providers , Ġfalse ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon New Intent ( intent : ĠIntent ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on New Intent ( intent ) čĊĠĠĠĠĠĠĠ Ġtry Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( handle Intent ( intent )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠActivity NotFoundException ) Ġ{} čĊĠĠĠĠĠĠĠ Ġif Ġ( intent . action Ġ== ĠIntent . ACTION _ SEARCH ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġload SearchResult ( intent . getString Extra ( Search Manager . QUERY )? :" ", Ġempty List (), Ġtrue ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġload SearchResult ( route : ĠString , Ġcompany Codes : ĠList < String >, Ġsingle Will Open : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġquery LiveData ?. remove Observer s ( this @ Search Activity ) čĊĠĠĠĠĠĠĠ Ġsearch Query Text Ġ= Ġroute čĊĠĠĠĠĠĠĠ Ġquery LiveData Ġ= ĠviewModel . live Data ( route , Ġcompany Codes ) čĊĠĠĠĠĠĠĠ Ġquery LiveData ?. observe ( this @ Search Activity , Ġ{ Ġlist Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . clear () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprovider Search List Ġ= Ġarray ListOf < String >() čĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( C . PROVIDER . CT B , ĠC . PROVIDER . K MB , ĠC . PROVIDER . L WB , ĠC . PROVIDER . N LB , ĠC . PROVIDER . NW FB ). forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( checked Providers . size Ġ== Ġ 0 Ġ|| Ġchecked Providers . contains ( it )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Search List . add ( it ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Company Code Ġ= Ġ"" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlast Route No Ġ= Ġ"" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute No Ġ= Ġroute . replace ( Regex ("[ ^ a - zA - Z 0 - 9 Ġ] "), Ġ"") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshown Company Code Ġ= Ġarray ListOf < String >() čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list ?. size ?: 0 Ġ> Ġ 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list ?. size ?: 0 Ġ== Ġ 1 Ġ&& Ġ! list ?. get ( 0 )?. company Code . isNull OrEmpty () Ġ&& Ġsingle Will Open Ġ&& Ġ! is Opened ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Opened Ġ= Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . set Class ( application Context , ĠSearch Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . ROUTE _ NO , Ġroute No ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . COMP ANY _ CODE , Ġlist ?. get ( 0 )?. company Code ? :" ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist ?. forEach Ġ{ Ġroute Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Code Ġ= Ġroute . company Code ?: "" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Company Code Ġ!= Ġcompany Code ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Company Code . isNotBlank () Ġ&& Ġlast Route No . isNotBlank () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġroute No . isNotBlank () Ġ&& Ġprovider Search List . contains ( last Company Code )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add Button ( Suggestion ( 0 , Ġlast Company Code , Ġlast Route No , Ġ 0 , ĠSuggest ion . TYPE _ DEFAULT )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Name Ġ= ĠRoute . company Name ( application Context , Ġcompany Code , Ġroute . name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add Section ( company Name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! shown Company Code . contains ( company Code )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshown Company Code . add ( company Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Route No Ġ!= Ġroute . name ?: "" Ġ|| Ġlast Company Code Ġ!= Ġcompany Code ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add ( route ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Route No Ġ= Ġroute . name ?: "" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Company Code Ġ= Ġcompany Code čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( last Company Code . isNotBlank () Ġ&& Ġlast Route No . isNotBlank () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġroute No . isNotBlank () Ġ&& Ġprovider Search List . contains ( last Company Code )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add Button ( Suggestion ( 0 , Ġlast Company Code , Ġlast Route No , Ġ 0 , ĠSuggest ion . TYPE _ DEFAULT )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route No . isNotBlank ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprovider Search List . forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! shown Company Code . contains ( it )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Name Ġ= ĠRoute . company Name ( application Context , Ġit , Ġroute . replace ( Regex ("[ ^ a - zA - Z 0 - 9 ] "), Ġ"")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add Section ( company Name ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add Section ( getString ( R . string . no _ search _ result )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Adapter . add Button ( Suggestion ( 0 , Ġit , Ġroute . replace ( Regex ("[ ^ a - zA - Z 0 - 9 ] "), Ġ""), Ġ 0 , ĠSuggest ion . TYPE _ DEFAULT )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġprovider Intent ( company Code : ĠString ): ĠIntent Ġ{ čĊĠĠĠĠĠĠĠ Ġvar Ġintent : ĠIntent čĊĠĠĠĠĠĠĠ Ġwhen Ġ( company Code ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . PROVIDER . CT B , ĠC . PROVIDER . NW FB , ĠC . PROVIDER . NW ST Ġ-> Ġintent Ġ= ĠIntent ( application Context , ĠN w st Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . PROVIDER . L RT FEED ER Ġ-> Ġintent Ġ= ĠIntent ( application Context , ĠM tr Bus Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . PROVIDER . M TR Ġ-> Ġintent Ġ= ĠIntent ( application Context , ĠM tr Station Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . PROVIDER . N LB , ĠC . PROVIDER . G MB 9 0 1 Ġ-> Ġintent Ġ= ĠIntent ( application Context , ĠN lb Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠC . PROVIDER . K MB , ĠC . PROVIDER . L WB Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( application Context , ĠL wb Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Util . is Using K mb WebApi ( application Context )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( application Context , ĠK mb Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( application Context , ĠL wb Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Preference Util . is Using K mb WebApi ( application Context )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Ġ= ĠIntent ( application Context , ĠK mb Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġintent . putExtra ( C . EXTRA . COMP ANY _ CODE , Ġcompany Code ) čĊĠĠĠĠĠĠĠ Ġreturn Ġintent čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġhandle Intent ( intent : ĠIntent ): ĠIntent Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġintent . action čĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġintent . data String čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ SEARCH Ġ== Ġaction ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġintent . getString Extra ( Search Manager . QUERY ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! query . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Ġ= Ġintent . getString Extra ( C . EXTRA . COMP ANY _ CODE ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! company . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ( company ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġquery ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( Intent . ACTION _ VIEW Ġ== Ġaction ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġroute Stop : ĠRoute Stop ? Ġ= Ġintent . get Parcelable Extra ( C . EXTRA . STOP _ OBJECT ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop Text Ġ= Ġintent . getString Extra ( C . EXTRA . STOP _ OBJECT _ STRING ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Ġ= Ġintent . getString Extra ( C . EXTRA . COMP ANY _ CODE ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroute No Ġ= Ġintent . getString Extra ( C . EXTRA . ROUTE _ NO ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Stop Ġ== Ġnull Ġ&& Ġ! stop Text . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroute Stop Ġ= ĠGson (). fromJson ( stop Text , ĠRoute Stop :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( route Stop Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ( route Stop . company Code !! ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġroute Stop . route No ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . STOP _ OBJECT , Ġroute Stop ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! route No . isNull OrEmpty () Ġ&& Ġ! company . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ( company ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġroute No ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( intent . data ?. scheme Ġ== Ġ" app 1 9 3 3 ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! data . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdecoded Str Ġ= ĠString ( Base 6 4 . decode ( intent . data ?. path Segments ?. get ( 0 ), ĠBase 6 4 . DEFAULT )) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Data Ġ= Ġgson . fromJson ( decoded Str , ĠK mb App Intent Data :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent Data Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ( C . PROVIDER . K MB ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġintent Data . route ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ SEQUENCE , Ġintent Data . bound ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ SERVICE _ TYPE , Ġintent Data . service Type ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . STOP _ ID , Ġintent Data . stop Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop Object Ġ= ĠRoute Stop () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Object . company Code Ġ= ĠC . PROVIDER . K MB čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Object . route No Ġ= Ġintent Data . route čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Object . route Sequence Ġ= Ġintent Data . bound čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Object . route ServiceType Ġ= Ġintent Data . service Type čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstop Object . stop Id Ġ= Ġintent Data . stop Code čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . STOP _ OBJECT , Ġstop Object ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġintent čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( intent . data ?. host Ġ== Ġ" search . k mb . hk ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . data ?. getQuery Parameter (" action ") Ġ== Ġ" route search ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ( C . PROVIDER . K MB ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġintent . data ?. getQuery Parameter (" route ")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlet Ġbrowser Ġhandle Ġunknown Ġurls čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse (" google chrome :// navigate ? url =${ intent . data String }") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġuri ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( intent . data ?. host Ġ== Ġ" mobile . nw st bus . com . hk ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . data ?. getQuery Parameter (" action ") Ġ== Ġ" ETA ") Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompany Code Ġ= Ġintent . data ?. getQuery Parameter (" comp code ") ?: C . PROVIDER . NW ST čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġservice No Ġ= Ġintent . data ?. getQuery Parameter (" servic eno ") ?: "" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstop Id Ġ= Ġintent . data ?. getQuery Parameter (" stop id ") ?: "" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( service No . isNotEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ( company Code ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġservice No ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . STOP _ ID , Ġstop Id ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! intent . data ?. getQuery Parameter (" ds "). isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( Intent . ACTION _ SEARCH ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . set Class ( this , ĠSearch Activity :: class . java ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( Search Manager . QUERY , Ġintent . data ?. getQuery Parameter (" ds ") ? :" ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . data ?. host ?. startsWith (" http ") Ġ== Ġtrue ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġlet Ġbrowser Ġhandle Ġunknown Ġurls čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠUri . parse (" google chrome :// navigate ? url =${ intent . data String }") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġuri ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . add Flags ( Intent . FLAG _ ACTIVITY _ NEW _ TASK ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! data . isNull OrEmpty ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Query : ĠString ? čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregex Ġ= Ġ"/ route /( .* )/ ?" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregex Pattern Ġ= ĠPattern . compile ( regex ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġregex Pattern . matcher ( data ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Query Ġ= Ġif Ġ( match . find ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatch . group ( 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . substring ( data . lastIndexOf ("/") Ġ+ Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= Ġprovider Intent ("") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra ( C . EXTRA . ROUTE _ NO , Ġlast Query ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġi čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġreturn ĠIntent () čĊĠĠĠ Ġ} č Ċ } čĊ