package Ġorg . sil . story producer . controller . learn čĊč Ċ import Ġandroid . media . MediaPlayer č Ċ import Ġandroid . os . Bundle č Ċ import Ġcom . google . android . material . sn ackbar . Snackbar č Ċ import Ġandroidx . core . content . res . Resources Compat č Ċ import Ġandroid . view . View č Ċ import Ġandroid . widget .* č Ċ import Ġandroid . widget . Seek Bar . On Seek Bar ChangeListener č Ċ import Ġorg . sil . story producer . R č Ċ import Ġorg . sil . story producer . controller . phase . Phase Base Activity č Ċ import Ġorg . sil . story producer . model . SL IDE _ NUM č Ċ import Ġorg . sil . story producer . model . Slide Type č Ċ import Ġorg . sil . story producer . model . Story č Ċ import Ġorg . sil . story producer . model . Workspace č Ċ import Ġorg . sil . story producer . model . logging . save Learn Log č Ċ import Ġorg . sil . story producer . tools . file . get Story Uri č Ċ import Ġorg . sil . story producer . tools . file . story Rel Path Exists č Ċ import Ġorg . sil . story producer . tools . media . Audio Player č Ċ import Ġorg . sil . story producer . tools . media . Media Helper č Ċ import Ġorg . sil . story producer . tools . toolbar . Play Back Recording Toolbar č Ċ import Ġjava . util .* č Ċ import Ġkotlin . math . min čĊč Ċ class ĠLearn Activity Ġ: ĠPhase Base Activity (), ĠPlay Back Recording Toolbar . Toolbar Media Listener Ġ{ čĊĠĠĠ Ġprivate Ġvar Ġlearn ImageView : ĠImageView ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġplay Button : ĠImage Button ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġvideo Seek Bar : ĠSeek Bar ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġm Seek Bar Timer Ġ= ĠTimer () čĊčĊĠĠĠ Ġprivate Ġvar Ġn arr ation Player : ĠAudio Player Ġ= ĠAudio Player () čĊčĊĠĠĠ Ġprivate Ġvar Ġis Volume On Ġ= Ġtrue čĊĠĠĠ Ġprivate Ġvar Ġis W atched Once Ġ= Ġfalse čĊčĊĠĠĠ Ġprivate Ġvar Ġrecording Toolbar : ĠPlay Back Recording Toolbar Ġ= ĠPlay Back Recording Toolbar () čĊčĊĠĠĠ Ġprivate Ġvar ĠnumOf Slides : ĠInt Ġ= Ġ 0 čĊĠĠĠ Ġprivate Ġvar Ġseek bar StartTime : ĠLong Ġ= Ġ- 1 čĊĠĠĠ Ġprivate Ġvar Ġlog StartTime : ĠLong Ġ= Ġ- 1 čĊĠĠĠ Ġprivate Ġvar Ġcur Pos : ĠInt Ġ= Ġ- 1 Ġ// set Ġto Ġ- 1 Ġso Ġthat Ġthe Ġfirst Ġslide Ġwill Ġregister Ġas Ġ" different " čĊĠĠĠ Ġprivate Ġval Ġslide Dur ations : ĠMutable List < Int > Ġ= ĠArrayList () čĊĠĠĠ Ġprivate Ġval Ġslide Start Times : ĠMutable List < Int > Ġ= ĠArrayList () čĊčĊĠĠĠ Ġprivate Ġvar Ġis Logging Ġ= Ġfalse čĊĠĠĠ Ġprivate Ġvar Ġstart Pos Ġ= Ġ- 1 čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ learn ) čĊčĊĠĠĠĠĠĠĠ Ġset Toolbar () čĊčĊĠĠĠĠĠĠĠ Ġlearn ImageView Ġ= ĠfindViewById ( R . id . fragment _ image _ view ) čĊĠĠĠĠĠĠĠ Ġplay Button Ġ= ĠfindViewById ( R . id . fragment _ reference _ audio _ button ) čĊčĊĠĠĠĠĠĠĠ Ġ// setup Ġseek Ġbar Ġlist ent ers čĊĠĠĠĠĠĠĠ Ġvideo Seek Bar Ġ= ĠfindViewById ( R . id . video Seek Bar ) čĊĠĠĠĠĠĠĠ Ġvideo Seek Bar !!. setOn Seek Bar ChangeListener ( object Ġ: ĠOn Seek Bar ChangeListener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Stop Tracking Touch ( s Bar : ĠSeek Bar ) Ġ{} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonStart Tracking Touch ( s Bar : ĠSeek Bar ) Ġ{} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Progress Changed ( s Bar : ĠSeek Bar , Ġprogress : ĠInt , Ġfrom User : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( from User ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( recording Toolbar . is Recording Ġ|| Ġrecording Toolbar . is Audio Playing ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// When Ġrecording , Ġupdate Ġthe Ġpicture Ġto Ġthe Ġaccurate Ġlocation , Ġpre serving čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġseek bar StartTime Ġ= ĠSystem . currentTimeMillis () Ġ- Ġvideo Seek Bar !!. progress čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Slide From Seek bar () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( n arr ation Player . is Audio Playing ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Story Audio () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Story Audio () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Slide From Seek bar () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// always Ġstart Ġat Ġthe Ġbeginning Ġof Ġthe Ġslide . čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( slide Start Times . size Ġ> Ġcur Pos ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Seek Bar !!. progress Ġ= Ġslide Start Times [ cur Pos ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ Ġ// setup Ġvolume Ġswitch Ġcallbacks čĊĠĠĠĠĠĠĠ Ġval Ġvolume Switch Ġ= ĠfindViewById < Switch >( R . id . volume Switch ) čĊĠĠĠĠĠĠĠ Ġ// set Ġthe Ġvolume Ġswitch Ġchange Ġlistener čĊĠĠĠĠĠĠĠ Ġvolume Switch . isChecked Ġ= Ġtrue čĊĠĠĠĠĠĠĠ Ġvolume Switch . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Volume On Ġ= Ġif Ġ( isChecked ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn arr ation Player . set Volume ( 1 . 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn arr ation Player . set Volume ( 0 . 0 f ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġ// has Ġlearn Ġalready Ġbeen Ġw atched ? čĊĠĠĠĠĠĠĠ Ġis W atched Once Ġ= Ġstory Rel Path Exists ( this , Workspace . active Story . learn Audio File ) čĊčĊĠĠĠĠĠĠĠ Ġ// get Ġstory Ġaudio Ġduration čĊĠĠĠĠĠĠĠ ĠnumOf Slides Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġslide Start Times . add ( 0 ) čĊĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġstory . slides ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// don 't Ġplay Ġthe Ġcopyright Ġslides . čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . slide Type Ġin ĠarrayOf ( Slide Type . FRONT COVER , ĠSlide Type . NUMBER ED PAGE )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠnumOf Slides ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslide Dur ations . add (( Media Helper . get Audio Duration ( this , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Story Uri ( Story . get Filename ( s . n arr ation File )) !! ) Ġ/ Ġ 1 0 0 0 ). toInt ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġslide Start Times . add ( slide Start Times . last () Ġ+ Ġslide Dur ations . last ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġvideo Seek Bar ?. max Ġ= Ġslide Start Times . last () čĊčĊĠĠĠĠĠĠĠ Ġinvalidate Options Menu () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Pause () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Pause () čĊĠĠĠĠĠĠĠ Ġpause Story Audio () čĊĠĠĠĠĠĠĠ Ġn arr ation Player . release () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġpublic Ġoverride Ġfun Ġon Resume () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Resume () čĊčĊĠĠĠĠĠĠĠ Ġn arr ation Player Ġ= ĠAudio Player () čĊĠĠĠĠĠĠĠ Ġn arr ation Player . on Play Back Stop ( MediaPlayer . On Completion Listener Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( n arr ation Player . is Audio Prepared ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cur Pos Ġ>= ĠnumOf Slides - 1 ){ Ġ// is Ġit Ġthe Ġlast Ġslide ? čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// at Ġthe Ġend Ġof Ġvideo Ġso Ġspecial Ġcase čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Story Audio () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Start Pract ice Sn ackBar () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// just Ġplay Ġthe Ġnext Ġslide ! čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Seek Bar ?. progress Ġ= Ġslide Start Times [ cur Pos + 1 ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplay Story Audio () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ Ġm Seek Bar Timer Ġ= ĠTimer () čĊĠĠĠĠĠĠĠ Ġm Seek Bar Timer . schedule ( object Ġ: ĠTimer Task () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( recording Toolbar . is Recording Ġ|| Ġrecording Toolbar . is Audio Playing ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Seek Bar ?. progress Ġ= Ġmin (( System . currentTimeMillis () Ġ- Ġseek bar StartTime ). toInt (), video Seek Bar !!. max ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Slide From Seek bar () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( cur Pos Ġ>= Ġ 0 ) Ġvideo Seek Bar ?. progress Ġ= Ġslide Start Times [ cur Pos ] Ġ+ Ġn arr ation Player . current Position čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}, 0 , 3 3 ) čĊčĊĠĠĠĠĠĠĠ Ġset Slide From Seek bar () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġset Slide From Seek bar () Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġvideo Seek Bar !!. progress čĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġfor Ġ( d Ġin Ġslide Start Times ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġd ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( i - 1 Ġ!= Ġcur Pos ){ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcur Pos Ġ= Ġi - 1 čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Pic ( learn ImageView !! , Ġcur Pos ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġn arr ation Player . set Story Source ( this , ĠWorkspace . active Story . slides [ cur Pos ]. n arr ation File ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊčĊĠĠĠ Ġprivate Ġfun Ġset Toolbar (){ čĊĠĠĠĠĠĠĠ Ġval Ġbundle Ġ= ĠBundle () čĊĠĠĠĠĠĠĠ Ġbundle . put Int ( SL IDE _ NUM , Ġ 0 ) čĊĠĠĠĠĠĠĠ Ġrecording Toolbar . arguments Ġ= Ġbundle čĊĠĠĠĠĠĠĠ Ġsupport FragmentManager . beginTransaction (). replace ( R . id . toolbar _ for _ recording _ toolbar , Ġrecording Toolbar ). commit () čĊčĊĠĠĠĠĠĠĠ Ġrecording Toolbar . keep Toolbar Visible () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Stopped Toolbar Recording () Ġ{ čĊĠĠĠĠĠĠĠ Ġmake Log If Ne cessary ( true ) čĊčĊĠĠĠĠĠĠĠ Ġsuper . on Stopped Toolbar Recording () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Started Toolbar Recording () Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Started Toolbar Recording () čĊčĊĠĠĠĠĠĠĠ Ġmark Log Start () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Stopped Toolbar Media () Ġ{ čĊĠĠĠĠĠĠĠ Ġvideo Seek Bar !!. progress Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġset Slide From Seek bar () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Started Toolbar Media () Ġ{ čĊĠĠĠĠĠĠĠ Ġpause Story Audio () čĊĠĠĠĠĠĠĠ Ġvideo Seek Bar !!. progress Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġcur Pos Ġ= Ġ 0 čĊĠĠĠĠĠĠĠ Ġ// This Ġgets Ġthe Ġprogress Ġbar Ġto Ġshow Ġthe Ġright Ġtime . čĊĠĠĠĠĠĠĠ Ġseek bar StartTime Ġ= ĠSystem . currentTimeMillis () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġmark Log Start () Ġ{ čĊĠĠĠĠĠĠĠ Ġif (! is Logging ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Pos Ġ= Ġcur Pos čĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog StartTime Ġ= ĠSystem . currentTimeMillis () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġis Logging Ġ= Ġtrue čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġmake Log If Ne cessary ( is Recording : ĠBoolean Ġ= Ġfalse ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( is Logging ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( start Pos Ġ!= Ġ- 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration : ĠLong Ġ= ĠSystem . currentTimeMillis () Ġ- Ġlog StartTime čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( duration Ġ> Ġ 2 0 0 0 ){ Ġ// you Ġneed Ġ 2 Ġseconds Ġto Ġlisten Ġto Ġanything čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Learn Log ( this , Ġstart Pos , cur Pos , Ġduration , Ġis Recording ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Pos Ġ= Ġ- 1 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġis Logging Ġ= Ġfalse čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠButton Ġaction Ġfor Ġplaying / pa using Ġthe Ġaudio čĊĠĠĠĠ Ġ* Ġ@ param Ġview Ġbutton Ġto Ġset Ġlisteners Ġfor čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun ĠonClick Play Pause Button (@ Suppress (" UNUSED _ PARAMETER ") Ġview : ĠView ) Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( n arr ation Player . is Audio Playing ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpause Story Audio () čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( video Seek Bar !!. progress Ġ>= Ġvideo Seek Bar !!. max - 1 0 0 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// reset Ġthe Ġvideo Ġto Ġthe Ġbeginning Ġbecause Ġthey Ġalready Ġfinished Ġit Ġ( within Ġ 1 0 0 Ġms ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Seek Bar !!. progress Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġplay Story Audio () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠPlay s Ġthe Ġaudio čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġinternal Ġfun Ġplay Story Audio () Ġ{ čĊĠĠĠĠĠĠĠ Ġrecording Toolbar . stop Toolbar Media () čĊĠĠĠĠĠĠĠ Ġset Slide From Seek bar () čĊĠĠĠĠĠĠĠ Ġn arr ation Player . pause Audio () čĊĠĠĠĠĠĠĠ Ġmark Log Start () čĊĠĠĠĠĠĠĠ Ġseek bar StartTime Ġ= ĠSystem . currentTimeMillis () čĊĠĠĠĠĠĠĠ Ġn arr ation Player . set Volume ( if Ġ( is Volume On ) Ġ 1 . 0 f Ġelse Ġ 0 . 0 f ) Ġ// set Ġthe Ġvolume Ġon Ġor Ġoff Ġbased Ġon Ġthe Ġboolean čĊĠĠĠĠĠĠĠ Ġn arr ation Player . play Audio () čĊĠĠĠĠĠĠĠ Ġplay Button !!. setImage Resource ( R . drawable . ic _ pause _ white _ 4 8 dp ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* Ġhelper Ġfunction Ġfor Ġpa using Ġthe Ġvideo čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġpause Story Audio () Ġ{ čĊĠĠĠĠĠĠĠ Ġmake Log If Ne cessary () čĊĠĠĠĠĠĠĠ Ġn arr ation Player . pause Audio () čĊĠĠĠĠĠĠĠ Ġplay Button !!. setImage Resource ( R . drawable . ic _ play _ arrow _ white _ 4 8 dp ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠShows Ġa Ġsn ackbar Ġat Ġthe Ġbottom Ġof Ġthe Ġscreen Ġto Ġnotify Ġthe Ġuser Ġthat Ġthey Ġshould Ġpractice Ġsaying Ġthe Ġstory čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprivate Ġfun Ġshow Start Pract ice Sn ackBar () Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ(! is W atched Once ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackbar Ġ= ĠSn ackbar . make ( findViewById ( R . id . drawer _ layout ), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . learn _ phase _ practice , ĠSn ackbar . LENGTH _ LONG ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsn ackBar View Ġ= Ġsn ackbar . view čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackBar View . set BackgroundColor ( Resources Compat . getColor ( resources , ĠR . color . light White , Ġnull )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠtextView Ġ= Ġsn ackBar View . findViewById < TextView >( R . id . sn ackbar _ text ) čĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . setTextColor ( Resources Compat . getColor ( resources , ĠR . color . dark Gray , Ġnull )) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsn ackbar . show () čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġis W atched Once Ġ= Ġtrue čĊĠĠĠ Ġ} č Ċ } čĊ