package Ġcom . engine ba i . gallery . ui Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . engine ba i . gallery . model .* Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . Observable Ċ import Ġio . reactivex . subjects . Behavior Subject Ċ import Ġio . reactivex . subjects . Publish Subject Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . inject Ċ Ċ class ĠGallery ViewModel Ġ: ĠViewModel (), ĠK oin Component Ġ{ ĊĠĠĠ Ġvar Ġsetting : ĠAlbum Setting ? Ġ= Ġnull ĊĠĠĠ Ġval Ġmultiple Select Media Ġ= ĠBehavior Subject . create Default < Mutable List < Media >>( mutable ListOf ()) ĊĠĠĠ Ġval Ġsingle Select Media Ġ= ĠPublish Subject . create < Media >() ĊĠĠĠ Ġval Ġcurrent Album Item Ġ= ĠBehavior Subject . create < Album Item >() ĊĊĠĠĠ Ġprivate Ġval Ġalbum Repo : ĠAlbum Repo Ġby Ġinject () ĊĊĠĠĠ Ġfun Ġload Album s (): ĠComp letable Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġalbum Repo . fetch Album s ( setting ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Complete Ġ{ Ġselect Album ( album Repo . get Album Item Sync ( ALL _ MEDIA _ AL BU M _ NAME , Ġsetting ) !! ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Album s (): ĠObservable < List < Album Item >> Ġ= Ġalbum Repo . get Album s ( setting ) ĊĊĠĠĠ Ġfun Ġselect Album ( album : ĠAlbum Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Album Item . onNext ( album ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġselect Media ( media : ĠMedia ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( true Ġ== Ġsetting ?. multiple Selection ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Select Media . value ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . contains ( media )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . remove ( media ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetting ?. max Selection ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this . size Ġ< Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add ( media ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġkotlin . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add ( media ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Select Media . onNext ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Select Media . onNext ( media ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġis Select ( media : ĠMedia ): ĠBoolean Ġ= Ġmultiple Select Media . value !!. contains ( media ) Ċ }