package Ġcom . fro go box . board . mv vm . main Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . fro go box . board . R Ċ import Ġandroidx . view pager . widget . ViewPager . On Page ChangeListener Ċ import Ġcom . fro go box . board . util . Single Const Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . content . Intent Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroid . text . Html Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . core . app . Task Stack Builder Ċ import Ġcom . fro go box . board . core . Base Binding Activity Ċ import Ġcom . fro go box . board . databinding . Activity Main Binding Ċ import Ġcom . fro go box . board . mv vm . game . Game Activity Ċ import Ġcom . fro go box . board . mv vm . setting . Setting Activity Ċ import Ġcom . fro go box . board . mv vm . stats . Stats Activity Ċ import Ġjava . lang . Exception Ċ Ċ class ĠMainActivity Ġ: ĠBase Binding Activity < Activity Main Binding >() Ġ{ ĊĊĠĠĠ Ġprivate Ġvar ĠcurrentPage Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġeditor : ĠSharedPreferences . Editor ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġlayouts Ġ= Ġint ArrayOf ( ĊĠĠĠĠĠĠĠ ĠR . layout . fragment _ games _ box , ĊĠĠĠĠĠĠĠ ĠR . layout . fragment _ games _ box , ĊĠĠĠĠĠĠĠ ĠR . layout . fragment _ games _ box , ĊĠĠĠĠĠĠĠ ĠR . layout . fragment _ games _ box ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġgame Resume able Ġ= Ġboolean ArrayOf ( ĊĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġfalse , ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ) ĊĊĊĠĠĠ Ġoverride Ġfun Ġsetup View Binding (): ĠActivity Main Binding Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup ViewModel () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup UI ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . tool bars . toolbar Main ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġfiles Dir ĊĠĠĠĠĠĠĠ Ġval Ġfiles Ġ= Ġdirectory . list Files () ĊĠĠĠĠĠĠĠ Ġif Ġ( files Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( file Ġin Ġfiles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" files ", Ġfile . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġgame Resume able . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . name Ġ== ĠSingle Const . Const . FILE _ STATE Ġ+ Ġ( j Ġ+ Ġ 4 ) Ġ+ ĠSingle Const . Ext . TXT ) Ġgame Resume able [ j ] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġadd Bottom Dot s ( 0 ) ĊĠĠĠĠĠĠĠ Ġsetup ViewPager () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ toolbar _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . toolbar _ menu _ setting Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠSetting Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Show Ads Inter stitial () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . toolbar _ menu _ stats Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠStats Activity :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Show Ads Inter stitial () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġval Ġpreferences Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context . get SharedPreferences ( Single Const . Pref . PRE F _ MY , ĠMODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ Ġeditor Ġ= Ġpreferences . edit () ĊĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġpreferences . getInt ( Single Const . Pref . PRE F _ CURRENT _ PAGE , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . currentItem Ġ= ĠcurrentPage ĊĠĠĠĠĠĠĠ Ġupdate Buttons ( currentPage ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup ViewPager () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġlayout Inflater Ġ= Ġget System Service ( LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠ Ġval Ġmain Pager Ġ= ĠMain Pager ( layout Inflater , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġbinding . view Pager . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġmain Pager ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd On Page ChangeListener ( object Ġ: ĠOn Page ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Bottom Dot s ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcurrentPage Ġ= Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor !!. put Int ( Single Const . Pref . PRE F _ CURRENT _ PAGE , ĠcurrentPage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor !!. commit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Buttons ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Sc rolled ( arg 0 : ĠInt , Ġarg 1 : ĠFloat , Ġarg 2 : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Scroll StateChanged ( arg 0 : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Listener ( b 1 : ĠButton , Ġb 2 : ĠButton , Ġn : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġb 1 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ MainActivity , ĠGame Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ N , Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ POINTS , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ NEW , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Const . Extra . EXTRA _ FILENAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Const . Const . FILE _ STATE Ġ+ Ġn Ġ+ ĠSingle Const . Ext . TXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ UN DO , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Back Stack ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Show Ads Inter stitial () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġb 2 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ MainActivity , ĠGame Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ N , Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ NEW , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Const . Extra . EXTRA _ FILENAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSingle Const . Const . FILE _ STATE Ġ+ Ġn Ġ+ ĠSingle Const . Ext . TXT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Single Const . Extra . EXTRA _ UN DO , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Back Stack ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Show Ads Inter stitial () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Back Stack ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠTask Stack Builder . create ( this ) ĊĠĠĠĠĠĠĠ Ġbuilder . add Next Intent With Parent Stack ( intent ) ĊĠĠĠĠĠĠĠ Ġbuilder . start Activities () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Bottom Dot s ( currentPage : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdots Ġ= ĠarrayOf Null s < TextView >( layouts . size ) ĊĠĠĠĠĠĠĠ Ġval Ġactive Color Ġ= ĠContext Compat . getColor ( this , ĠR . color . color Primary ) ĊĠĠĠĠĠĠĠ Ġval Ġinactive Color Ġ= ĠContext Compat . getColor ( this , ĠR . color . color Primary Dark ) ĊĠĠĠĠĠĠĠ Ġbinding . apply Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġdots Layout . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdots . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots [ i ] Ġ= ĠTextView ( this @ MainActivity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots [ i ] !!. text Ġ= ĠHtml . from Html (" &# 8 2 2 6 ; ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots [ i ] !!. text Size Ġ= Ġ 3 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots [ i ] !!. setTextColor ( inactive Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdots Layout . addView ( dots [ i ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dots . isNotEmpty ()) Ġdots [ currentPage ] !!. setTextColor ( active Color ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġupdate Buttons ( position : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Game Button Ġ= ĠfindViewById < Button >( R . id . button _ new Game ) ĊĠĠĠĠĠĠĠ Ġval Ġcontinue Button Ġ= ĠfindViewById < Button >( R . id . button _ continue Game ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game Resume able [ position ]) Ġcontinue Button . setBackground Resource ( R . drawable . background _ button _ active ) Ġelse Ġcontinue Button . setBackground Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . back gr or und _ button _ non _ active ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue Button . isEnabled Ġ= Ġgame Resume able [ position ] ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( a ie : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġa ie . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġadd Listener ( new Game Button , Ġcontinue Button , Ġposition Ġ+ Ġ 4 ) ĊĠĠĠ Ġ} Ċ Ċ }