package Ġfr . xg ou chet . package explorer . oss Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Fragment Ċ import Ġandroid . content . Context Ċ import Ġfr . xg ou chet . package explorer . R Ċ import Ġfr . xg ou chet . package explorer . core . utils . Context Holder Ċ import Ġfr . xg ou chet . package explorer . details . adapter . App Info Header Ċ import Ġfr . xg ou chet . package explorer . details . adapter . App Info Type Ċ import Ġfr . xg ou chet . package explorer . details . adapter . App Info ViewModel Ċ import Ġfr . xg ou chet . package explorer . details . adapter . App Info With Subtitle And Action Ċ import Ġfr . xg ou chet . package explorer . ui . mvp . Dis player Ċ import Ġfr . xg ou chet . package explorer . ui . mvp . list . Base List Presenter Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . functions . Bi Function Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ Ċ class ĠO SS Presenter ( context : ĠContext , Ġval Ġurl Navigator : ĠUrl Navigator ) Ġ: ĊĠĠĠĠĠĠĠ ĠBase List Presenter < App Info ViewModel , ĠO SS Fragment >( null ), ĊĠĠĠĠĠĠĠ ĠContext Holder Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcontext : ĠContext Ġ= Ġcontext . application Context ĊĊĠĠĠ Ġprivate Ġvar Ġmemoized OSS List : ĠList < App Info ViewModel >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Mask : ĠInt Ġ= ĠApp Info Type . INFO _ TYPE _ MISC ĊĠĠĠ Ġprivate Ġvar Ġdata Subject : ĠBehavior Subject < List < App Info ViewModel >> Ġ= ĠBehavior Subject . create () ĊĠĠĠ Ġprivate Ġvar Ġcollapse Mask Subject : ĠBehavior Subject < Int > Ġ= ĠBehavior Subject . create Default ( current Mask ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter edList Ġ= ĠObservable . combine Latest ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Subject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcollapse Mask Subject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBi Function < List < App Info ViewModel >, ĠInt , ĠList < App Info ViewModel >> Ġ{ Ġlist , Ġfilter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Bi Function Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġ( it Ġis ĠApp Info Header ) Ġ|| Ġ( it . mask Ġand Ġfilter ) Ġ== Ġit . mask Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠApp Info Header ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġit . copy ( expanded Icon Ġ= Ġif Ġ(( it . mask Ġand Ġfilter ) Ġ== Ġit . mask ) ĠR . drawable . ic _ expand _ less Ġelse ĠR . drawable . ic _ expand _ more ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġfilter edList ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . computation ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġon Items Loaded ( it ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdisplay er ?. setError ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload ( force : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdisplay er ?. let Ġ{ Ġd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġd . set Loading ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable ?. dispose () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmemoized OSS List ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Subject . onNext ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable Ġ= ĠObservable . create ( OSS Dependencies Source ( context )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmemoized OSS List Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Subject . onNext ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġdisplay er ?. setError ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Dis player Attached ( display er : ĠDis player < List < App Info ViewModel >>, Ġrestored : ĠBoolean ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġwhen Ġ( display er ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠFragment Ġ-> Ġdisplay er . activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġandroidx . fragment . app . Fragment Ġ-> Ġdisplay er . activity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠActivity Ġ-> Ġdisplay er ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġurl Navigator . current Activity Ġ= Ġactivity ĊĊĠĠĠĠĠĠĠ Ġsuper . on Dis player Attached ( display er , Ġrestored ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġitem Selected ( item : ĠApp Info ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġis ĠApp Info Header ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Mask Ġ= Ġcurrent Mask Ġxor Ġitem . mask ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollapse Mask Subject . onNext ( current Mask ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġaction Triggered ( info ViewModel : ĠApp Info ViewModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġ( info ViewModel Ġas ? ĠApp Info With Subtitle And Action )?. action Data ĊĠĠĠĠĠĠĠ Ġif Ġ( data Ġis ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl Navigator . goTo Item Details ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ