mediaplayer out of view

This commit is contained in:
Rune Dyselinck 2023-04-28 13:38:17 +02:00
commit 46d60e100b
16 changed files with 326 additions and 271 deletions

View file

@ -3,19 +3,27 @@ package be.ugent.sel.studeez.data.local.models.timer_functional
class FunctionalCustomTimer(studyTime: Int) : FunctionalTimer(studyTime) {
override fun tick() {
if (time.time == 0) {
view = StudyState.DONE
} else {
if (!hasEnded()) {
time.minOne()
} else {
mediaPlayer?.setOnCompletionListener {
mediaPlayer!!.release()
mediaPlayer = null
}
mediaPlayer?.start()
}
}
override fun hasEnded(): Boolean {
return view == StudyState.DONE
}
override fun hasCurrentCountdownEnded(): Boolean {
return time.time == 0
}
override fun hasCurrentCountdownEnded(): Boolean {
return hasEnded()
}
override fun <T> accept(visitor: FunctionalTimerVisitor<T>): T {
return visitor.visitFunctionalCustomTimer(this)
}
}

View file

@ -1,6 +1,6 @@
package be.ugent.sel.studeez.data.local.models.timer_functional
class FunctionalEndlessTimer() : FunctionalTimer(0) {
class FunctionalEndlessTimer : FunctionalTimer(0) {
override fun hasEnded(): Boolean {
return false
@ -13,4 +13,8 @@ class FunctionalEndlessTimer() : FunctionalTimer(0) {
override fun tick() {
time.plusOne()
}
override fun <T> accept(visitor: FunctionalTimerVisitor<T>): T {
return visitor.visitFunctionalEndlessTimer(this)
}
}

View file

@ -9,18 +9,19 @@ class FunctionalPomodoroTimer(
var isInBreak = false
override fun tick() {
if (time.time == 0 && breaksRemaining == 0) {
view = StudyState.DONE
if (hasEnded()) {
mediaPlayer?.setOnCompletionListener {
mediaPlayer!!.release()
mediaPlayer = null
}
mediaPlayer?.start()
return
}
if (time.time == 0) {
} else if (hasCurrentCountdownEnded()) {
mediaPlayer?.start()
if (isInBreak) {
breaksRemaining--
view = StudyState.FOCUS_REMAINING
time.time = studyTime
} else {
view = StudyState.BREAK
time.time = breakTime
}
isInBreak = !isInBreak
@ -29,10 +30,18 @@ class FunctionalPomodoroTimer(
}
override fun hasEnded(): Boolean {
return breaksRemaining == 0 && time.time == 0
return !hasBreaksRemaining() && hasCurrentCountdownEnded()
}
private fun hasBreaksRemaining(): Boolean {
return breaksRemaining > 0
}
override fun hasCurrentCountdownEnded(): Boolean {
return time.time == 0
}
override fun <T> accept(visitor: FunctionalTimerVisitor<T>): T {
return visitor.visitFunctionalBreakTimer(this)
}
}

View file

@ -1,8 +1,10 @@
package be.ugent.sel.studeez.data.local.models.timer_functional
import android.media.MediaPlayer
abstract class FunctionalTimer(initialValue: Int) {
var time: Time = Time(initialValue)
var view: StudyState = StudyState.FOCUS
val time: Time = Time(initialValue)
var mediaPlayer: MediaPlayer? = null
fun getHoursMinutesSeconds(): HoursMinutesSeconds {
return time.getAsHMS()
@ -14,8 +16,5 @@ abstract class FunctionalTimer(initialValue: Int) {
abstract fun hasCurrentCountdownEnded(): Boolean
enum class StudyState {
FOCUS, DONE, BREAK, FOCUS_REMAINING
}
abstract fun <T> accept(visitor: FunctionalTimerVisitor<T>): T
}

View file

@ -0,0 +1,11 @@
package be.ugent.sel.studeez.data.local.models.timer_functional
interface FunctionalTimerVisitor<T> {
fun visitFunctionalCustomTimer(functionalCustomTimer: FunctionalCustomTimer): T
fun visitFunctionalEndlessTimer(functionalEndlessTimer: FunctionalEndlessTimer): T
fun visitFunctionalBreakTimer(functionalPomodoroTimer: FunctionalPomodoroTimer): T
}