package Ġxyz . s ke ther . rad iline . ui . main Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroidx . annotation . Keep Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġkotlinx . android . synt hetic . main . vh _ main _ genre . view .* Ċ import Ġkotlinx . android . synt hetic . main . vh _ main _ search . view .* Ċ import Ġkotlinx . android . synt hetic . main . vh _ main _ station . view .* Ċ import Ġxyz . s ke ther . rad iline . R Ċ import Ġxyz . s ke ther . rad iline . ui . base . Layout Id Ċ import Ġxyz . s ke ther . rad iline . ui . base . hide Keyboard Ċ Ċ @ Keep Ċ @ Layout Id ( R . layout . vh _ main _ station ) Ċ class ĠStation Main VH ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĊĠĠĠ Ġfun Ġinit ( item : ĠStation Main Item , ĠonClick Listener : Ġ( Station Main Item ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĠonClick Listener ( item ) Ġ} ĊĊĠĠĠĠĠĠĠ ĠitemView . v hm st _ name . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġitem . station . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . v hm st _ listeners . text Ġ= Ġitem . station . listeners . toString () ĊĠĠĠĠĠĠĠ ĠitemView . v hm st _ bit rate . text Ġ= Ġitem . station . bit rate . toString () ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Keep Ċ @ Layout Id ( R . layout . vh _ main _ genre ) Ċ class ĠGen re Main VH ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĊĠĠĠ Ġfun Ġinit ( item : ĠGen re Main Item , ĠonClick Listener : Ġ( Genre Main Item ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . setOnClickListener Ġ{ ĠonClick Listener ( item ) Ġ} ĊĠĠĠĠĠĠĠ ĠitemView . vh mg _ name . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġitem . genre . name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ @ Keep Ċ @ Layout Id ( R . layout . vh _ main _ search ) Ċ class ĠSearch Main VH ( view : ĠView ) Ġ: ĠRecyclerView . ViewHolder ( view ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġhandler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġvar Ġon Query Changed : Ġ(( String ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġtyping Delay Ġ= Ġ 2 0 0 0 L Ġ// Ġ 2 Ġseconds Ġdelay ĊĠĠĠ Ġprivate Ġval Ġafter Typing Delay Ġ= ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠ Ġon Query Changed ?. invoke ( item View . vh msr _ query . text . toString ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġvar Ġtext Watcher : ĠText Watcher ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠitemView . vh msr _ query . setOn Editor ActionListener Ġ{ ĠtextView , Ġaction Id , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( after Typing Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhide Keyboard ( textView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Query Changed ?. invoke ( textView . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit ( item : ĠSearch Main Item , Ġon Query Changed : Ġ( query : ĠString ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . on Query Changed Ġ= Ġon Query Changed ĊĠĠĠĠĠĠĠ ĠitemView . vh msr _ query . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ( item . query ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Watcher Ġ= ĠSearch Text Watcher ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd TextChanged Listener ( text Watcher ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSearch Text Watcher ( val Ġitem : ĠSearch Main Item ) Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( editable : ĠEdit able ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem . query Ġ= Ġeditable . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( after Typing Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( editable . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( after Typing Delay , Ġtyping Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ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 ) Ġ{} ĊĠĠĠ Ġ} Ċ Ċ } Ċ