package Ġcom . kel in . photo selector . cache Ċ Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroidx . lifecycle . Lifecycle Observer Ċ import Ġcom . kel in . photo selector . model . Album Type Ċ import Ġcom . kel in . photo selector . model . Picture Ċ Ċ /** Ċ Ġ* Ġ** æııè¿° :** Ġä»İ çĽ¸ åĨĮ éĢīæĭ© åĽ¾çīĩ æĪĸ è§Ĩé¢ĳ æĺ¯ çļĦ åİ» éĩį ç®¡çĲĨ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ** åĪĽå»º äºº :** Ġk elin Ċ Ġ* Ċ Ġ* Ġ** åĪĽå»º æĹ¶éĹ´ :** Ġ 2 0 2 0 / 7 / 2 2 Ġ 9 : 4 8 ĠAM Ċ Ġ* Ċ Ġ* Ġ** çīĪæľ¬ :** Ġv Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ internal Ġclass ĠDist inct Manager Ġprivate Ġconstructor () Ġ: ĠCache Owner < List < Picture >> Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval Ġinstance Ġby Ġlazy ( Lazy Thread Safety Mode . SYN CH RON IZED ) Ġ{ ĠDist inct Manager () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġpool Ġby Ġlazy Ġ{ ĠSparse Array < Cache < List < Picture >> >() Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġtry New Cache ( id : ĠInt ): ĠLifecycle Observer Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcache Ġ= Ġpool [ id ] ĊĠĠĠĠĠĠĠ Ġif Ġ( cache Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache Ġ= ĠPhoto Cache ( id , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool . put ( id , Ġcache ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġcache ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġget Selected ( id : ĠInt , Ġalbum Type : ĠAlbum Type ): ĠList < Picture >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool [ id ]?. cache ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( album Type Ġ== ĠAlbum Type . PH OTO _ VIDEO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . filter Ġ{ Ġphoto Ġ-> Ġphoto . type . type Ġ== Ġalbum Type . type Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġsave Selected ( id : ĠInt , Ġselected : ĠList < Picture >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool [ id ]?. on Cache ( selected ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġadd Selected ( id : ĠInt , Ġselected : ĠPicture ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool [ id ]?. add Cache ( listOf ( selected )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove ( id : ĠInt , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool [ id ]?. remove ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġremove ( id : ĠInt , Ġuri : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpool [ id ]?. remove ( uri ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdetach ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpool . remove ( id ) ĊĠĠĠ Ġ} Ċ }