package Ġcom . example . sample _ github _ rx . ui . repo Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . example . sample _ github _ rx . utils . Support Optional Ċ import Ġcom . example . sample _ github _ rx . api . Github Api Ċ import Ġcom . example . sample _ github _ rx . api . model . Github Repo Ċ import Ġcom . example . sample _ github _ rx . utils . optional Of Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . dis pos ables . Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ Ċ class ĠRepository ViewModel ( val Ġapi : ĠGithub Api ): ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval Ġrepository : ĠBehavior Subject < Support Optional < Github Repo >> Ġ= ĠBehavior Subject . create () ĊĠĠĠ Ġval Ġmessage : ĠBehavior Subject < String > Ġ= ĠBehavior Subject . create () ĊĠĠĠ Ġval Ġis Content Visible : ĠBehavior Subject < Boolean > Ġ= ĠBehavior Subject . create Default ( false ) ĊĠĠĠ Ġval ĠisLoading : ĠBehavior Subject < Boolean > Ġ= ĠBehavior Subject . create () ĊĊĠĠĠ Ġfun Ġrequest Repository Info ( login : ĠString , Ġrepo Name : ĠString ): ĠDis posable Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepo Observable Ġ= Ġif (! repository . hasValue ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapi . getRepository ( login , Ġrepo Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObservable . empty () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġrepo Observable ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĠisLoading . onNext ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Terminate Ġ{ ĠisLoading . onNext ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġrepo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . onNext ( optional Of ( repo )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Content Visible . onNext ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . onNext ( it . message Ġ?: Ġ" Unexpected Ġerror ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }