package Ġde . mann oder ma us . r xb on j our . samples . android Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . support . v 7 . widget . Linear LayoutManager Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . Spinner Ċ import Ġandroid . widget . Toast Ċ import Ġbutter knife . BindView Ċ import Ġbutter knife . B utter Kn ife Ċ import Ġbutter knife . OnClick Ċ import Ġbutter knife . Un binder Ċ import Ġde . mann oder ma us . r xb on j our . Bon j our Broadcast Config Ċ import Ġde . mann oder ma us . r xb on j our . Bon j our Event Ċ import Ġde . mann oder ma us . r xb on j our . R xB on j our Ċ import Ġde . mann oder ma us . r xb on j our . is Bon j our Type Ċ import Ġde . mann oder ma us . r xb on j our . platforms . android . Android Platform Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Dis pos ables Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ Ċ private Ġval ĠLOG _ TAG Ġ= Ġ" R xB on j our ĠSample " Ċ Ċ /** Ċ Ġ* Ġ@ author Ġmar cel Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠ Ġ@ BindView ( R . id . et _ type ) ĊĠ Ġlateinit Ġvar Ġet Input : ĠEditText ĊĠ Ġ@ BindView ( R . id . progress _ bar ) ĊĠ Ġlateinit Ġvar ĠprogressBar : ĠProgress Bar ĊĠ Ġ@ BindView ( R . id . spinner ) ĊĠ Ġlateinit Ġvar Ġsp Drivers : ĠSp inner ĊĠ Ġ@ BindView ( R . id . rv ) ĊĠ Ġlateinit Ġvar Ġrv Items : ĠCustom RecyclerView ĊĊĠ Ġlateinit Ġvar Ġspinner Adapter : ĠDriver Impl Adapter ĊĠ Ġprivate Ġval Ġlist Adapter Ġ= ĠService Recycler Adapter () ĊĊĠ Ġlateinit Ġvar Ġun binder : ĠU nb inder ĊĠ Ġprivate Ġvar Ġn sd Disposable Ġ= ĠDis pos ables . empty () ĊĊĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠ Ġun binder Ġ= ĠB utter Kn ife . bind ( this ) ĊĊĠĠĠ Ġ// ĠSetup ĠRecyclerView ĊĠĠĠ Ġrv Items . layout Manager Ġ= ĠLinearLayoutManager ( this , ĠLinearLayoutManager . VERTICAL , Ġfalse ) ĊĠĠĠ Ġrv Items . set Empty View ( findViewById ( R . id . tv _ empty )) ĊĠĠĠ Ġrv Items . adapter Ġ= Ġlist Adapter ĊĊĠĠĠ Ġ// ĠSetup ĠSp inner ĊĠĠĠ Ġspinner Adapter Ġ= ĠDriver Impl Adapter ( this ) ĊĠĠĠ Ġsp Drivers . on ItemSelected Listener Ġ= Ġobject Ġ: ĠAdapter View . On ItemSelected Listener Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġon ItemSelected ( adapter View : ĠAdapter View <* >, Ġview : ĠView , Ġi : ĠInt , Ġl : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġfire Ġimmediately Ġwhen Ġthe Ġfirst Ġitem Ġis Ġset ĊĠĠĠĠĠĠĠ Ġrestart Discovery () ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġoverride Ġfun Ġon Nothing Selected ( adapter View : ĠAdapter View <* >) Ġ{} ĊĠĠĠ Ġ} ĊĠĠĠ Ġsp Drivers . adapter Ġ= Ġspinner Adapter ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠ Ġsuper . on Stop () ĊĊĠĠĠ Ġ// ĠUn subscribe Ġfrom Ġthe Ġnetwork Ġservice Ġdiscovery ĠObservable ĊĠĠĠ Ġunsubscribe () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġun binder . unbind () ĊĠ Ġ} ĊĊĠ Ġ@ OnClick ( R . id . button _ apply ) ĊĠ Ġinternal Ġfun Ġon Apply Clicked () Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġet Input . text ĊĠĠĠ Ġif Ġ( input Ġ!= Ġnull Ġ&& Ġinput . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġ// ĠFor Ġnon - empty Ġinput , Ġrestart Ġthe Ġdiscovery Ġwith Ġthe Ġnew Ġinput ĊĠĠĠĠĠ Ġrestart Discovery () ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/* ĠBegin Ġprivate Ġ*/ ĊĊĠ Ġprivate Ġfun Ġunsubscribe () Ġ{ ĊĠĠĠ Ġn sd Disposable . dispose () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġrestart Discovery () Ġ{ ĊĠĠĠ Ġ// ĠCheck Ġthe Ġcurrent Ġinput , Ġonly Ġproceed Ġif Ġvalid ĊĠĠĠ Ġval Ġtype Ġ= Ġet Input . text . toString () ĊĠĠĠ Ġif Ġ(! type . is Bon j our Type ()) Ġ{ ĊĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . toast _ invalid type , Ġtype ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠ Ġreturn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCancel Ġany Ġprevious Ġsubscription ĊĠĠĠ Ġunsubscribe () ĊĊĠĠĠ Ġ// ĠClear Ġthe Ġadapter 's Ġitems , Ġthen Ġstart Ġa Ġnew Ġdiscovery ĊĠĠĠ Ġlist Adapter . clear Items () ĊĊĠĠĠ Ġ// ĠConstruct Ġa Ġnew ĠR xB on j our Ġinstance Ġwith Ġthe Ġcurrently Ġselected ĠDriver . ĊĠĠĠ Ġ// ĠUsually , Ġyou 'd Ġsimply Ġadd Ġthe ĠDriver Ġinside Ġthe ĠBuilder ĊĠĠĠ Ġ// Ġand Ġprovide Ġthe Ġentry Ġpoint Ġto ĠR xB on j our Ġglobally , ĊĠĠĠ Ġ// Ġe . g . Ġthrough ĠDependency ĠInjection , Ġor Ġas Ġan Ġinstance Ġfield . ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠR xB on j our Ġr xB on j our Ġ= Ġnew ĠR xB on j our . Builder () ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġ. driver ( Jm DNS Driver . create ()) ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġ. platform ( Android Platform . create ( this )) ĊĠĠĠ Ġ// ĠĠĠĠĠ Ġ. create (); ĊĠĠĠ Ġ// ĊĠĠĠ Ġ// ĠSince Ġin Ġthis Ġsample ĠDriver Ġimplementations Ġcan Ġbe Ġswitched , ĊĠĠĠ Ġ// Ġwe 're Ġusing Ġthe ĠSp inner Adapter Ġfor Ġthis . ĊĠĠĠ Ġval Ġdriver Library Ġ= Ġspinner Adapter . getItem ( sp Drivers . selected Item Position ) ĊĊĠĠĠ Ġval Ġr xB on j our Ġ= ĠR xB on j our . Builder () ĊĠĠĠĠĠĠĠ Ġ. driver ( driver Library . factory . invoke ( this )) ĊĠĠĠĠĠĠĠ Ġ. platform ( Android Platform . create ( this )) ĊĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠ Ġval Ġbroadcast Config Ġ= ĠBon j our Broadcast Config ( ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġ"_ http ._ tcp ", ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" My ĠBon j our ĠService ", ĊĠĠĠĠĠĠĠ Ġaddress Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġport Ġ= Ġ 1 3 3 3 7 , ĊĠĠĠĠĠĠĠ Ġtxt Records Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" my . record " Ġto Ġ" my Ġvalue ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" other . record " Ġto Ġ" 0 8 1 5 ")) ĊĠĠĠ Ġval Ġdis posable Ġ= Ġr xB on j our . new Broadcast ( broadcast Config ) ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. subscribe () ĊĊĠĠĠ Ġn sd Disposable Ġ= Ġr xB on j our . new Discovery ( type ) ĊĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĠprogressBar . visibility Ġ= ĠView . VISIBLE Ġ} ĊĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE Ġ} ĊĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠprogressBar . visibility Ġ= ĠView . IN VISIBLE Ġ} ĊĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDep ending Ġon Ġthe Ġtype Ġof Ġevent Ġand Ġthe Ġavailability Ġof Ġthe Ġitem , Ġadjust Ġthe Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġevent . service ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( LOG _ TAG , Ġ" Event : Ġ" Ġ+ Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBon j our Event . Added Ġ-> Ġif Ġ(! list Adapter . contains Item ( item )) Ġlist Adapter . addItem ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBon j our Event . Removed Ġ-> Ġif Ġ( list Adapter . contains Item ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem )) Ġlist Adapter . removeItem ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġerror . message , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠ Ġ} Ċ } Ċ