package Ġcom . c ag at ay mu ham met . contact list . ui . contact . list ĊĊ Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . paging . Paged List Ċ import Ġcom . c ag at ay mu ham met . contact list . data . model . Contact Ċ import Ġcom . c ag at ay mu ham met . contact list . ui . base . Base ViewModel Ċ import Ġcom . c ag at ay mu ham met . contact list . util . constants . Resource Ċ import Ġcom . c ag at ay mu ham met . contact list . util . extent ions . to Paged List Ċ import Ġcom . c ag at ay mu ham met . contact list . util . extent ions . to Tr LowerCase Ċ import Ġcom . med ip ol . med ip ol h af at 1 1 mv vm . data . repository . Contact Repository Ċ import Ġdagger . h ilt . android . lifecycle . H ilt ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġkotlinx . coroutines . launch Ċ import Ġjavax . inject . Inject ĊĊ Ċ @ H ilt ViewModel Ċ class ĠContact List ViewModel Ġ@ Inject Ġconstructor ( private Ġval Ġrepository : ĠContact Repository ) Ġ: ĊĠĠĠ ĠBase ViewModel () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . sync Contacts () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġfiltered Contact List Ġ= Ġarray ListOf < Contact >() ĊĊĠĠĠ Ġfun Ġget Filter ( query : ĠString ): ĠP aged List < Contact > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfilter edList Ġ= Ġfiltered Contact List . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . name ?. to Tr LowerCase () !!. contains ( query . to Tr LowerCase ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġit . surname ?. to Tr LowerCase () !!. contains ( query . to Tr LowerCase ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfilter edList . to Paged List () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġcontact Response Paged LiveData Ġ= ĠMutable LiveData < Paged List < Contact >>() ĊĠĠĠ Ġvar Ġcontact Response LiveData Ġ= ĠMutable LiveData < List < Contact >>() ĊĊĠĠĠ Ġfun Ġget Contacts () Ġ{ ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . get Contacts (). collect Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Page Loaded . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . post Value ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Error Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠerrorMessage LiveData . post Value ( it . errorMessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠResource . Success Ġ-> Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading . post Value ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Page Loaded . post Value ( true ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Response LiveData . post Value ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Contact List . addAll ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Response Paged LiveData . post Value ( it . to Paged List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊ Ċ } ĊĊ