package Ġcom . example . android . a 7 min ut ew ork out . activities Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Intent Ċ import Ġandroid . media . MediaPlayer Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Count Down Timer Ċ import Ġandroid . speech . tts . Text ToS peech Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . example . android . a 7 min ut ew ork out . R Ċ import Ġkotlinx . android . synt hetic . main . activity _ exercise .* Ċ import Ġkotlinx . android . synt hetic . main . custom _ dialog ue .* Ċ import Ġjava . lang . Exception Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠExercise Activity Ġ: ĠAppCompatActivity () Ġ, ĠText ToS peech . OnInit Listener Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġrest Timer : ĠCount Down Timer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġrest Progress Ġ= Ġ 1 ĊĊĠĠĠ Ġprivate Ġvar Ġexercise Timer : ĠCount Down Timer ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġexercise Progress Ġ= Ġ 1 ĊĊĊĠĠĠ Ġprivate Ġvar Ġexercise List : ĠArrayList < Exercise Model >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Exercise Position Ġ= Ġ- 1 ĊĊĠĠĠ Ġprivate Ġvar Ġt ts : ĠText ToS peech ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġplayer : ĠMedia Player ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġexercise Adapter : ĠExercise Status Adapter ? Ġ= Ġnull ĊĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ exercise ) ĊĊĠĠĠĠĠĠĠ Ġwindow . set Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ FULL SCREEN , ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar _ exercise _ activity ) ĊĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠ Ġtoolbar _ exercise _ activity . set Navigation OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Dialog For Back Button () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġt ts Ġ= ĠText ToS peech ( this , this ) ĊĊĊĠĠĠĠĠĠĠ Ġexercise List Ġ= ĠConstants . default Exercise List () ĊĠĠĠĠĠĠĠ Ġsetup Rest View () ĊĊĠĠĠĠĠĠĠĠĠ Ġsetup Exercise Status () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( rest Timer != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest Timer !!. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrest Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( exercise Timer != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Timer !!. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( tts != Ġnull ){ ĊĠĠĠĠĠĠĠĠĠ Ġt ts !!. stop () ĊĠĠĠĠĠĠĠĠĠ Ġt ts !!. shutdown () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( player != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer !!. stop () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Rest ProgressBar (){ ĊĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġrest Progress ĊĠĠĠĠĠĠĠ Ġrest Timer Ġ= Ġobject : ĠCount Down Timer ( 1 1 0 0 0 , 1 0 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrest Progress ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprogressBar . progress Ġ= Ġ 1 1 - rest Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Timer . text Ġ= Ġ( 1 1 - rest Progress ). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Exercise Position ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise List ! ![ current Exercise Position ]. setIs Selected ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise List ! ![ current Exercise Position ]. setIs Completed ( false ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Adapter !!. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Exercise View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Exercise ProgressBar (){ ĊĠĠĠĠĠĠĠ Ġtv Exercise ProgressBar . progress Ġ= Ġexercise Progress ĊĠĠĠĠĠĠĠ Ġexercise Timer Ġ= Ġobject : ĠCount Down Timer ( 3 1 0 0 0 , 1 0 0 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tick ( millis Until Finished : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Progress ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Exercise ProgressBar . progress Ġ= Ġ 3 1 - exercise Progress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Exercise Timer . text Ġ= Ġ( 3 1 - exercise Progress ). toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Finish () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( current Exercise Position Ġ< Ġexercise List !!. size Ġ- 1 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise List ! ![ current Exercise Position ]. setIs Selected ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise List ! ![ current Exercise Position ]. setIs Completed ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Adapter !!. notify DataSet Changed () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Rest View () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Exercise Activity , ĠFinish Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġsetup Exercise View (){ ĊĠĠĠĠĠĠĠĠ Ġll Rest View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġll Exercise View . visibility Ġ Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġif ( exercise Timer Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Timer !!. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexercise Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġspeak Out ( exercise List ! ![ current Exercise Position ]. getName ()) ĊĠĠĠĠĠĠĠ Ġset Exercise ProgressBar () ĊĊĠĠĠĠĠĠĠ Ġtv ImageView . setImage Resource ( exercise List ! ![ current Exercise Position ]. getImage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ()) ĊĠĠĠĠĠĠĠ Ġtv _ exercise _ name . text Ġ= Ġexercise List ! ![ current Exercise Position ]. getName () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Rest View (){ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Ġ= ĠMedia Player . create ( application Context , ĠR . raw . audio ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer !!. is Loop ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer !!. start () ĊĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġll Rest View . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġll Exercise View . visibility Ġ= ĠView . GONE ĊĊĊ ĊĠĠĠĠĠĠĠĠĠĠ Ġif ( rest Timer Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrest Timer !!. cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrest Progress Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠ Ġset Rest ProgressBar () ĊĊĠĠĠĠĠĠĠ Ġtv Up coming Exercise Name . text Ġ= Ġexercise List ! ![ current Exercise Position + 1 ]. getName () ĊĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Init ( status : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġif ( status Ġ== ĠText ToS peech . SUCCESS ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġt ts !!. set Language ( Locale . US ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( result Ġ== ĠText ToS peech . LANG _ MISSING _ DATA Ġ|| Ġresult Ġ== ĠText ToS peech . LANG _ NOT _ SUPPORTED ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" TT S "," The ĠLanguage ĠSpec ified Ġis Ġnot ĠSupported ") ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" TT S "," Initialization ĠFailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠ Ġprivate Ġfun Ġspeak Out ( text : ĠString ){ ĊĠĠĠĠĠĠĠ Ġt ts !!. speak ( text , Text ToS peech . QUEUE _ FLUSH , null ," ") ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Exercise Status (){ ĊĠĠĠĠĠĠĠ Ġrv Exercise Status . layout Manager Ġ= ĠLinearLayoutManager ( this , Linear LayoutManager . HORIZONTAL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġexercise Adapter Ġ= ĠExercise Status Adapter ( exercise List !! , this ) ĊĠĠĠĠĠĠĠ Ġrv Exercise Status . adapter Ġ= Ġexercise Adapter ĊĊĠĠĠ Ġ} ĊĊĠĠĠĠ Ġprivate Ġfun Ġcustom Dialog For Back Button (){ ĊĠĠĠĠĠĠĠĠ Ġval Ġcustom Dialog Ġ= ĠDialog ( this ) ĊĠĠĠĠĠĠĠĠ Ġcustom Dialog . set ContentView ( R . layout . custom _ dialog ue ) ĊĊĠĠĠĠĠĠĠĠ Ġcustom Dialog . tv _ YES . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Dialog . dismiss () ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġcustom Dialog . tv _ No . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġcustom Dialog . dismiss () ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġcustom Dialog . show () ĊĠĠĠĠ Ġ} Ċ Ċ } ĊĊĊ