package Ġview Ċ Ċ import Ġandroidx . lifecycle . Mediator LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . switch Map Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . paging . cached In Ċ import Ġrepo . Character Repo Ċ Ċ class ĠCharacter ViewModel Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġepisode Ġ= ĠMutable LiveData ( 0 ) ĊĠĠĠ Ġprivate Ġval Ġquery Ġ= ĠMutable LiveData ("") ĊĠĠĠ Ġprivate Ġval Ġgender Ġ= ĠMutable LiveData ("") ĊĊĠĠĠ Ġdata Ġclass ĠEp isode And Query ( val Ġid : ĠInt Ġ= Ġ 0 , Ġval Ġquery : ĠString Ġ= Ġ"", Ġval Ġgender : ĠString ) ĊĊĠĠĠ Ġprivate Ġval Ġcharacters Ġ= ĠMed iator LiveData < Episode And Query >(). apply Ġ{ Ġvalue Ġ= ĠEp isode And Query ( 1 ," "," ") Ġ}// . apply Ġ{ ĠCharacter Repo . get Characters ("", Ġgender , Ġit ). cached In ( viewModel Scope ) Ġ} ĊĠĠĠ Ġval Ġcharacter Ġ= Ġcharacters . switch Map Ġ{ ĊĠĠĠĠĠĠĠ ĠCharacter Repo . get Characters ( it . query , Ġit . gender , Ġit . id ). cached In ( viewModel Scope ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcharacters . add Source ( episode ) Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Ġ= Ġcharacters . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters . value Ġ= Ġprevious ?. copy ( id Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcharacters . add Source ( query ) Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Ġ= Ġcharacters . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters . value Ġ= Ġprevious ?. copy ( query Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcharacters . add Source ( gender ) Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprevious Ġ= Ġcharacters . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters . value Ġ= Ġprevious ?. copy ( gender Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Characters ( id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġepisode . value Ġ= Ġid ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsearch Characters ( query : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . query . value Ġ= Ġquery ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfilter Gender ( gender : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . gender . value Ġ= Ġgender ĊĠĠĠ Ġ} Ċ }