package Ġcom . avatar os ko . nas ag allery . ui . photo Ċ Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . avatar os ko . nas ag allery . R Ċ import Ġcom . avatar os ko . nas ag allery . common . Awesome Result Ċ import Ġcom . avatar os ko . nas ag allery . common . model . Camera Types Ċ import Ġcom . avatar os ko . nas ag allery . common . model . R over Types Ċ import Ġcom . avatar os ko . nas ag allery . common . resource . Resource Wrapper Ċ import Ġcom . avatar os ko . nas ag allery . data . model . Response Photo Ċ import Ġcom . avatar os ko . nas ag allery . domain . Fetch Photos UseCase Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . State Flow Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt ViewModel Ċ class ĠPhoto ViewModel Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġphotos UseCase : ĠFetch Photos UseCase , ĊĠĠĠ Ġprivate Ġval Ġm Resource Wrapper : ĠResource Wrapper Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġ_ photos Ġ= ĠMutable State Flow < List < Response Photo >>( listOf ()) ĊĠĠĠ Ġval Ġphotos Ġ= Ġ_ photos Ġas ĠState Flow < List < Response Photo >> ĊĊĠĠĠ Ġprivate Ġval Ġ_ error State Ġ= ĠMutable State Flow < Photo ListView State >( Photo ListView State ()) ĊĠĠĠ Ġval Ġerror State Ġ= Ġ_ error State Ġas ĠState Flow < Photo ListView State > ĊĊĊĠĠĠ Ġvar Ġselected Filter : ĠCamera Types ? Ġ= Ġnull ĊĠĠĠ Ġfun Ġfetch R over s Photo ( ro ver Type : ĠR over Types , Ġpage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġphotos UseCase . execute ( Fetch Photos UseCase . Request ( ro ver Type , Ġpage , Ġselected Filter )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Each Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAwesome Result . Loading Ġ-> Ġ_ error State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ListView State ( isLoading Ġ= Ġit . isLoading ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAwesome Result . No Network Connection Ġ-> Ġ_ error State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ListView State ( errorMessage Ġ= Ġ" No ĠInternet ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAwesome Result . ServerError Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ListView State ( errorMessage Ġ= Ġit . error Data . m Error ?. m Message . or Empty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAwesome Result . Success Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( page Ġ== Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . data . m Photos . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ListView State ( errorMessage Ġ= Ġm Resource Wrapper . getString ( R . string . no _ internet )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ error State . value Ġ= ĠPhoto ListView State ( errorMessage Ġ= Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ photos . value Ġ= Ġit . data . m Photos ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ photos . value Ġ= Ġ_ photos . value . plus ( it . data . m Photos ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠAwesome Result . Unknown Error Ġ-> Ġ_ error State . value Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPhoto ListView State ( errorMessage Ġ= Ġm Resource Wrapper . getString ( R . string . unknown _ error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. launch In ( viewModel Scope ) ĊĠĠĠ Ġ} ĊĊ Ċ }