package Ġbr . com . f io alpha . her om ar vel . presentation . favorite Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġbr . com . f io alpha . her om ar vel . R Ċ import Ġbr . com . f io alpha . her om ar vel . core . utils . goTo Details Character Ċ import Ġbr . com . f io alpha . her om ar vel . core . utils . hide Ċ import Ġbr . com . f io alpha . her om ar vel . core . utils . show Ċ import Ġbr . com . f io alpha . her om ar vel . core . views . Empty View Custom Ċ import Ġbr . com . f io alpha . her om ar vel . core . views . Error View Custom Ċ import Ġbr . com . f io alpha . her om ar vel . presentation . favorite . model . Favorite Intent Ċ import Ġbr . com . f io alpha . her om ar vel . presentation . favorite . model . Favorite State Ċ import Ġbr . com . f io alpha . her om ar vel . presentation . list characters . presentation . Characters Adapter Ċ import Ġbr . com . f io alpha . her om ar vel . presentation . list characters . presentation . model . Character ViewData Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġorg . k oin . android . ext . android . get Ċ import Ġorg . k oin . android . ext . android . inject Ċ Ċ class ĠF avorite Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġadapter Character : ĠChar acters Adapter Ġ= ĠChar acters Adapter ( ĊĠĠĠĠĠĠĠ Ġget (), ĊĠĠĠĠĠĠĠ Ġ:: handle Favorite Click , ĊĠĠĠĠĠĠĠ Ġ:: handle Item Click ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġdis posable Ġ= ĠComposite Disposable () ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠF avorite ViewModel Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cycler : ĠRecyclerView ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloader : ĠProgress Bar ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġerror View : ĠError View Custom ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġempty View : ĠEmpty View Custom ĊĊĠĠĠ Ġprivate Ġval Ġdelete Intent Ġ= ĠPublish Subject . create < Favorite Intent . Delete Intent >() ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinflater . inflate ( R . layout . list _ characters _ favorite , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġsetup View ( view ) ĊĠĠĠĠĠĠĠ Ġsetup Recycler () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup View ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( view ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cycler Ġ= ĠfindViewById ( R . id . list _ recycler ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloader Ġ= ĠfindViewById ( R . id . list _ progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror View Ġ= ĠfindViewById ( R . id . list _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty View Ġ= ĠfindViewById ( R . id . list _ empty ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġdis posable . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . states () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Next (:: render ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdis posable . addAll ( viewModel . process Intent s ( int ents ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Recycler () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cycler . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . adapter Ġ= Ġadapter Character ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠGrid LayoutManager ( context , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender ( status : ĠF avorite State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF avorite State . Loading Ġ-> Ġhandler Loading Status View () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF avorite State . Empty View Ġ-> Ġhandle Empty Status View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite State . Success Ġ-> Ġhandle Data Status View ( status . data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite State . Fail Ġ-> Ġhandle Error Status View ( status . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠF avorite State . Remove Ġ-> Ġadapter Character . remove ( status . position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Favorite Click ( character ViewData : ĠCharacter ViewData , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelete Intent . onNext ( Favorite Intent . Delete Intent ( character ViewData , Ġposition )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġdis posable . clear () ĊĠĠĠĠĠĠĠ Ġdis posable . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġintent s (): ĠObservable < Favorite Intent > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . merge ( initial Intent (), Ġdelete Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitial Intent (): ĠObservable < Favorite Intent > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠObservable . just ( Favorite Intent . Loader Intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Item Click ( character ViewData : ĠCharacter ViewData ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgo To Details Character ( character ViewData ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandler Loading Status View () Ġ{ ĊĠĠĠĠĠĠĠ Ġloader . show () ĊĠĠĠĠĠĠĠ Ġre cycler . hide () ĊĠĠĠĠĠĠĠ Ġerror View . hide () ĊĠĠĠĠĠĠĠ Ġempty View . hide () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Empty Status View () Ġ{ ĊĠĠĠĠĠĠĠ Ġloader . hide () ĊĠĠĠĠĠĠĠ Ġre cycler . hide () ĊĠĠĠĠĠĠĠ Ġerror View . hide () ĊĠĠĠĠĠĠĠ Ġempty View . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Data Status View ( data : ĠList < Character ViewData >) Ġ{ ĊĠĠĠĠĠĠĠ Ġloader . hide () ĊĠĠĠĠĠĠĠ Ġre cycler . show () ĊĠĠĠĠĠĠĠ Ġerror View . hide () ĊĠĠĠĠĠĠĠ Ġempty View . hide () ĊĠĠĠĠĠĠĠ Ġadapter Character . add ( data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhandle Error Status View ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġloader . hide () ĊĠĠĠĠĠĠĠ Ġre cycler . hide () ĊĠĠĠĠĠĠĠ Ġerror View . show () ĊĠĠĠĠĠĠĠ Ġempty View . hide () ĊĠĠĠĠĠĠĠ Ġerror View . setMessage ( message ) ĊĠĠĠ Ġ} Ċ } Ċ