package Ġcom . and zh v . github users . ui Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . ad g vc xz .* Ċ import Ġcom . ad g vc xz . recyclerview model .* Ċ import Ġcom . and zh v . github users . R Ċ import Ġcom . and zh v . github users . bean . Simple User Bean Ċ import Ġcom . and zh v . github users . databinding . Activity Main Binding Ċ import Ġcom . and zh v . github users . items . user . Item User Model Ċ import Ġcom . and zh v . github users . items . user . Item User View Ċ import Ġcom . and zh v . github users . items . user . Item User ViewModel Ċ import Ġcom . and zh v . github users . request . base . Base List Request Ċ import Ġcom . and zh v . github users . request . search . Search UserList Request Ċ import Ġcom . and zh v . github users . ui . base . Base Request List Activity Ċ import Ġcom . and zh v . github users . utils . Set Keyboard Show Ċ import Ġcom . and zh v . github users . utils . Set Keywords Ċ import Ġcom . and zh v . github users . utils . ex . just Ċ import Ġcom . and zh v . github users . utils . ex . observe Keyboard Change Ċ import Ġcom . jak ew h art on . r xb ind ing 4 . recyclerview . scroll State Changes Ċ import Ġcom . jak ew h art on . r xb ind ing 4 . view . click s Ċ import Ġcom . jak ew h art on . r xb ind ing 4 . widget . text Changes Ċ import Ġio . reactivex . rx java 3 . core . Observable Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġz ha ow ei Ġon Ġ 2 0 2 1 / 9 / 1 0 . Ċ Ġ*/ Ċ Ċ class ĠMainActivity Ġ: ĠBase Request List Activity < Simple User Bean >() Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġre cyclerView : ĠRecyclerView Ġby Ġlazy Ġ{ Ġbinding . re cyclerView Ġ} ĊĠĠĠ Ġprivate Ġval Ġbinding : ĠActivity Main Binding Ġby Ġgenerate View Binding Ġ{ ĠActivity Main Binding . bind ( it ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġmain ViewModel : ĠMain ViewModel Ġ= ĠMain ViewModel () ĊĠĠĠ Ġoverride Ġval Ġlayout Id : ĠInt Ġ= ĠR . layout . activity _ main ĊĠĠĠ Ġprivate Ġvar Ġrequest Ġ= ĠSearch UserList Request ("") ĊĊĠĠĠ Ġoverride Ġfun Ġinit View ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init View ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġrefresh Layout Ġ= Ġbinding . refresh Layout ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Binding () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init Binding () ĊĠĠĠĠĠĠĠ Ġmain ViewModel . to Bind ( dis pos ables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ({ Ġkeyboard Showing Ġ}, Ġ{ Ġif Ġ(! this ) Ġbinding . search EditText . clear Focus () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ({ Ġkeywords Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . keyword Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Cancel Ġthe Ġapi Ġrequest Ġbeing Ġprocessed Ġand Ġsend Ġa Ġnew Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . action . onNext ( Force Refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ({ Ġkeywords . isEmpty () Ġ}, Ġ{ Ġbinding . close . isVisible Ġ= Ġ! this Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobserve Keyboard Change (). distinct Until Changed (). map (:: Set Keyboard Show ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. bind To ( main ViewModel . action ). addTo ( dis pos ables ) ĊĊĠĠĠĠĠĠĠ Ġmain ViewModel . to Event Bind ( dis pos ables ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġtext Changes (). filter Ġ{ Ġit . toString (). trim (). isEmpty () Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search EditText , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠSet Keywords ("") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Changes (). map Ġ{ Ġit . toString (). trim () Ġ}. de bounce ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . search EditText , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĠSet Keywords ( this ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ({ Ġclicks () Ġ}, Ġbinding . close , Ġ{ Ġbinding . search EditText . setText ("") Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Action ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġscroll State Changes (). filter Ġ{ Ġmain ViewModel . current Model (). keyboard Showing Ġ&& Ġit Ġ== ĠRecyclerView . SCROLL _ STATE _ DR AG GING Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġhide Keyboard () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Binding ( adapter : ĠRe cycler Adapter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . init Binding ( adapter ) ĊĠĠĠĠĠĠĠ Ġadapter . item Click s (). map Ġ{ Ġitems [ it ]. current Model () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. of Type ( Item User Model :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĠWeb Activity . start ( this , Ġit . url ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. addTo ( dis pos ables ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Item View ( viewModel : ĠRe cycler Item ViewModel < out ĠI Model >): ĠI View < *, Ġ*> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠItem User View () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate Request (): ĠBase List Request < Simple User Bean > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrequest ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtransform ( ĊĠĠĠĠĠĠĠ Ġposition : ĠInt , ĊĠĠĠĠĠĠĠ Ġmodel : ĠSimple User Bean ĊĠĠĠ Ġ): ĠObservable < Recycler Item ViewModel < out ĠI Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠItem User ViewModel ( model ). just () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġhide Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġget System Service ( INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( window . decor View . window Token , Ġ 0 ) ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ