package Ġbe . digital ia . fos dem . fragments Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . lifecycle . Lifecycle Event Observer Ċ import Ġandroidx . lifecycle . observe Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . adapter . Fragment State Adapter Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġbe . digital ia . fos dem . R Ċ import Ġbe . digital ia . fos dem . db . App Database Ċ import Ġbe . digital ia . fos dem . model . Day Ċ import Ġbe . digital ia . fos dem . utils . enforce Single Scroll Direction Ċ import Ġbe . digital ia . fos dem . utils . re cyclerView Ċ import Ġbe . digital ia . fos dem . utils . view Lifecycle Lazy Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator Ċ import Ġcom . google . android . material . tabs . Tab Layout Mediator . Tab Configuration Strategy Ċ Ċ class ĠTrack s Fragment Ġ: ĠFragment ( R . layout . fragment _ tracks ), ĠRe cyc led View Pool Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġclass ĠViewHolder ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent View : ĠView Ġ= Ġview . findViewById ( R . id . content ) ĊĠĠĠĠĠĠĠ Ġval Ġempty View : ĠView Ġ= Ġview . findViewById ( android . R . id . empty ) ĊĠĠĠĠĠĠĠ Ġval Ġpager : ĠView Pager 2 Ġ= Ġview . findViewById ( R . id . pager ) ĊĠĠĠĠĠĠĠ Ġval Ġtabs : ĠTab Layout Ġ= Ġview . findViewById ( R . id . tabs ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġholder Ġ= ĠViewHolder ( view ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpager . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Page Limit Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . enforce Single Scroll Direction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdays Adapter Ġ= ĠDays Adapter ( this ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġsaved Current Page Ġ= Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRestore Ġthe Ġcurrent Ġpage Ġfrom Ġpreferences ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). get Preferences ( Context . MODE _ PRIVATE ). getInt ( PRE F _ CURRENT _ PAGE , Ġ- 1 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ- 1 ĊĊĠĠĠĠĠĠĠ ĠApp Database . getInstance ( require Context ()). schedule Dao . days . observe ( view Lifecycle Owner ) Ġ{ Ġdays Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġholder . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdays Adapter . days Ġ= Ġdays ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Pages Ġ= Ġdays Adapter . item Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( total Pages Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent View . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty View . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent View . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty View . isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pager . adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpager . adapter Ġ= Ġdays Adapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTab Layout Mediator ( tabs , Ġpager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTab Configuration Strategy Ġ{ Ġtab , Ġposition Ġ-> Ġtab . text Ġ= Ġdays Adapter . getPage Title ( position ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). attach () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( saved Current Page Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpager . setCurrent Item ( saved Current Page . coerce At Most ( total Pages Ġ- Ġ 1 ), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsaved Current Page Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġview Lifecycle Owner . lifecycle . add Observer ( Lifecycle Event Observer Ġ{ Ġsource , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== ĠLifecycle . Event . ON _ STOP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSave Ġthe Ġcurrent Ġpage Ġto Ġpreferences Ġif Ġit Ġhas Ġchanged ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpage Ġ= Ġholder . pager . currentItem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= Ġrequire Activity (). get Preferences ( Context . MODE _ PRIVATE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prefs . getInt ( PRE F _ CURRENT _ PAGE , Ġ- 1 ) Ġ!= Ġpage ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprefs . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Int ( PRE F _ CURRENT _ PAGE , Ġpage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġre cyc led View Pool Ġby Ġview Lifecycle Lazy Ġ{ ĊĠĠĠĠĠĠĠ ĠRecyclerView . Re cyc led View Pool () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠDays Adapter ( fragment : ĠFragment ) ĊĠĠĠĠĠĠĠ Ġ: ĠFragment State Adapter ( fragment . child FragmentManager , Ġfragment . view Lifecycle Owner . lifecycle ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġdays : ĠList < Day > Ġ= Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( field Ġ!= Ġvalue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count () Ġ= Ġdays . size ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ) Ġ= Ġdays [ position ]. index . to Long () ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains Item ( itemId : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdays . any Ġ{ Ġit . index . to Long () Ġ== ĠitemId Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Fragment ( position : ĠInt ) Ġ= ĠTrack s List Fragment . newInstance ( days [ position ]) ĊĊĠĠĠĠĠĠĠ Ġfun Ġget Page Title ( position : ĠInt ) Ġ= Ġdays [ position ]. toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠP REF _ CURRENT _ PAGE Ġ= Ġ" tracks _ current _ page " ĊĠĠĠ Ġ} Ċ }