package Ġd roid ka igi . github . io . challenge 2 0 1 9 . story . detail Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . webkit . Web Resource Error Ċ import Ġandroid . webkit . Web Resource Request Ċ import Ġandroid . webkit . WebView Ċ import Ġandroid . webkit . WebView Client Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Lifecycle . Event . ON _ DESTROY Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Provider . Factory Ċ import Ġandroidx . recyclerview . widget . Divider Item Decoration Ċ import Ġcom . w ada 8 1 1 . l ifec yc led is posable . dispose On Lifecycle Ċ import Ġd roid ka igi . github . io . challenge 2 0 1 9 . binding . bind Layout Ċ import Ġd roid ka igi . github . io . challenge 2 0 1 9 . domain . Story Ċ import Ġd roid ka igi . github . io . challenge 2 0 1 9 . service . application Service Ċ import Ġd roid ka igi . github . io . challenge 2 0 1 9 . story . detail . databinding . Story Detail Activity Binding Ċ import Ġio . reactivex . Single Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx kotlin . Sing les Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠStory Detail Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġbinding Ġby Ġlazy Ġ{ Ġbind Layout < Story Detail Activity Binding >( R . layout . story _ detail _ activity ) Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstory : ĠStory ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠViewModel Provider ( this , Ġobject Ġ: ĠFactory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠStory Detail Activity ViewModel ( application Service (). story Service , Ġstory ) Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}). get ( Story Detail Activity ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcomment Adapter : ĠComment Adapter ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġstory Ġ= Ġapplication Service (). story Service . current Story Ġ?: Ġreturn Ġfinish () ĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġbinding . comment RecyclerView . is Nested Scrolling Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġbinding . comment RecyclerView . addItem Decoration ( Divider Item Decoration ( this , ĠDiv ider Item Decoration . VERTICAL )) ĊĠĠĠĠĠĠĠ Ġcomment Adapter Ġ= ĠComment Adapter ( emptyList ()) ĊĠĠĠĠĠĠĠ Ġbinding . comment RecyclerView . adapter Ġ= Ġcomment Adapter ĊĊĠĠĠĠĠĠĠ Ġload Url And Comments () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Url And Comments () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġload Url Single Ġ= ĠSingle . create < Boolean > Ġ{ Ġemitter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . web View . web View Client Ġ= Ġobject Ġ: ĠWebView Client () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Finished ( view : ĠWebView ?, Ġurl : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . on Success ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Received Error ( view : ĠWebView ?, Ġrequest : ĠWeb Resource Request ?, Ġerror : ĠWeb Resource Error ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . onError ( RuntimeException (" Load Ġerror ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSing les . zip ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Url Single , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . get Comments () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ ĠviewModel . isLoading . set ( true ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Success Ġ{ ĠviewModel . isLoading . set ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError Ġ{ ĠviewModel . isLoading . set ( false ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġ_, Ġcomments ) Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Adapter . comments Ġ= Ġcomments ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag (" w ada 8 1 1 "). w ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Service (). show Error ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. dispose On Lifecycle ( this , ĠON _ DESTROY ) ĊĠĠĠĠĠĠĠ Ġbinding . web View . load Url ( story . url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . activity _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item ?. itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . refresh Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Url And Comments () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . exit Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ