package Ġcom . mg . ax ech en . wan android . block . search Ċ Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . reflect . Type Token Ċ import Ġcom . mg . ax ech en . wan android . R Ċ import Ġcom . mg . ax ech en . wan android . base . Base Activity Ċ import Ġcom . mg . ax ech en . wan android . block . collect . base . Base Collect Activity Ċ import Ġcom . mg . ax ech en . wan android . block . details . Detail Activity Ċ import Ġcom . mg . ax ech en . wan android . block . details . WebView Activity Ċ import Ġcom . mg . ax ech en . wan android . block . main . home . Custom Load More View Ċ import Ġcom . mg . ax ech en . wan android . jav abe an . Home Data Ċ import Ġcom . mg . ax ech en . wan android . jav abe an . Project List Bean Ċ import Ġcom . mg . ax ech en . wan android . jav abe an . Search Tag Ċ import Ġcom . mg . ax ech en . wan android . jav abe an . Search ViewType Ċ import Ġcom . mg . ax ech en . wan android . utils . Key Board Utils Ċ import Ġcom . mg . ax ech en . wan android . utils . Share Preferences Cont ants Ċ import Ġcom . mg . ax ech en . wan android . utils . SharedPreferences Utils Ċ import Ġkotlinx . android . synt hetic . main . activity _ search .* Ċ import Ġnetwork . schedules . Scheduler Provider ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠA xe Ch en Ġon Ġ 2 0 1 8 / 4 / 1 0 . Ċ Ġ* Ġæ Ĳ ľç´¢ Ċ Ġ*/ Ċ class ĠSearch Activity Ġ: ĠBase Collect Activity (), ĠSearch Contract . View Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġsear Tags Ġ= Ġmutable ListOf < Search Tag >() ĊĊĠĠĠ Ġprivate Ġvar Ġhistory Tags Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġprivate Ġvar Ġitems Ġ= Ġmutable ListOf < Search ViewType >() ĊĊĠĠĠ Ġprivate Ġval Ġlist Adapter : ĠSearch ListAdapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch ListAdapter ( items , Ġthis ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpresenter : ĠSearch Presenter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠSearch Presenter ( this , Ġthis , ĠScheduler Provider . get Inst at n ce () !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġl unch ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( Intent ( context , ĠSearch Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Layout Id (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠR . layout . activity _ search ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit ActionBar () ĊĠĠĠĠĠĠĠ Ġinit Adapter () ĊĠĠĠĠĠĠĠ Ġinit EditText Input Listener () ĊĠĠĠĠĠĠĠ Ġinit Clear () ĊĠĠĠĠĠĠĠ Ġload History () ĊĠĠĠĠĠĠĠ Ġget Search Tag () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Clear () Ġ{ ĊĠĠĠĠĠĠĠ Ġiv Clear . setOnClickListener ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed Search . setText ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġiv Clear . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Recommend () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload History () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġjson String Ġ= ĠSharedPreferences Utils . getString ( Share Preferences Cont ants . HISTORY _ SEARCH ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! TextUtils . isEmpty ( json String )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Tags Ġ= ĠGson (). fromJson ( json String , Ġobject Ġ: ĠType Token < Mutable List < String >>() Ġ{} . type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd History ( tag : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( history Tags . size Ġ== Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Tags . remove At ( history Tags . size Ġ- Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( history Tags . contains ( tag )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhistory Tags . add ( tag ) ĊĠĠĠĠĠĠĠ Ġvar Ġjson String Ġ= ĠGson (). toJson ( history Tags , Ġobject Ġ: ĠType Token < Mutable List < String >>() Ġ{} . type ) ĊĠĠĠĠĠĠĠ ĠSharedPreferences Utils . putString ( Share Preferences Cont ants . HISTORY _ SEARCH , Ġjson String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Recommend () Ġ{ ĊĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġif Ġ( sear Tags . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Search ViewType ( Search ViewType . VIEW _ TYPE _ SELECTION , Ġ" çĥŃ éĹ¨ æĲľç´¢ ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Search ViewType ( Search ViewType . VIEW _ TYPE _ RE COMM END , Ġsear Tags )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( history Tags . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Search ViewType ( Search ViewType . VIEW _ TYPE _ HISTORY _ SELECTION , Ġ" åİĨåı² è®°å½ķ ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ å±ķç¤º åİĨåı² æĲľç´¢ ĊĠĠĠĠĠĠĠ Ġfor Ġ( it Ġin Ġhistory Tags ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Search ViewType ( Search ViewType . VIEW _ TYPE _ HISTORY , Ġit )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item ?. itemId Ġ== Ġandroid . R . id . home ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Search Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . get Search Tag () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ActionBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġtoolbar . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Home Button Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit EditText Input Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġed Search . 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 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġs . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Clear . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġiv Clear . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġed Search . setOn Editor ActionListener ( TextView . On Editor ActionListener Ġ{ Ġv , Ġaction Id , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ SEARCH ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġed Search . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd History ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è°ĥçĶ¨ æİ¥åı£ ï¼Į å¼Ģå§ĭ æĲľç´¢ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Board Utils . close Keyboard ( this @ Search Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . search ( str , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Search Activity , Ġ" æĲľç´¢ æĸĩåŃĹ ä¸ºç©º ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ On Editor ActionListener Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Search Tag Success ( lists : ĠMutable List < Search Tag >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( lists . size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsear Tags . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsear Tags . addAll ( lists ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġshow Recommend () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv List . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( this @ Search Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġlist Adapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist Adapter . set Enable Load More ( true ) ĊĠĠĠĠĠĠĠ Ġlist Adapter . set Load More View ( Custom Load More View ()) ĊĊĠĠĠĠĠĠĠ Ġlist Adapter . setOn ItemClickListener Ġ{ Ġadapter , Ġview , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items [ position ]. item Type Ġ== ĠSearch ViewType . VIEW _ TYPE _ RESULT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhome Data Ġ= Ġitems [ position ]. item Ġas ĠHome Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDetail Activity . l unch ( this @ Search Activity , Ġhome Data , Ġhome Data . collect , Ġhome Data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( items [ position ]. item Type Ġ== ĠSearch ViewType . VIEW _ TYPE _ HISTORY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġstr Ġ= Ġitems [ position ]. item Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . search ( str , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġed Search . setText ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Board Utils . close Keyboard ( this @ Search Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Adapter . recommend ClickListener Ġ= Ġobject Ġ: ĠSearch ListAdapter . Recommend ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrecommend Click ( tag : ĠSearch Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . search ( tag . name !! , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġed Search . setText ( tag . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Board Utils . close Keyboard ( this @ Search Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Adapter . setOn Item Child ClickListener Ġ{ Ġadapter , Ġview , Ġposition Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view . id Ġ== ĠR . id . tv Clear ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSharedPreferences Utils . putString ( Share Preferences Cont ants . HISTORY _ SEARCH , Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Tags . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠKey Board Utils . close Keyboard ( this @ Search Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Recommend () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ Search Activity , ĠgetString ( R . string . clear _ history _ success ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( view . id Ġ== ĠR . id . iv Like ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsearch Type Ġ= Ġitems [ position ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhom data : ĠHome Data Ġ= Ġsearch Type . item Ġas ĠHome Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hom data . collect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . un Collect Article ( hom data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . collect In Article ( hom data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhom data . collect Ġ= Ġ! hom data . collect ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlist Adapter . setOn Load More Listener ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . search ( ed Search . text . toString (), Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ}, Ġrv List ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget SearchResult Success ( bean : ĠProject List Bean , Ġis Refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġbean . datas !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Search ViewType ( Search ViewType . VIEW _ TYPE _ RESULT , Ġresult )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist Adapter . load More Complete () ĊĠĠĠĠĠĠĠ Ġlist Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload All Result ( bean : ĠProject List Bean , Ġis Refresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Refresh ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist Adapter . set Enable Load More ( false ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġbean . datas !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . add ( Search ViewType ( Search ViewType . VIEW _ TYPE _ RESULT , Ġresult )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlist Adapter . load More Complete () ĊĠĠĠĠĠĠĠ Ġlist Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġget SearchResult Fail ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlist Adapter . set Enable Load More ( false ) ĊĠĠĠĠĠĠĠ Ġlist Adapter . load More Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Search Tag Fail ( msg : ĠString ) Ġ{ ĊĠĠĠ Ġ} Ċ Ċ }