/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ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 Ġcom . example . android . observ ability . ui Ċ Ċ import Ġandroid . arch . lifecycle . Lifecycle Activity Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġcom . example . android . observ ability . Injection Ċ import Ġcom . example . android . observ ability . R Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ user .* Ċ Ċ /** Ċ Ġ* ĠMain Ġscreen Ġof Ġthe Ġapp . ĠDisplays Ġa Ġuser Ġname Ġand Ġgives Ġthe Ġoption Ġto Ġupdate Ġthe Ġuser Ġname . Ċ Ġ*/ Ċ class ĠUser Activity Ġ: ĠLifecycle Activity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel Factory : ĠViewModel Factory ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠUser ViewModel ĊĊĠĠĠ Ġprivate Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ user ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Factory Ġ= ĠInjection . provide ViewModel Factory ( this ) ĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠviewModel Factory ). get ( User ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġupdate _ user _ button . setOnClickListener Ġ{ Ġupdate UserName () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġ// ĠSubscribe Ġto Ġthe Ġemission s Ġof Ġthe Ġuser Ġname Ġfrom Ġthe Ġview Ġmodel . ĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġuser Ġname Ġtext Ġview , Ġat Ġevery Ġon Next Ġemission . ĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġcase Ġof Ġerror , Ġlog Ġthe Ġexception . ĊĠĠĠĠĠĠĠ Ġdis posable . add ( viewModel . userName () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġthis . user _ name . text Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĠLog . e ( TAG , Ġ" Unable Ġto Ġget Ġusername ", Ġerror ) Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĊĠĠĠĠĠĠĠ Ġ// Ġclear Ġall Ġthe Ġsubscription ĊĠĠĠĠĠĠĠ Ġdis posable . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate UserName () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠuserName Ġ= Ġuser _ name _ input . text . toString () ĊĠĠĠĠĠĠĠ Ġ// ĠDisable Ġthe Ġupdate Ġbutton Ġuntil Ġthe Ġuser Ġname Ġupdate Ġhas Ġbeen Ġdone ĊĠĠĠĠĠĠĠ Ġupdate _ user _ button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠSubscribe Ġto Ġupdating Ġthe Ġuser Ġname . ĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġback Ġthe Ġbutton Ġonce Ġthe Ġuser Ġname Ġhas Ġbeen Ġupdated ĊĠĠĠĠĠĠĠ Ġdis posable . add ( viewModel . update UserName ( userName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġupdate _ user _ button . isEnabled Ġ= Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĠLog . e ( TAG , Ġ" Unable Ġto Ġupdate Ġusername ", Ġerror ) Ġ})) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠUser Activity :: class . java . simple Name ĊĠĠĠ Ġ} Ċ } Ċ