package Ġcom . cup sof code . feed Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . cup sof code . feed . d agger . Feed Component Ċ import Ġcom . cup sof code . feed . e po xy . Feed E po xy Adapter Ċ import Ġcom . cup sof code . feed . m vi . Feed Intent Ċ import Ġcom . cup sof code . navigator . Navigator Component Ċ import Ġcom . cup sof code . resp osit ory _ restaurant . Restaurant Component Ċ import Ġcom . cup sof code . ui _ commons . wrapper . Resources Component Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġkotlinx . android . synt hetic . main . feed _ fragment . view .* Ċ Ċ class ĠFeed Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠFeed Fragment () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcomponent Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrestaurant Component Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. application Context ?. getSystem Service ( Restaurant Component :: class . java . name ) ĊĠĠĠĠĠĠĠ Ġval Ġresources Component Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. application Context ?. getSystem Service ( Resources Component :: class . java . name ) ĊĠĠĠĠĠĠĠ Ġval Ġnavigator Component Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. getSystem Service ( Navigator Component :: class . java . name ) ĊĠĠĠĠĠĠĠ ĠFeed Component . builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. resource Component ( resources Component !! Ġas ĠResources Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. restaurant Component ( restaurant Component !! Ġas ĠRest aurant Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigation Component ( navigator Component !! Ġas ĠNavigator Component ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġintent s Subject Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠPublish Subject . create < Feed Intent >() ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġcomponent . viewModel () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfeed Adapter Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠFeed E po xy Adapter ( int ents Subject , Ġcontext !! ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcomposite Disposable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . feed _ fragment , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġview . recyclerview . layout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠ Ġview . recyclerview . adapter Ġ= Ġfeed Adapter . adapter ĊĊĠĠĠĠĠĠĠ Ġcomposite Disposable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . bind ( int ents Subject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread (), Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Loading ( view , Ġit . isLoading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġswitch Error ( it . error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfeed Adapter . setData ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Obs Ġshould Ġnot Ġerror Ġout , Ġbecause Ġerrors Ġbeing Ġpassed Ġas Ġintent Ġto Ġview state . ĠIf Ġcompiler Ġcomes Ġhere , Ġit Ġmeans Ġsomewhere Ġin Ġvm Ġstream Ġis Ġnot Ġbeing Ġhandled Ġproperly : Ġcheck Ġif Ġyou 're Ġconverting Ġto ĠObservable Ġwhen Ġyou Ġget Ġthe Ġerror Ġfrom Ġsingle Ġor Ġcomplet able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Loading ( view : ĠView , ĠisLoading : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isLoading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . loader . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . loader . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġswitch Error ( error : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( context ?. getString ( R . string . error _ title , Ġerror . message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . error _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setOn Dismiss Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent s Subject . onNext ( Feed Intent . Error Dis missed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . ok ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent s Subject . onNext ( Feed Intent . Error Dis missed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġcomposite Disposable . clear () ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠ Ġ} Ċ }