package Ġ` in `. j unk iel abs . park ing . components . datasource . check inout Ċ Ċ import Ġ` in `. j unk iel abs . park ing . components . api . base . ApiResponse Ċ import Ġ` in `. j unk iel abs . park ing . components . api . models . check inout . Param Check InOut Ċ import Ġ` in `. j unk iel abs . park ing . components . api . repository . Api Repo Check InOut Ċ import Ġ` in `. j unk iel abs . park ing . components . firebase . auth . Firebase Token Ċ import Ġandroidx . paging . Paging Source Ċ import Ġandroidx . paging . Paging State Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠN ir aj Ġon Ġ 1 0 - 1 2 - 2 0 2 1 . Ċ Ġ*/ Ċ class ĠCheck InOut DataSource ( ĊĠĠĠ Ġvar Ġapi Repo Check InOut : ĠApi Repo Check InOut , ĊĠĠĠ Ġvar Ġpar king Area Id : ĠString , Ġvar Ġstatus : ĠInt Ċ ) Ġ: ĊĠĠĠ ĠP aging Source < String , ĠParam Check InOut >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġval ĠPA ZE _ SIZE Ġ= Ġ 1 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġget Refresh Key ( state : ĠP aging State < String , ĠParam Check InOut >): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġload ( params : ĠLoad Params < String >): ĠLoad Result < String , ĠParam Check InOut > Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġtoken : ĠString ? Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Token . getToken () Ġ?: Ġreturn ĠLoad Result . Error ( Throwable (" Token Ġnot Ġfound ")) ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ Ċ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Question DataSource ĠKey Ġ 1 : Ġ" Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresponse Ġ= Ġapi Repo Check InOut . check InOut s ( token !! , Ġpar king Area Id , Ġstatus , Ġparams . key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Key Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . status Ġ== ĠApiResponse . Status . SUCCESS ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . data != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . data !!. result . size Ġ== Ġresponse . data !!. pageSize ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse . data !!. result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġresponse . data !!. result . last (). id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse . data !!. result , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠlistOf (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( response . status Ġ== ĠApiResponse . Status . ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable ( response . message Ġ?: Ġ" Server ĠError Ġ!! ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġresponse . to Objects ( Param Question :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnext Query ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) */ ĊĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( Throwable (" Something Ġwell Ġwrong Ġ!! ")) ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Question DataSource Ġload : Ġ" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Question DataSource ĠKey Ġ 1 : Ġ" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠcurrentPage : ĠQuery Snapshot ; ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( params . key Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Question DataSource ĠKey Ġ 2 : Ġ" Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery . start After ( params . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġparams . key !!. get (). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Question DataSource ĠKey Ġ 3 : Ġ" Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Ġ= Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġquery . limit ( PA ZE _ SIZE . to Long ()). get (). await () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġnext Query : ĠQuery ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( currentPage . size () Ġ== ĠPA ZE _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Query Ġ= Ġ Ġquery . start After ( currentPage . documents [ currentPage . size () Ġ- Ġ 1 ]). limit ( PA ZE _ SIZE . to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" datasource Ġsize : Ġ${ currentPage . size ()} Ġ${ currentPage . documents [ currentPage . size () Ġ- Ġ 1 ]?. id } Ġ" Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* //* ĠĠ Ġ// ĠStep Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Document Snapshot Ġ= ĠcurrentPage . documents [ currentPage . size () Ġ- Ġ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Page Ġ= Ġquery . limit ( 1 0 ). start After ( last Document Snapshot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. await () ĊĠĠ Ġ* //* ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠStep Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Page ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠcurrentPage . to Objects ( Param Question :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprev Key Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext Key Ġ= Ġnext Query ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠLoad Result . Error ( e ) ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĠĠĠ Ġ} Ċ }