package Ġid . bag as w ir ap rad ana . test . stock bit . view model Ċ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġid . bag as w ir ap rad ana . test . stock bit . data . model . Coin Data Ċ import Ġid . bag as w ir ap rad ana . test . stock bit . repository . Watch List Repository Ċ import Ġid . bag as w ir ap rad ana . test . stock bit . utils . Result State Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Job Ċ import Ġkotlinx . coroutines . launch ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġbag as w ir ap rad ana Ġon Ġ 3 / 1 6 / 2 1 . Ċ Ġ*/ Ċ class ĠWatch List ViewModel ( private Ġval Ġwatch List Repository : ĠWatch List Repository ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġval Ġcoins Ġ= ĠMutable LiveData < Result State < ArrayList < Coin Data >> >() ĊĊĠĠĠ Ġfun Ġget Coins () Ġ= Ġcoins ĊĊĠĠĠ Ġfun ĠsetCurrent Page ( page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentPage Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoins . post Value ( Result State . InProgress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( Job () Ġ+ ĠDispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġwatch List Repository . getC oin s From Api ( currentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcoin List Ġ= Ġit . data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoin List . let Ġ{ Ġlist Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentPage Ġ== Ġ 0 ) Ġ{ Ġ// set Ġcoins Ġfor Ġfirst Ġpage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoins . post Value ( Result State . Success ( list )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// add Ġcoins Ġto Ġcurrent Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoins . post Value ( Result State . Success ( list )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcoins . post Value ( Result State . Success ( array ListOf ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( error : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcoins . post Value ( Result State . Error ( error )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Data Next Page () Ġ{ ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġload Data () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠgetCurrent Page () Ġ= ĠcurrentPage Ċ }