package Ġcom . core . app . lifecycle . activity Ċ Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . Fragment State Pager Adapter Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . On Lifecycle Event Ċ import Ġandroidx . view pager . widget . ViewPager Ċ import Ġcom . core . app . injector . scope . Per Activity Ċ import Ġcom . core . app . lifecycle . Base Activity Lifecycle Ċ import Ġjavax . inject . Inject Ċ Ċ @ Per Activity Ċ class ĠFragment State Pager Activity Lifecycle < TF ragment Ġ: ĠFragment > Ġ@ Inject Ġinternal Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġactivity : ĠAppCompatActivity Ċ ) Ġ: ĠBase Activity Lifecycle ( activity ) Ġ{ ĊĊĠĠĠ Ġinterface ĠCallback < TF ragment > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfragment Count : ĠInt ĊĊĠĠĠĠĠĠĠ Ġfun ĠonCreate ViewPager (): ĠView Pager ĊĊĠĠĠĠĠĠĠ Ġfun Ġon ViewPager Created ( view Pager : ĠView Pager ) ĊĊĠĠĠĠĠĠĠ Ġfun ĠonCreate Fragment ( position : ĠInt ): ĠT Fragment ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Title ( position : ĠInt ): ĠString ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Fragment Loaded ( position : ĠInt , Ġfragment : ĠT Fragment ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Sc rolled ( position : ĠInt ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Selected ( position : ĠInt ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcallback : ĠCallback < TF ragment > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview Pager : ĠView Pager ĊĠĠĠ Ġprivate Ġvar Ġadapter : ĠFragment State Pager Interceptor Adapter ? Ġ= Ġnull ĊĊĠĠĠ Ġval Ġnum Pages : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġadapter ?. count Ġ?: Ġ 0 ĊĊĠĠĠ Ġval ĠcurrentPage : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġview Pager . currentItem ĊĊĠĠĠ Ġval Ġis First Page : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠcurrentPage Ġ== Ġ 0 ĊĊĠĠĠ Ġval Ġis Last Page : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠcurrentPage Ġ== Ġnum Pages Ġ- Ġ 1 ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġlifecycle - aware Ġcomponents , Ġno Ġneed Ġto Ġunsubscribe / remove Ġob servers . ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġcallback Ġ= Ġactivity Ġas ĠCallback < TF ragment > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Page ( page : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= Ġpage ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠsetCurrent Page ( page : ĠInt , Ġsmooth Scroll : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager . setCurrent Item ( page , Ġsmooth Scroll ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnext Page (): ĠBoolean Ġ= Ġif Ġ( is Last Page ) Ġfalse Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= ĠcurrentPage Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprevious Page (): ĠBoolean Ġ= Ġif Ġ( is First Page ) Ġfalse Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager . currentItem Ġ= ĠcurrentPage Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ On Lifecycle Event ( Lifecycle . Event . ON _ CREATE ) ĊĠĠĠ Ġprivate Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Pager Ġ= Ġcallback . onCreate ViewPager (). let Ġ{ Ġview Pager Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ? ĠAppCompatActivity )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠFragment State Pager Interceptor Adapter ( activity . support FragmentManager ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager . add On Page ChangeListener ( object Ġ: ĠView Pager . On Page ChangeListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( position : ĠInt , Ġposition Offset : ĠFloat , Ġposition Offset Pixels : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Page Sc rolled ( position , Ġposition Offset , Ġposition Offset Pixels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( position Offset Ġ!= Ġ 0 . 0 f Ġ|| Ġposition Offset Pixels Ġ!= Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Page Sc rolled ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Page Selected ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( state : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Page Scroll StateChanged ( state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on ViewPager Created ( view Pager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Pager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠFragment State Pager Interceptor Adapter Ġinternal Ġconstructor ( fragment Manager : ĠFragment Manager ) Ġ: ĠFragment State Pager Adapter ( fragment Manager ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem ( position : ĠInt ): ĠT Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcallback . onCreate Fragment ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Count (): ĠInt Ġ= Ġcallback . fragment Count ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinstantiate Item ( container : ĠViewGroup , Ġposition : ĠInt ): ĠT Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfragment Ġ= Ġsuper . instantiate Item ( container , Ġposition ) Ġas ĠT Fragment ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Fragment Loaded ( position , Ġfragment ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfragment ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Page Title ( position : ĠInt ): ĠCharSequence ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcallback . on Page Title ( position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }