package Ġcom . berg amin . mar vel characters . feature . home . view model Ċ Ċ import Ġandroidx . databinding . Observable Boolean Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . berg amin . mar vel characters . domain . model . Character Ċ import Ġcom . berg amin . mar vel characters . domain . repository . Mar vel Repository Ċ import Ġjava . util .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠHome ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġmar vel Repository : ĠMar vel Repository ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcharacters LiveData Ġ= ĠMutable LiveData < List < Character >>() ĊĠĠĠ Ġval Ġlive Data Mediator Ġ= ĠMed iator LiveData < List < Character Item ViewModel >>() ĊĊĠĠĠ Ġval ĠisLoading Ġ= ĠObservable Boolean () ĊĠĠĠ Ġprivate Ġvar Ġtimer Ġ= ĠTimer () ĊĠĠĠ Ġprivate Ġval Ġdebounce Time : ĠLong Ġ= Ġ 7 5 0 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġlive Data Mediator . add Source ( characters LiveData ) Ġ{ Ġcharacters Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . set ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlive Data Mediator . value Ġ= Ġcharacters . map Ġ{ ĠCharacter Item ViewModel ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Character ( name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters LiveData . value Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠisLoading . set ( true ) ĊĠĠĠĠĠĠĠ Ġtimer . cancel () ĊĠĠĠĠĠĠĠ Ġtimer Ġ= ĠTimer () ĊĠĠĠĠĠĠĠ Ġtimer . schedule ( object Ġ: ĠTimer Task () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmar vel Repository . search Characters ( name , Ġcharacters LiveData ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, Ġdebounce Time ) ĊĠĠĠ Ġ} Ċ } Ċ