package Ġcom . sum era . sample . ui . infinity Ċ Ċ import Ġcom . sum era . core actor . Core actor Ċ import Ġcom . sum era . core actor . contract . action . Action Ċ import Ġcom . sum era . core actor . lifecycle . Lifecycle State Ċ import Ġcom . sum era . sample . inter actors . Get Items Interactor Ċ import Ġcom . sum era . sample . inter actors . Set Favorite Item State Interactor Ċ import Ġcom . sum era . sample . ui . infinity . contract . Infinity Loading State Ċ import Ġcom . sum era . sample . ui . infinity . contract . Item Wrapper Ċ import Ġcom . sum era . sample . ui . infinity . contract . Next Items State Ċ import Ġcom . sum era . sample . ui . infinity . contract . On Bottom Reached Ċ import Ġcom . sum era . sample . ui . infinity . contract . On Item Favorite Clicked Ċ import Ġcom . sum era . sample . ui . infinity . contract . On Retry Loading Ċ import Ġcom . sum era . sample . ui . infinity . contract . On Retry Loading Next Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Content Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Error Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Favorite Item Error Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Favorite Item Loading Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Loading Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Next Content Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Next Error Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Next Loading Ċ import Ġcom . sum era . sample . ui . infinity . contract . Show Updated Item Ċ import Ġkotlinx . coroutines . launch Ċ Ċ class ĠInfinity Loading Core actor ( ĊĠĠĠ Ġprivate Ġval Ġget Items Interactor : ĠGet Items Interactor , ĊĠĠĠ Ġprivate Ġval Ġset Favorite Item State Interactor : ĠSet Favorite Item State Interactor Ċ ) Ġ: ĠCore actor < Infinity Loading State >() Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcreate InitialState () Ġ= ĠInfinity Loading State ( ĊĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġerror Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġcontent Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġnext Items State Ġ= ĠNext Items State ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisLoading Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Lifecycle State ( state : ĠLifecycle State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLifecycle State . ON _ START Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Initial Data When View Is Started () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Action ( action : ĠAction < Infinity Loading State >) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Retry Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Initial Data When Retry Is Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Retry Loading Next Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Data When Retry Is Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Bottom Reached Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Data When Reached Bottom () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOn Item Favorite Clicked Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Item Favorite State ( action . item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Initial Data When View Is Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . can Load Initial Data When View Is Started ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Initial Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Initial Data When Retry Is Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . can Load Initial Data When Retry Is Clicked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Initial Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Initial Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( Show Loading ) ĊĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Items Interactor . execute ( 0 ). unwrap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Ġ= Ġ{ Ġvalue Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapped Items Ġ= Ġvalue . map Ġ{ ĠItem Wrapper ( it , Ġfalse , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Content ( wrapped Items )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Error ( error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Next Data When Retry Is Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . can Load Next Items When Retry Is Clicked ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Next Data When Reached Bottom () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( state . can Load Next Items When Bottom Is Reached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Next Data () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Next Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġemit ( Show Next Loading ) ĊĊĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Items Interactor . execute ( state . content . size ). unwrap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Ġ= Ġ{ Ġitems Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapped Items Ġ= Ġitems . map Ġ{ ĠItem Wrapper ( it , Ġfalse , Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Next Content ( wrapped Items )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Next Error ( error )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Item Favorite State ( item Wrapper : ĠItem Wrapper ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! item Wrapper . is Saving New Favorite State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Favorite Item Loading ( item Wrapper )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġitem Wrapper . item ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Favorite Item State Interactor . execute ( item , Ġ! item . is Favorite ). unwrap ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Value Ġ= Ġ{ Ġupdated Item Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Updated Item ( updated Item )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Show Favorite Item Error ( item Wrapper , Ġerror )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠInfinity Loading State . can Load Initial Data When View Is Started : ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent . isEmpty () Ġ&& Ġ! isLoading Ġ&& Ġerror Ġ== Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠInfinity Loading State . can Load Initial Data When Retry Is Clicked : ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontent . isEmpty () Ġ&& Ġ! isLoading Ġ&& Ġerror Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠInfinity Loading State . can Load Next Items When Retry Is Clicked : ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! isLoading Ġ&& Ġerror Ġ== Ġnull Ġ&& Ġ! next Items State . isLoading Ġ&& Ġnext Items State . error Ġ!= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠInfinity Loading State . can Load Next Items When Bottom Is Reached : ĠBoolean Ġget () Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ! isLoading Ġ&& Ġerror Ġ== Ġnull Ġ&& Ġ! next Items State . isLoading Ġ&& Ġnext Items State . error Ġ== Ġnull ĊĠĠĠ Ġ} Ċ }