package Ġcom . alle ver . app . gif . search . ui . search Ċ Ċ import Ġandroid . app . Progress Dialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . Pager Snap Helper Ċ import Ġcom . alle ver . app . gif . search . BR Ċ import Ġcom . alle ver . app . gif . search . R Ċ import Ġcom . alle ver . app . gif . search . ad . Ad Constants Ċ import Ġcom . alle ver . app . gif . search . ad . Simple Ad Chain Listener Ċ import Ġcom . alle ver . app . gif . search . app . Base Fragment 2 Ċ import Ġcom . alle ver . app . gif . search . app . Global Ċ import Ġcom . alle ver . app . gif . search . bean . event . Download Finish Event Ċ import Ġcom . alle ver . app . gif . search . bean . event . Like Event Ċ import Ġcom . alle ver . app . gif . search . bean . event . Remove Like List Event Ċ import Ġcom . alle ver . app . gif . search . databinding . Fragment Search Binding Ċ import Ġcom . alle ver . app . gif . search . function . download . Download Manager Ċ import Ġcom . alle ver . app . gif . search . function . store . Repository Ċ import Ġcom . alle ver . app . gif . search . function . store . Store Ċ import Ġcom . alle ver . app . gif . search . function . store . Version Ċ import Ġcom . alle ver . app . gif . search . ui . adapter . Gif Adapter Ċ import Ġcom . alle ver . app . gif . search . ui . mvp . view . I Search View Ċ import Ġcom . alle ver . app . gif . search . ui . search . model . Search ViewModel Ċ import Ġcom . alle ver . app . gif . search . ui . widget . RecyclerView Scroll Listener Ċ import Ġcom . alle ver . app . gif . search . util . Image Loader Ċ import Ġcom . alle ver . app . gif . search . util . Sp Utils Ċ import Ġcom . alle ver . lib . ad . chain . Ad Chain Helper Ċ import Ġcom . alle ver . lib . ad . chain . I Ad Ċ import Ġcom . alle ver . lib . common . util . System Utils Ċ import Ġcom . alle ver . lib . common . util . log Ċ import Ġcom . alle ver . lib . common . util . toast Ċ import Ġcom . xm . lib . base . config . Data Binding Config Ċ import Ġcom . xm . lib . util . Handler Helper Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġorg . green robot . event bus . EventBus Ċ import Ġorg . green robot . event bus . Subscribe Ċ import Ġorg . green robot . event bus . Thread Mode Ċ Ċ class ĠSearch Fragment Ġ: ĠBase Fragment 2 < Fragment Search Binding , ĠSearch ViewModel >(), ĠI Search View Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm Adapter : ĠG if Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Progress Dialog : ĠProgress Dialog ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView Scroll Listener : ĠRecyclerView Scroll Listener ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Keyword : ĠString ĊĊĠĠĠ Ġprivate Ġvar Ġm Detail Insert Ad : ĠI Ad ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data Binding Config () Ġ= ĠData Binding Config ( R . layout . fragment _ search , ĠBR . search ViewModel ) ĊĊĠĠĠ Ġoverride Ġfun Ġinit Data And Event () Ġ{ ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). register ( this ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġm Binding . search View Container . layout Params Ġas ĠViewGroup . Margin LayoutParams ĊĠĠĠĠĠĠĠ Ġlayout Params . top Margin Ġ= Ġlayout Params . top Margin Ġ+ ĠSystem Utils . getStatus Bar Height ( context !! ) ĊĠĠĠĠĠĠĠ Ġm Binding . search View Container . layout Params Ġ= Ġlayout Params ĊĊĠĠĠĠĠĠĠ Ġm Keyword Ġ= Ġarguments ?. getString ( EXTRA _ KEY _ WORD ) Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ Ġm Progress Dialog Ġ= ĠProgress Dialog ( activity ) ĊĊĠĠĠĠĠĠĠ Ġm Binding . iv Retry . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . iv Retry . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ( m Keyword ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Binding . search View . setText ( m Keyword ) ĊĠĠĠĠĠĠĠ Ġm Binding . search View . setSelection ( m Keyword . length ) ĊĠĠĠĠĠĠĠ Ġm Binding . search View . add Search Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠG if Adapter ( context !! , ĠR . layout . item _ gif , Ġm ViewModel . gif DataList ) ĊĊĠĠĠĠĠĠĠ Ġre cyclerView Scroll Listener Ġ= ĠRecyclerView Scroll Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView Scroll Listener . On Re cycle Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrefresh () Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload More () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading Progress Dialog ( getString ( R . string . search ing )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ( m Keyword , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊĠĠĠĠĠĠĠ Ġm Binding . gif RecyclerView . add On Scroll Listener ( re cyclerView Scroll Listener ) ĊĊĠĠĠĠĠĠĠ Ġm Binding . gif RecyclerView . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġpager Snap Helper Ġ= ĠP ager Snap Helper () ĊĠĠĠĠĠĠĠ Ġpager Snap Helper . attach To RecyclerView ( m Binding . gif RecyclerView ) ĊĠĠĠĠĠĠĠ Ġm Binding . gif RecyclerView . adapter Ġ= Ġm Adapter ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Keyword Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsearch ( m Keyword ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy View () Ġ{ ĊĠĠĠĠĠĠĠ ĠDownload Manager . getInstance (). cancel All Task () ĊĠĠĠĠĠĠĠ ĠImage Loader . clear Memory Cache () ĊĠĠĠĠĠĠĠ Ġm Detail Insert Ad ?. destroy () ĊĠĠĠĠĠĠĠ ĠEvent Bus . getDefault (). unregister ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsearch ( keyword : ĠString , Ġis Load More : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyword Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( getString ( R . string . please _ input _ search _ content )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġkeyword Ġ= Ġkeyword Ċ // ĠĠĠĠĠĠĠ Ġif Ġ(! Build Config . DEBUG ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Ġ= Ġkeyword . replace (" se xy ", Ġ"") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġkeyword Ġ= Ġkeyword . replace (" sex ", Ġ"") Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Keyword Ġ= Ġkeyword ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= ĠGlobal . SHOW _ COUNT ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġ= ĠSp Utils . getString ( Global . SP _ SEARCH _ OFFSET , Ġ" 0 ") ĊĠĠĠĠĠĠĠ Ġlog (" offset Ġ= Ġ$ offset ") ĊĠĠĠĠĠĠĠ Ġshow Loading Progress Dialog ( getString ( R . string . search ing )) ĊĠĠĠĠĠĠĠ Ġm ViewModel . viewModel Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgif ItemList Ġ= ĠRepository . search ( keyword , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading Progress Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . iv Retry . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Detail Insert Ad Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHandler Helper . main Handler . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . loading _ ad _ tips ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Detail Insert Ad ?. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Scroll Listener . set Load Data Status ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . gif RecyclerView . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . iv Retry . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Load More ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . gif DataList . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm ViewModel . gif DataList . addAll ( gif ItemList ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= Ġif Ġ( Store . getVersion () Ġ== ĠVersion . INTER N ATION AL ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m ViewModel . gif DataList . size Ġ< Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( offset . toInt () Ġ+ Ġcount Ġ+ Ġ 1 ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gif ItemList . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgif ItemList . last (). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠSp Utils . putString ( Global . SP _ SEARCH _ OFFSET , Ġoffset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Detail Insert () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( gif ItemList . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView Scroll Listener . set Load Data Status ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Load More ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . gif RecyclerView . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Binding . iv Retry . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Detail Insert () Ġ{ ĊĠĠĠĠĠĠĠ ĠAd Chain Helper . load Ad ( Ad Constants . AD _ NAME _ DETAIL _ INSERT , Ġnull , Ġobject Ġ: ĠSimple Ad Chain Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Loaded ( ad : ĠI Ad ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Detail Insert Ad Ġ= Ġad ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading Progress Dialog ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! m Progress Dialog . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress Dialog . setMessage ( msg ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress Dialog . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading Progress Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Progress Dialog . is Showing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Progress Dialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) ĊĠĠĠ Ġfun Ġon Like Update ( like Event : ĠLike Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! user Visible Hint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠGlobal . getIndex ( like Event . id , Ġm ViewModel . gif DataList ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify Item Changed ( position , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) ĊĠĠĠ Ġfun Ġon Download Finish Event ( event : ĠDownload Finish Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! user Visible Hint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠGlobal . getIndex ( event . id , Ġm ViewModel . gif DataList ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify Item Changed ( position , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe ( thread Mode Ġ= ĠThread Mode . MAIN ) ĊĠĠĠ Ġfun Ġon Remove Like Li et Event ( event : ĠRemove Like List Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! user Visible Hint ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent . gif IdList . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠGlobal . getIndex ( it , Ġm ViewModel . gif DataList ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter ?. notify Item Changed ( position , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠEX TRA _ KEY _ WORD Ġ= Ġ" EXTRA _ KEY _ WORD " ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( keyword : ĠString ): ĠSearch Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= ĠSearch Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbundle . putString ( EXTRA _ KEY _ WORD , Ġkeyword ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . arguments Ġ= Ġbundle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }