package Ġcom . example . picture čĊč Ċ import Ġandroid . app . Application č Ċ import Ġandroid . util . Log č Ċ import Ġandroidx . lifecycle . Android ViewModel č Ċ import Ġandroidx . lifecycle . LiveData č Ċ import Ġandroidx . lifecycle . Mutable LiveData č Ċ import Ġcom . android . vol ley . Request č Ċ import Ġcom . android . vol ley . Response č Ċ import Ġcom . android . vol ley . toolbox . String Request č Ċ import Ġcom . example . picture . dao . Photo Item č Ċ import Ġcom . example . picture . dao . Pix ab ay č Ċ import Ġcom . google . gson . Gson č Ċ import Ġjava . io . String Reader č Ċ import Ġkotlin . math . ceil čĊč Ċ class ĠGallery ViewModel ( application : ĠApplication ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCAN _ LOAD _ MORE Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNO _ MORE Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġconst Ġval ĠNET WORK _ ERR Ġ= Ġ 2 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġval Ġphoto List Live : ĠLive Data < List < Photo Item >> čĊĠĠĠ Ġget () Ġ= Ġ_ photo List Live čĊčĊĠĠĠ Ġprivate Ġval Ġ_ photo List Live Ġ= ĠMutable LiveData < List < Photo Item >>() čĊčĊĠĠĠ Ġprivate Ġval Ġ_ data Status Live Ġ= ĠMutable LiveData < Int >() čĊčĊĠĠĠ Ġval Ġdata Status Live : ĠLive Data < Int > čĊĠĠĠ Ġget () Ġ= Ġ_ data Status Live čĊčĊĠĠĠ Ġvar Ġneed To Top Ġ= Ġtrue čĊĠĠĠ Ġprivate Ġval Ġlist Ġ= ĠarrayOf (" cat ", Ġ" math ", Ġ" dog ", Ġ" magic ") čĊčĊĠĠĠ Ġprivate Ġval Ġper Page Ġ= Ġ 5 0 čĊčĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 1 čĊčĊĠĠĠ Ġprivate Ġvar Ġtotal Page Ġ= Ġ 1 čĊčĊĠĠĠ Ġprivate Ġvar Ġcurrent Key Ġ= Ġ"" čĊčĊĠĠĠ Ġprivate Ġvar Ġis New Query Ġ= Ġtrue čĊčĊĠĠĠ Ġprivate Ġvar ĠisLoading Ġ= Ġfalse čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġreset Query () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġreset Query () Ġ{ čĊĠĠĠĠĠĠĠ Ġneed To Top Ġ= Ġtrue čĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġtotal Page Ġ= Ġ 1 čĊĠĠĠĠĠĠĠ Ġis New Query Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġcurrent Key Ġ= list . random () čĊĠĠĠĠĠĠĠ Ġfetch Data () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun ĠgetUrl (): ĠString Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġurl Ġ= Ġ" https :// pix ab ay . com / api /? key = 2 3 9 9 3 9 1 5 - e 0 4 abf 8 8 2 6 a 6 2 f 7 ea 0 9 ce 7 0 ba & q =${ current Key }& per _ page =${ per Page }& page =${ currentPage }& image _ type = photo & pretty = true " čĊĠĠĠĠĠĠĠ Ġreturn Ġurl čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġfetch Data () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( isLoading ) Ġreturn čĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġtrue čĊčĊĠĠĠĠĠĠĠ Ġif Ġ( currentPage Ġ> Ġtotal Page ) Ġ{ čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Status Live . value Ġ= ĠNO _ MORE čĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġval Ġstring Request Ġ= ĠString Request ( čĊĠĠĠĠĠĠĠĠĠĠĠ ĠRequest . Method . GET , čĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetUrl (), čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Gson (). fromJson ( it , ĠP ix ab ay :: class . java )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Page Ġ= Ġceil ( total Hits . toDouble () Ġ/ Ġper Page ). toInt () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isNew Query ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ photo List Live . value Ġ= Ġhits čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ photo List Live . value Ġ= Ġarray ListOf (_ photo List Live . value !! , Ġhits ). flatten () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Status Live . value Ġ= ĠCAN _ LOAD _ MORE čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis New Query Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage ++ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ data Status Live . value Ġ= ĠNET WORK _ ERR čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, čĊĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ ĠVol ley Singleton . getInstance ( getApplication ()). request Queue . add ( string Request ) čĊĠĠĠ Ġ} č Ċ } čĊ