package Ġby . sh ost ko . status handler . paging . item keyed Ċ Ċ import Ġandroidx . paging . Item Key ed DataSource Ċ import Ġby . sh ost ko . status handler . Action Ċ import Ġby . sh ost ko . status handler . Status Handler Ċ import Ġby . sh ost ko . status handler . paging . asString Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġtim ber . log . Tim ber Ċ Ċ abstract Ġclass ĠBase Item Key ed DataSource < K , ĠV >( ĊĠĠĠ Ġprotected Ġval Ġstatus Handler : ĠStatus Handler < *> Ċ ) Ġ: ĠItem Key ed DataSource < K , ĠV >() Ġ{ ĊĊĠĠĠ Ġprotected Ġopen Ġval Ġtag : ĠString Ġ= Ġjava Class . simple Name ĊĊĠĠĠ Ġprivate Ġvar Ġretry Function : Ġ(() Ġ-> ĠAny )? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdis posable Ġ= Ġstatus Handler . action ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). d ("% s Ġaction Ġrequested ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAction . RETRY Ġ-> Ġretry Function ?. apply Ġ{ Ġretry Function Ġ= Ġnull Ġ} ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġinvalidate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ ĠTim ber . tag ( tag ). e ( it , Ġ" Error Ġduring Ġlistening Ġactions ") Ġ}) ĊĠĠĠĠĠĠĠ Ġadd Invalid ated Callback Ġ{ Ġdis posable . dispose () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġload Initial ( params : ĠLoad Initial Params < K >, Ġcallback : ĠLoad Initial Callback < V >) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). d (" load Initial Ġfor Ġ% s ", Ġparams . asString ()) ĊĠĠĠĠĠĠĠ Ġstatus Handler . update Working () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad Initial ( params , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failed Result Initial ( e , Ġparams , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠonLoad Initial ( params : ĠLoad Initial Params < K >, Ġcallback : ĠLoad Initial Callback < V >) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġload After ( params : ĠLoad Params < K >, Ġcallback : ĠLoad Callback < V >) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). d (" load After Ġfor Ġ% s ", Ġparams . asString ()) ĊĠĠĠĠĠĠĠ Ġstatus Handler . update Working Forward () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad After ( params , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failed Result After ( e , Ġparams , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠonLoad After ( params : ĠLoad Params < K >, Ġcallback : ĠLoad Callback < V >) ĊĊĠĠĠ Ġfinal Ġoverride Ġfun Ġload Before ( params : ĠLoad Params < K >, Ġcallback : ĠLoad Callback < V >) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). d (" load Before Ġfor Ġ% s ", Ġparams . asString ()) ĊĠĠĠĠĠĠĠ Ġstatus Handler . update Working Backward () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonLoad Before ( params , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Failed Result Before ( e , Ġparams , Ġcallback ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Throwable :: class ) ĊĠĠĠ Ġprotected Ġabstract Ġfun ĠonLoad Before ( params : ĠLoad Params < K >, Ġcallback : ĠLoad Callback < V >) ĊĊĠĠĠ Ġprotected Ġfun ĠonSuccess Result ( ĊĠĠĠĠĠĠĠ Ġlist : ĠList < V >, ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Initial Params < K >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Initial Callback < V > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Invalid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). d (" on Success Result Ġ% d Ġitems Ġfor Ġ% s ", Ġlist . size , Ġparams . asString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Function Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Handler . update Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun ĠonSuccess Result ( ĊĠĠĠĠĠĠĠ Ġlist : ĠList < V >, ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Params < K >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Callback < V > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Invalid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). d (" on Success Result Ġ% d Ġitems Ġfor Ġ% s ", Ġlist . size , Ġparams . asString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Function Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Handler . update Success () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Result ( list ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Failed Result Initial ( ĊĠĠĠĠĠĠĠ Ġe : ĠThrowable , ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Initial Params < K >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Initial Callback < V > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Invalid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). e ( e , Ġ" Error Ġduring Ġload Initial Ġfor Ġ% s ", Ġparams . asString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Function Ġ= Ġ{ Ġload Initial ( params , Ġcallback ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Handler . update Failed ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Failed Result Before ( ĊĠĠĠĠĠĠĠ Ġe : ĠThrowable , ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Params < K >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Callback < V > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Invalid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). e ( e , Ġ" Error Ġduring Ġload Before Ġfor Ġ% s ", Ġparams . asString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Handler . update Failed ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Function Ġ= Ġ{ Ġload Before ( params , Ġcallback ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġfun Ġon Failed Result After ( ĊĠĠĠĠĠĠĠ Ġe : ĠThrowable , ĊĠĠĠĠĠĠĠ Ġparams : ĠLoad Params < K >, ĊĠĠĠĠĠĠĠ Ġcallback : ĠLoad Callback < V > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Invalid ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag ( tag ). e ( e , Ġ" Error Ġduring Ġload After Ġfor Ġ% s ", Ġparams . asString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry Function Ġ= Ġ{ Ġload After ( params , Ġcallback ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Handler . update Failed ( e ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }