package Ġcn . cq aut ot est . sun ny be ach . view model . discover Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcn . cq aut ot est . sun ny be ach . http . Service Creator Ċ import Ġcn . cq aut ot est . sun ny be ach . http . request . api . Photo Api Ċ import Ġcn . cq aut ot est . sun ny be ach . http . response . model . Wall paper Banner Bean Ċ import Ġcn . cq aut ot est . sun ny be ach . http . response . model . Wall paper Bean Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* Ġauthor Ġ: ĠA ĠL on ely ĠCat Ċ Ġ* Ġgithub Ġ: Ġhttps :// github . com / an ji emo / Sun ny Be ach Ċ Ġ* Ġtime ĠĠ Ġ: Ġ 2 0 2 1 / 6 / 1 8 Ċ Ġ* Ġdesc ĠĠ Ġ: Ġ åıĳçİ° çķĮ éĿ¢çļĦ ĠViewModel Ċ Ġ*/ Ċ class ĠDis cover ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġm Photo Api Ġby Ġlazy Ġ{ ĠService Creator . create < Photo Api >() Ġ} ĊĊĠĠĠ Ġ// Ġå½ĵåīį è¯·æ±Ĥ çļĦ åĽ¾çīĩ é¡µ çłģ ĊĠĠĠ Ġprivate Ġval Ġ_ current Photo Page Ġ= ĠMutable LiveData < Int >() ĊĊĠĠĠ Ġ// Ġ è½® æĴŃ åĽ¾ éĽĨåĲĪ ĊĠĠĠ Ġprivate Ġval Ġ_ banner List Ġ= ĠMutable LiveData < List < Wall paper Banner Bean . Data >>() ĊĠĠĠ Ġval Ġwall paper Banner List : ĠLive Data < List < Wall paper Banner Bean . Data >> Ġget () Ġ= Ġ_ banner List ĊĊĠĠĠ Ġ// Ġ ç¼ĵåŃĺ çļĦæīĢæľī åĽ¾çīĩ éĽĨåĲĪ ĊĠĠĠ Ġprivate Ġval Ġ_ cache Vertical Photo List Ġ= ĠMutable LiveData < List < Wall paper Bean . Res . Vertical >>() ĊĠĠĠ Ġval Ġcache Vertical Photo List : ĠLive Data < List < Wall paper Bean . Res . Vertical >> Ġget () Ġ= Ġ_ cache Vertical Photo List ĊĊĠĠĠ Ġ// Ġå½ĵåīį åĬłè½½ æĽ´å¤ļ çļĦ éĽĨåĲĪ ĊĠĠĠ Ġprivate Ġval Ġ_ vertical Photo List Ġ= ĠMutable LiveData < List < Wall paper Bean . Res . Vertical >>() ĊĠĠĠ Ġval Ġvertical Photo List : ĠLive Data < List < Wall paper Bean . Res . Vertical >> Ġget () Ġ= Ġ_ vertical Photo List ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° åĽ¾çīĩ åĪĹè¡¨ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh Photo List () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĩį ç½® å½ĵåīį é¡µ ä¸º Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Photo Page . value Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ å½ĵåīį ä¸º ç¬¬ Ġ 0 Ġ é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentPage Ġ= Ġ_ current Photo Page . value Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥è¯¢ Ġ 1 0 Ġ æĿ¡ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlimit Ġ= Ġ 3 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æľ¬ æ¬¡ è¯·æ±Ĥ éľĢè¦ģ è·³ è¿ĩ åĩł å¼ł åĽ¾çīĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġskip Ġ= ĠcurrentPage Ġ* Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" currentPage ï¼ļ $ currentPage Ġskip ï¼ļ $ skip ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥è¯¢ å¤ļå°ĳ æĿ¡ æķ°æį® ï¼Į è·³ è¿ĩ å¤ļå°ĳ æĿ¡ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Photo Api . load Wall paper List ( limit Ġ= Ġlimit , Ġskip Ġ= Ġskip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Success Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Data Ġ= Ġresponse . res . vertical ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 0 Ġ== Ġresponse . code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Photo List Ġ= Ġ(_ cache Vertical Photo List . value Ġ?: ĠlistOf ()). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Photo List . addAll ( response Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ç¼ĵåŃĺ çļĦ åħ¨éĥ¨ åĽ¾çīĩ éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cache Vertical Photo List . value Ġ= Ġcache Photo List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľ¬ æ¬¡ åĬłè½½ æĽ´å¤ļ çļĦ åĽ¾çīĩ éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ vertical Photo List . value Ġ= Ġresponse Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľ¬ æ¬¡ æŁ¥è¯¢ æĪĲåĬŁ ï¼Į å½ĵåīį é¡µ çłģ Ġ+ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Photo Page . value Ġ= ĠcurrentPage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ æĽ´å¤ļ åĽ¾çīĩ åĪĹè¡¨ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload More Photo List ( limit : ĠInt Ġ= Ġ 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġé»ĺè®¤ å½ĵåīį ä¸º ç¬¬ Ġ 0 Ġ é¡µ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcurrentPage Ġ= Ġ_ current Photo Page . value Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® æľ¬ æ¬¡ è¯·æ±Ĥ éľĢè¦ģ è·³ è¿ĩ åĩł å¼ł åĽ¾çīĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġskip Ġ= ĠcurrentPage Ġ* Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" currentPage ï¼ļ $ currentPage Ġskip ï¼ļ $ skip ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥è¯¢ å¤ļå°ĳ æĿ¡ æķ°æį® ï¼Į è·³ è¿ĩ å¤ļå°ĳ æĿ¡ æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Photo Api . load Wall paper List ( limit Ġ= Ġlimit , Ġskip Ġ= Ġskip ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Success Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Data Ġ= Ġresponse . res . vertical ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( 0 Ġ== Ġresponse . code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcache Photo List Ġ= Ġ(_ cache Vertical Photo List . value Ġ?: ĠlistOf ()). to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache Photo List . addAll ( response Data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġè®¾ç½® ç¼ĵåŃĺ çļĦ åħ¨éĥ¨ åĽ¾çīĩ éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ cache Vertical Photo List . value Ġ= Ġcache Photo List ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľ¬ æ¬¡ åĬłè½½ æĽ´å¤ļ çļĦ åĽ¾çīĩ éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ vertical Photo List . value Ġ= Ġresponse Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæľ¬ æ¬¡ æŁ¥è¯¢ æĪĲåĬŁ ï¼Į å½ĵåīį é¡µ çłģ Ġ+ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ current Photo Page . value Ġ= ĠcurrentPage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġfun Ġload Banner List () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Photo Api . load Wall paper Banner List () ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ}. on Success Ġ{ Ġresponse Ġ-> ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Data Ġ= Ġresponse . data ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" 0 " Ġ== Ġresponse . errno ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ banner List . value Ġ= Ġresponse Data ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ}. on Failure Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ} Ċ }