package Ġcom . battle l ancer . series guide . ui Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . view pager 2 . adapter . Fragment State Adapter Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 Ċ import Ġcom . battle l ancer . series guide . util . Theme Utils . setDefault Style Ċ import Ġcom . uw et rott mann . series guide . widgets . Sl iding Tab Layout Ċ Ċ /** Ċ Ġ* ĠHelper Ġclass Ġfor Ġeasy Ġsetup Ġof Ġa Ġ{@ link ĠSl iding Tab Layout } Ġwith Ġa Ġmutable Ġset Ġof Ġtabs . Ċ Ġ* ĠRequires Ġthat Ġtabs Ġeach Ġhave Ġa Ġunique Ġtitle Ġstring Ġresource Ċ Ġ* Ġas Ġit Ġis Ġused Ġto Ġuniquely Ġidentify Ġa Ġtab . Ċ Ġ*/ Ċ open Ġclass ĠTab Strip Adapter ( ĊĠĠĠ Ġprivate Ġval Ġfragment Activity : ĠFragment Activity , ĊĠĠĠ Ġprivate Ġval Ġview Pager : ĠView Pager 2 , ĊĠĠĠ Ġprivate Ġval Ġtab Layout : ĠSl iding Tab Layout Ċ ) Ġ: ĠFragment State Adapter ( fragment Activity ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġtabs Ġ= ĠArrayList < Tab Info >() ĊĊĠĠĠ Ġprivate Ġval Ġtab Title Supplier Ġ= ĠSl iding Tab Layout . Tab Title Supplier Ġ{ Ġposition Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġtab Info Ġ= Ġtabs . get OrNull ( position ) ĊĠĠĠĠĠĠĠ Ġreturn @ Tab Title Supplier Ġif Ġ( tab Info Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab Layout . context . getString ( tab Info . title Res ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠPre load Ġnext / previous Ġpage Ġfor Ġsm oo ther Ġsw ip ing . ĊĠĠĠĠĠĠĠ Ġview Pager . off screen Page Limit Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġview Pager . adapter Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġtab Layout . setDefault Style () ĊĠĠĠĠĠĠĠ Ġtab Layout . set ViewPager 2 ( view Pager , Ġtab Title Supplier ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġnew Ġtab Ġat Ġthe Ġend . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMake Ġsure Ġto Ġcall Ġ[ notify Tabs Changed ] Ġafter Ġyou Ġhave Ġadded Ġthem Ġall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Tab (@ String Res Ġtitle Res : ĠInt , Ġfragment Class : ĠClass <* >, Ġargs : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġtabs . add ( tabs . size , ĠTab Info ( fragment Class , Ġargs , Ġtitle Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdds Ġa Ġnew Ġtab Ġat Ġthe Ġgiven Ġposition . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠMake Ġsure Ġto Ġcall Ġ[ notify Tabs Changed ] Ġafter Ġyou Ġhave Ġadded Ġthem Ġall . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd Tab (@ String Res Ġtitle Res : ĠInt , Ġfragment Class : ĠClass <* >, Ġargs : ĠBundle ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtabs . add ( position , ĠTab Info ( fragment Class , Ġargs , Ġtitle Res )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNot ifies Ġthe Ġadapter Ġand Ġtab Ġstrip Ġthat Ġthe Ġtabs Ġhave Ġchanged . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Notify DataSet Changed ") ĊĠĠĠ Ġfun Ġnotify Tabs Changed () Ġ{ ĊĠĠĠĠĠĠĠ Ġnotify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġtabs ĊĠĠĠĠĠĠĠ Ġtab Layout . set ViewPager 2 ( view Pager , Ġtab Title Supplier ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠUsing Ġtitle Res Ġinstead Ġof Ġintro ducing Ġan ĠID Ġproperty Ġas Ġit Ġis Ġunique Ġfor Ġtabs Ġof Ġthis Ġapp . ĊĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( position Ġ< Ġtabs . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtabs [ position ]. title Res . to Long () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView . NO _ ID ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains Item ( itemId : ĠLong ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġtabs . find Ġ{ Ġit . title Res . to Long () Ġ== ĠitemId Ġ} Ġ!= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ= Ġtabs . size ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Fragment ( position : ĠInt ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġtabs [ position ] ĊĠĠĠĠĠĠĠ Ġreturn Ġfragment Activity . support FragmentManager . fragment Factory . instantiate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Activity . class Loader , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab . fragment Class . name ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ Ġtab . args ?. let Ġ{ Ġarguments Ġ= Ġit Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTab Info ( ĊĠĠĠĠĠĠĠ Ġval Ġfragment Class : ĠClass <* >, ĊĠĠĠĠĠĠĠ Ġval Ġargs : ĠBundle ?, ĊĠĠĠĠĠĠĠ Ġval Ġtitle Res : ĠInt ĊĠĠĠ Ġ) Ċ }