package Ġorg . s ugar andro se . app . ui . display items . recyclerview Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . databinding . Bind able Ċ import Ġio . reactivex . dis pos ables . Composite Disposable Ċ import Ġjavax . inject . Inject Ċ import Ġorg . s ugar andro se . app . BR Ċ import Ġorg . s ugar andro se . app . data . local . F avor ited Repo Ċ import Ġorg . s ugar andro se . app . data . model . Local R ose Ċ import Ġorg . s ugar andro se . app . databinding . Item R ose Binding Ċ import Ġorg . s ugar andro se . app . injection . qual ifier . Activity Disposable Ċ import Ġorg . s ugar andro se . app . injection . scopes . Per ViewHolder Ċ import Ġorg . s ugar andro se . app . ui . base . Base Activity ViewHolder Ċ import Ġorg . s ugar andro se . app . ui . base . view . Mv vm View Ċ import Ġorg . s ugar andro se . app . ui . base . view model . Base ViewModel Ċ import Ġorg . s ugar andro se . app . ui . base . view model . Mv vm ViewModel Ċ import Ġorg . s ugar andro se . app . util . Notify PropertyChanged Delegate Ċ import Ġorg . s ugar andro se . app . util . manager . Event Log Manager Ċ import Ġorg . s ugar andro se . app . util . manager . Share Manager Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠFl orian ĠSch uster Ċ Ġ* Ġfl orian . sch uster @ ta ilo red - apps . com Ċ Ġ*/ Ċ Ċ interface ĠR ose Item Mv vm Ġ{ ĊĠĠĠ Ġinterface ĠView Ġ: ĠM v vm View ĊĊĠĠĠ Ġinterface ĠViewModel Ġ: ĠM v vm ViewModel < View > Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġupdate ( rose : ĠLocal R ose ) ĊĠĠĠĠĠĠĠ Ġfun Ġon Favorite Click () ĊĠĠĠĠĠĠĠ Ġfun Ġon Share Click () ĊĊĠĠĠĠĠĠĠ Ġvar Ġro se : ĠLocal R ose ĊĠĠĠĠĠĠĠ Ġ@ get : Bind able ĊĠĠĠĠĠĠĠ Ġvar Ġfavor ited : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ@ get : Bind able ĊĠĠĠĠĠĠĠ Ġvar Ġloading : ĠBoolean ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠR ose Item ViewHolder ( item View : ĠView ) Ġ: ĠBase Activity ViewHolder < Item R ose Binding , ĠR ose Item Mv vm . ViewModel >( item View ), ĠR ose Item Mv vm . View Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewHolder Component . inject ( this ) ĊĠĠĠĠĠĠĠ Ġbind ContentView ( item View ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Per ViewHolder Ċ class ĠR ose Item ViewModel Ġ@ Inject Ċ constructor ( ĊĠĠĠ Ġ@ Activity Disposable Ġprivate Ġval Ġdis posable : ĠComposite Disposable , ĊĠĠĠ Ġprivate Ġval Ġfavor ited Repo : ĠF avor ited Repo , ĊĠĠĠ Ġprivate Ġval Ġshare Manager : ĠShare Manager , ĊĠĠĠ Ġprivate Ġval Ġevent Log Manager : ĠEvent Log Manager Ċ ) Ġ: ĠBase ViewModel < R ose Item Mv vm . View >(), ĠR ose Item Mv vm . ViewModel Ġ{ ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġro se : ĠLocal R ose ĊĠĠĠ Ġoverride Ġvar Ġfavor ited : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġvar Ġloading Ġby ĠNotify PropertyChanged Delegate ( false , ĠBR . loading ) ĊĊĠĠĠ Ġoverride Ġfun Ġupdate ( rose : ĠLocal R ose ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . rose Ġ= Ġro se ĊĠĠĠĠĠĠĠ Ġthis . f avor ited Ġ= Ġfavor ited Repo . is Cont ained ( this . rose ) ĊĠĠĠĠĠĠĠ Ġnotify Change () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Favorite Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( f avor ited ) Ġfavor ited Repo . delete Item ( rose ) ĊĠĠĠĠĠĠĠ Ġelse Ġfavor ited Repo . addItem ( rose ) ĊĠĠĠĠĠĠĠ Ġfavor ited Ġ= Ġ! f avor ited ĊĠĠĠĠĠĠĠ Ġnotify PropertyChanged ( BR . f avor ited ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( f avor ited ) Ġevent Log Manager . log Favorite ( rose ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Share Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġshare Manager . share R ose ( rose ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġloading Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do OnError ( Tim ber :: e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Event Ġ{ Ġloading Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe (). let Ġ{ Ġdis posable . add ( it ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ