package Ġcom . ld l . wan android pro . ui . main . activity Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . blank j . util code . util .* Ċ import Ġcom . jak ew h art on . r xb ind ing 3 . view . click s Ċ import Ġcom . jak ew h art on . r xb ind ing 3 . widget . editor Action Events Ċ import Ġcom . ld l . wan android pro . R Ċ import Ġcom . ld l . wan android pro . base . activity . Base Activity Ċ import Ġcom . ld l . wan android pro . core . dao . History Data Ċ import Ġcom . ld l . wan android pro . databinding . Activity Search Binding Ċ import Ġcom . ld l . wan android pro . ui . main . adapter . Hot Search ListAdapter Ċ import Ġcom . ld l . wan android pro . view model . main . Search ViewModel Ċ import Ġcom . z hy . view . flow layout . Flow Layout Ċ import Ġcom . z hy . view . flow layout . Tag Adapter Ċ import Ġcom . z hy . view . flow layout . Tag Flow Layout Ċ import Ġkotlinx . android . synt hetic . main . activity _ search .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* Ġä½ľèĢħ ï¼ļ L DL ĠåĪĽå»º æĹ¶éĹ´ ï¼ļ 2 0 2 0 / 5 / 2 8 Ċ Ġ* Ġ ç±» è¯´æĺİ ï¼ļ Ċ Ġ*/ Ċ class ĠSearch Activity Ġ: ĠBase Activity < Activity Search Binding >() Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < Search ViewModel >() ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Adapter : ĠHot Search ListAdapter ĊĊĠĠĠ Ġprivate Ġvar Ġm Fl History : ĠTag Flow Layout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Cl History : ĠConstraint Layout ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġget Layout Id (): ĠInt Ġ= ĠR . layout . activity _ search ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created () ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĠĠĠĠĠĠĠ Ġinit EditText () ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĠĠĠĠĠĠĠ Ġinit Head () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . get Top Search Data () ĊĠĠĠĠĠĠĠ ĠviewModel . load All History Data () ĊĠĠĠĠĠĠĠ Ġobserve () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit EditText () Ġ{ ĊĠĠĠĠĠĠĠ Ġadd Subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġet _ search . editor Action Events (). subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġet _ search . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Object Utils . isEmpty ( s )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ subscribe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add History Data ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyboard Utils . hide Soft Input ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Search List Activity ( key Ġ= Ġs ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ subscribe ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ subscribe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Inf late Params ") ĊĠĠĠ Ġprivate Ġfun Ġinit Head () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhead View Ġ= ĠLayoutInflater . from ( this ). inflate ( R . layout . layout _ search _ head , Ġnull ) ĊĠĠĠĠĠĠĠ Ġm Adapter . add Header View ( head View ) ĊĠĠĠĠĠĠĠ Ġm Cl History Ġ= Ġhead View . findViewById ( R . id . cl _ history ) ĊĠĠĠĠĠĠĠ Ġval Ġiv Del Ġ= Ġhead View . findViewById < ImageView >( R . id . iv _ del ) ĊĠĠĠĠĠĠĠ Ġm Fl History Ġ= Ġhead View . findViewById ( R . id . fl _ history ) ĊĠĠĠĠĠĠĠ Ġadd Subscribe ( iv Del . click s () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. throttle First ( 2 , ĠTimeUnit . SECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . clear History Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cl History ?. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv _ search . set Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠ Ġrv _ search . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠHot Search ListAdapter ( viewModel . top Search DataList ) ĊĠĠĠĠĠĠĠ Ġrv _ search . adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠ Ġm Adapter . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Search List Activity ( viewModel . top Search DataList [ position ]. name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Tag Flow Layout ( history DataList : ĠList < History Data >) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Fl History ?. adapter Ġ= Ġobject Ġ: ĠTag Adapter < History Data >( history DataList ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget View ( parent : ĠFlow Layout ?, Ġposition : ĠInt , Ġt : ĠHistory Data ?): ĠView Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtv Ġ= ĠTextView ( parent ?. context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġt ?. key ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . setTextColor ( Color Utils . getColor ( R . color . color Text Black )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Size Ġ= Ġ 1 2 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . set Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConvert Utils . dp 2 px ( 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConvert Utils . dp 2 px ( 4 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConvert Utils . dp 2 px ( 1 0 f ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConvert Utils . dp 2 px ( 4 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . setBackground Resource ( R . drawable . selector _ search _ fl _ bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtv ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Fl History ?. setOn Tag ClickListener Ġ{ Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Search List Activity ( history DataList [ position ]. key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Tag ClickListener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Utils . finish Activity ( this , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ search Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġet _ search . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Object Utils . isNotEmpty ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . add History Data ( et _ search . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKeyboard Utils . hide Soft Input ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Search List Activity ( et _ search . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Search List Activity ( key : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch List Activity . start ( key ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġobserve () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . history Data . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Object Utils . isNotEmpty ( it )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cl History ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Tag Flow Layout ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ ĠviewModel . top Search Data . observe ( this , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter . set List ( viewModel . top Search DataList ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }