package Ġcom . vik as . paging 3 . data Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . paging .* Ċ import Ġandroidx . paging . rx java 2 . observable Ċ import Ġcom . vik as . paging 3 . model . Dog go Image Model Ċ import Ġcom . vik as . paging 3 . repository . local . App Database Ċ import Ġcom . vik as . paging 3 . repository . local . Local Injector Ċ import Ġcom . vik as . paging 3 . repository . remote . Dog go ApiService Ċ import Ġcom . vik as . paging 3 . repository . remote . Remote Injector Ċ import Ġio . reactivex . Observable Ċ import Ġkotlinx . coroutines . flow . Flow Ċ Ċ /** Ċ Ġ* Ġrepository Ġclass Ġto Ġmanage Ġthe Ġdata Ġflow Ġand Ġmap Ġit Ġif Ġneeded Ċ Ġ*/ Ċ @ Experimental Paging Api Ċ class ĠDog go Images Repository ( ĊĠĠĠ Ġval Ġdog go ApiService : ĠDog go ApiService Ġ= ĠRemote Injector . inject Dog go ApiService (), ĊĠĠĠ Ġval Ġapp Database : ĠApp Database ? Ġ= ĠLocal Injector . inject Db () Ċ ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ PAGE _ INDEX Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDEFAULT _ PAGE _ SIZE Ġ= Ġ 2 0 ĊĊĠĠĠĠĠĠĠ Ġ// get Ġdog go Ġrepository Ġinstance ĊĠĠĠĠĠĠĠ Ġfun ĠgetInstance () Ġ= ĠDog go Images Repository () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġcalling Ġthe Ġpaging Ġsource Ġto Ġgive Ġresults Ġfrom Ġapi Ġcalls ĊĠĠĠĠ Ġ* Ġand Ġreturning Ġthe Ġresults Ġin Ġthe Ġform Ġof Ġflow Ġ[ Flow < Paging Data < Dog go Image Model >> ] ĊĠĠĠĠ Ġ* Ġsince Ġthe Ġ[ Paging Data Adapter ] Ġaccepts Ġthe Ġ[ Paging Data ] Ġas Ġthe Ġsource Ġin Ġlater Ġstage ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġlet Dog go Images Flow ( paging Config : ĠP aging Config Ġ= ĠgetDefault Page Config ()): ĠFlow < Paging Data < Dog go Image Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP ager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġpaging Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Source Factory Ġ= Ġ{ ĠDog go Image Paging Source ( dog go ApiService ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). flow ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// for Ġrx java Ġusers ĊĠĠĠ Ġfun Ġlet Dog go Images Observable ( paging Config : ĠP aging Config Ġ= ĠgetDefault Page Config ()): ĠObservable < Paging Data < Dog go Image Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP ager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġpaging Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Source Factory Ġ= Ġ{ ĠDog go Image Paging Source ( dog go ApiService ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). observable ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// for Ġlive Ġdata Ġusers ĊĠĠĠ Ġfun Ġlet Dog go Images LiveData ( paging Config : ĠP aging Config Ġ= ĠgetDefault Page Config ()): ĠLive Data < Paging Data < Dog go Image Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP ager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġpaging Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Source Factory Ġ= Ġ{ ĠDog go Image Paging Source ( dog go ApiService ) Ġ} ĊĠĠĠĠĠĠĠ Ġ). live Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġlet 's Ġdefine Ġpage Ġsize , Ġpage Ġsize Ġis Ġthe Ġonly Ġrequired Ġparam , Ġrest Ġis Ġoptional ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetDefault Page Config (): ĠP aging Config Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠP aging Config ( pageSize Ġ= ĠDEFAULT _ PAGE _ SIZE , Ġenable Place holders Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġlet Dog go Images Flow Db ( paging Config : ĠP aging Config Ġ= ĠgetDefault Page Config ()): ĠFlow < Paging Data < Dog go Image Model >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( app Database Ġ== Ġnull ) Ġthrow ĠIllegalStateException (" Database Ġis Ġnot Ġinitialized ") ĊĊĠĠĠĠĠĠĠ Ġval Ġpaging Source Factory Ġ= Ġ{ Ġapp Database . get Dog go Image Model Dao (). getAll Dog go Model () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠP ager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġpaging Config , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpaging Source Factory Ġ= Ġpaging Source Factory , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremote Mediator Ġ= ĠDog go Mediator ( dog go ApiService , Ġapp Database ) ĊĠĠĠĠĠĠĠ Ġ). flow ĊĠĠĠ Ġ} Ċ Ċ }