/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġpaging . android . example . com . pag ings ample Ċ Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . paging .* Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Main Scope Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġkotlinx . coroutines . launch Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Android ViewModel ] Ġthat Ġprovides Ġa Ġ[ Flow ]< [ Paging Data ]> Ġof Ġde lic ious Ġche e ses . Ċ Ġ*/ Ċ class ĠChe ese ViewModel ( private Ġval Ġdao : ĠChe ese Dao Local ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġval ĠpageSize Ġ= Ġ 3 0 ĊĠĠĠ Ġvar ĠdataSource : ĠP aging Source < Int , ĠChe ese >? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġall Che e ses : ĠFlow < Paging Data < Che ese ListItem >> Ġ= ĠP ager ( ĊĠĠĠĠĠĠĠ Ġconfig Ġ= ĠP aging Config ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠpageSize Ġ= ĠpageSize , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġenable Place holders Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠmaxSize Ġ= Ġ 9 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠdataSource Ġ= Ġdao . getDataSource ( pageSize ) ĊĠĠĠĠĠĠĠ ĠdataSource !! ĊĠĠĠ Ġ}. flow ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġpaging Data Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠMap Ġche e ses Ġto Ġcommon ĠUI Ġmodel . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġche ese Ġ-> ĠChe ese ListItem . Item ( che ese ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// . cached In ( viewModel Scope ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġdao . sorted Data . observe Fore ver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource ?. invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinsert ( text : ĠCharSequence ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao . insert ( Che ese ( name Ġ= Ġtext . toString ())) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource . invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove ( che ese : ĠChe ese ) Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Scope (). launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdao . delete ( che ese ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠdataSource . invalidate () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ