/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 , Ġ{{ App }} Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 , Ġ"{{ App }} ĠInc ". Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ċ Ġ* Ġsoftware Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġco . app . search Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . Search View Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġco . app . R Ċ import Ġco . app . common . search . Search Ċ import Ġco . app . report . Report Ċ import Ġco . app . report . Report Meta Ċ import Ġco . app . report . Report View Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġpromise . commons . Android Promise Ċ import Ġpromise . commons . data . log . Log Util Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Report Meta Ċ class ĠSearch Form ( ĊĠĠĠ Ġprivate Ġval Ġlifecycle Owner : ĠLifecycle Owner , ĊĠĠĠ Ġprivate Ġval Ġandroid Promise : ĠAndroid Promise , ĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable : ĠComposite Disposable , ĊĠĠĠ Ġprivate Ġval Ġsearch Fab : ĠFloating ActionButton , ĊĠĠĠ Ġprivate Ġval Ġlistener : ĠListener Ċ ) Ġ: ĠReport Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġparent View : ĠView ĊĊĠĠĠ Ġoverride Ġfun Ġbind ( report View : ĠReport View , Ġview : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog Util . d ( Search Activity . TAG , Ġ" search Ġform Ġbind ") ĊĠĠĠĠĠĠĠ Ġparent View Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġval Ġsearch View : ĠSearch View Ġ= Ġview . findViewById ( R . id . search View ) ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRx Search Observable . from View ( search View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. de bounce ( 5 0 0 , ĠTimeUnit . MILLISECONDS ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct Until Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . from ( android Promise . executor ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlistener . on Search ( Search (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġsearch Fab . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlayout (): ĠInt Ġ= ĠR . layout . search _ form ĊĊĠĠĠ Ġinterface ĠListener Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġon Search ( search : ĠSearch ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ object ĠRx Search Observable Ġ{ ĊĊĠĠĠ Ġfun Ġfrom View ( search View : ĠSearch View ): ĠObservable < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsubject Ġ= ĠPublish Subject . create < String >() ĊĠĠĠĠĠĠĠ Ġsearch View . setOn Query Text Listener ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch View . On Query Text Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Submit ( s : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onComplete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Query Text Change ( text : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject . onNext ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġsubject ĊĠĠĠ Ġ} Ċ }