package Ġcom . j ason . rick and mort y . ui . character Ċ Ċ import Ġandroid . util . Log Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . j ason . rick and mort y . data . model . Character Ċ import Ġcom . j ason . rick and mort y . data . model . Episode Ċ import Ġcom . j ason . rick and mort y . data . model . Location Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠCharacter ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġcharacter Repository : ĠCharacter Repository ) Ġ: ĊĠĠĠ ĠViewModel (), ĠCharacter Repository . Repo CallBack Ġ{ ĊĠĠĠ Ġval Ġcharacters Ġ= ĠMutable LiveData < List < Character >>() ĊĠĠĠ Ġval Ġtemp Location Ġ= ĠMutable LiveData < Location ?> () ĊĠĠĠ Ġval Ġepisode Character Ġ= ĠMutable LiveData < List < Character >>() ĊĠĠĠ Ġval Ġis Last Page Ġ= ĠMutable LiveData < Boolean >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcharacter Repository . repo CallBack Ġ= Ġthis @ Character ViewModel ĊĠĠĠĠĠĠĠ Ġcharacters . value Ġ= Ġarray ListOf () ĊĠĠĠĠĠĠĠ Ġtemp Location . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġepisode Character . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġread Character () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġread Character () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcharacter List Ġ= ĠlistOf < Character >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter List Ġ= Ġcharacter Repository . read Character () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters . value Ġ= Ġcharacter List ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġload Character () Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Repository . load Character () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Episode Character ( episode : ĠEp isode ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Repository . get Episode Character ( episode ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Character Location ( character : ĠCharacter ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCor outine Scope ( Dispatch ers . IO ). launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Repository . get Character Location ( character ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Data Base Change () Ġ{ ĊĠĠĠĠĠĠĠ Ġread Character () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Last Page () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Last Page . value Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Get Location ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Location . value Ġ= Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Get Episode Character ( episode Character List : ĠArrayList < Character >) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" abc ", Ġ" get Ġ${ episode Character List . size } Ġcharacter Ġfor Ġepisode ") ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġepisode Character . value Ġ= Ġepisode Character List . toList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" abc ", Ġ" current Ġsize Ġ${ episode Character . value !!. size } Ġcharacter Ġfor Ġepisode ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Repository . episode Character List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }