package Ġcom . unsplash . photo . view models Ċ Ċ import Ġandroid . util . Sparse Array Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġandroidx . paging . Paged List Ċ import Ġcom . unsplash . photo . Un splash App . Companion . PAGE _ SIZE Ċ import Ġcom . unsplash . photo . model . Like Photo Response Ċ import Ġcom . unsplash . photo . model . Photo Response Ċ import Ġcom . unsplash . photo . repository . Editor ial Repository Ċ import Ġcom . unsplash . photo . repository . base . Network State Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠEditor ial ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġeditor ial Repository : ĠEditor ial Repository Ċ ) Ġ: ĠBase ViewModel < Editor ial Repository >( editor ial Repository ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠtypeName Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġprivate Ġval Ġrepo Result Ġ= ĠTransform ations . map ( typeName ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . getList Photo ( it , ĠPAGE _ SIZE ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġphoto List : ĠLive Data < Paged List < Photo Response >> Ġ= ĠTransform ations . switch Map ( repo Result ) Ġ{ Ġit . page d List Ġ} ĊĠĠĠ Ġval Ġnetwork State : ĠLive Data < Network State > Ġ= ĠTransform ations . switch Map ( repo Result ) Ġ{ Ġit . network State Ġ} ĊĠĠĠ Ġval Ġrefresh State : ĠLive Data < Network State > Ġ= ĠTransform ations . switch Map ( repo Result ) Ġ{ Ġit . refresh State Ġ} ĊĊĠĠĠ Ġfun Ġrefresh () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepo Result . value ?. refresh ?. invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Photos ( type : ĠInt ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( typeName . value Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠtypeName . value Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġretry () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlisting Ġ= Ġrepo Result ?. value ĊĠĠĠĠĠĠĠ Ġlisting ?. retry ?. invoke () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcurrent Type (): ĠInt ? Ġ= ĠtypeName . value ĊĊĠĠĠ Ġprivate Ġval Ġid Photo Ġ= ĠMutable LiveData < Sparse Array < Any >>() ĊĠĠĠ Ġprivate Ġval Ġposition Ġ= ĠMutable LiveData < Int >() ĊĠĠĠ Ġprivate Ġval Ġphoto Ġ= ĠMutable LiveData < Photo Response >() ĊĠĠĠ Ġprivate Ġval Ġlike Result Ġ= ĠTransform ations . map ( id Photo ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . on Like Or Un Like Photo ( it [ 0 ] Ġas ĠString , Ġit [ 1 ] Ġas ĠBoolean ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġlike Photo : ĠLive Data < Like Photo Response > Ġ= ĠTransform ations . switch Map ( like Result ) Ġ{ Ġit . data Ġ} ĊĠĠĠ Ġval Ġnetwork Like State : ĠLive Data < Network State > Ġ= ĠTransform ations . switch Map ( like Result ) Ġ{ Ġit . network State Ġ} ĊĊĠĠĠ Ġfun Ġon Like Photo ( id : ĠSparse Array < Any >, Ġm Position : ĠInt , Ġphoto Response : ĠPhoto Response ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Photo . value Ġ== Ġid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġphoto . post Value ( photo Response ) ĊĠĠĠĠĠĠĠ Ġposition . post Value ( m Position ) ĊĠĠĠĠĠĠĠ Ġid Photo . value Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonUpdate Photo To Db ( photo Response : ĠPhoto Response ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository . on Update Photo Db ( photo Response ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcurrent Position (): ĠInt ? Ġ= Ġposition . value ĊĠĠĠ Ġfun Ġcurrent Photo (): ĠPhoto Response ? Ġ= Ġphoto . value Ċ }