#40 timer info class and subclasses, used for display of a timer
This commit is contained in:
parent
66e68493e4
commit
0c183b9cc7
20 changed files with 210 additions and 27 deletions
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_functional
|
||||||
|
|
||||||
|
class FunctionalCustomTimer {
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_functional
|
||||||
|
|
||||||
|
class FunctionalEndlessTimer {
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_functional
|
||||||
|
|
||||||
|
class FunctionalPomodoroTimer {
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_functional
|
||||||
|
|
||||||
|
class FunctionalTimer {
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_functional
|
||||||
|
|
||||||
|
data class HoursMinutesSeconds()
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_functional
|
||||||
|
|
||||||
|
class Time {
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_info
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalPomodoroTimer
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer
|
||||||
|
|
||||||
|
class BreakTimerInfo(
|
||||||
|
name: String,
|
||||||
|
description: String,
|
||||||
|
private val studyTime: Int,
|
||||||
|
private val breakTime: Int,
|
||||||
|
private val repeats: Int,
|
||||||
|
id: String = ""
|
||||||
|
): TimerInfo(id, name, description) {
|
||||||
|
|
||||||
|
|
||||||
|
override fun getFunctionalTimer(): FunctionalTimer {
|
||||||
|
return FunctionalPomodoroTimer(studyTime, breakTime, repeats)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun asJson() : Map<String, Any> {
|
||||||
|
return mapOf(
|
||||||
|
"type" to "break",
|
||||||
|
"name" to name,
|
||||||
|
"description" to description,
|
||||||
|
"studyTime" to studyTime,
|
||||||
|
"breakTime" to breakTime,
|
||||||
|
"repeats" to repeats,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_info
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalCustomTimer
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer
|
||||||
|
|
||||||
|
class CustomTimerInfo(
|
||||||
|
name: String,
|
||||||
|
description: String,
|
||||||
|
private val studyTime: Int,
|
||||||
|
id: String = ""
|
||||||
|
): TimerInfo(id, name, description) {
|
||||||
|
|
||||||
|
|
||||||
|
override fun getFunctionalTimer(): FunctionalTimer {
|
||||||
|
return FunctionalCustomTimer(studyTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun asJson() : Map<String, Any> {
|
||||||
|
return mapOf(
|
||||||
|
"type" to "custom",
|
||||||
|
"name" to name,
|
||||||
|
"description" to description,
|
||||||
|
"studyTime" to studyTime,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,25 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_info
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalEndlessTimer
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer
|
||||||
|
|
||||||
|
class EndlessTimerInfo(
|
||||||
|
name: String,
|
||||||
|
description: String,
|
||||||
|
id: String = ""
|
||||||
|
): TimerInfo(id, name, description) {
|
||||||
|
|
||||||
|
|
||||||
|
override fun getFunctionalTimer(): FunctionalTimer {
|
||||||
|
return FunctionalEndlessTimer()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun asJson() : Map<String, Any> {
|
||||||
|
return mapOf(
|
||||||
|
"type" to "endless",
|
||||||
|
"name" to name,
|
||||||
|
"description" to description
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_info
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_functional.FunctionalTimer
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deze klasse stelt de de info van een timer weer. Elke timer heeft een id, naam en descriptie
|
||||||
|
*/
|
||||||
|
abstract class TimerInfo(
|
||||||
|
val id: String,
|
||||||
|
val name: String,
|
||||||
|
val description: String
|
||||||
|
) {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Geef de functionele timer terug die kan gebruikt worden tijden een sessie.
|
||||||
|
*/
|
||||||
|
abstract fun getFunctionalTimer(): FunctionalTimer
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Geef deze timer weer als json. Wordt gebruikt om terug op te slaan in de databank.
|
||||||
|
* TODO implementaties hebben nog hardgecodeerde strings.
|
||||||
|
*/
|
||||||
|
abstract fun asJson(): Map<String, Any>
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_info
|
||||||
|
|
||||||
|
import com.google.firebase.firestore.DocumentId
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Timers uit de databank (remote config en firestore) worden als eerste stap omgezet naar dit type.
|
||||||
|
*/
|
||||||
|
data class TimerJson(
|
||||||
|
val type: String = "",
|
||||||
|
val name: String = "",
|
||||||
|
val description: String = "",
|
||||||
|
val studyTime: Int = 0,
|
||||||
|
val breakTime: Int = 0,
|
||||||
|
val repeats: Int = 0,
|
||||||
|
@DocumentId val id: String = ""
|
||||||
|
)
|
|
@ -0,0 +1,7 @@
|
||||||
|
package be.ugent.sel.studeez.data.local.models.timer_info
|
||||||
|
|
||||||
|
enum class TimerType {
|
||||||
|
BREAK,
|
||||||
|
ENDLESS,
|
||||||
|
CUSTOM
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.domain
|
||||||
|
|
||||||
|
interface ConfigurationService {
|
||||||
|
}
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2022 Google LLC
|
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
you may not use this file except in compliance with the License.
|
|
||||||
You may obtain a copy of the License at
|
|
||||||
|
|
||||||
https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
|
|
||||||
Unless required by applicable law or agreed to in writing, software
|
|
||||||
distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
See the License for the specific language governing permissions and
|
|
||||||
limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package be.ugent.sel.studeez.domain
|
|
||||||
|
|
||||||
import com.google.firebase.perf.ktx.trace
|
|
||||||
import com.google.firebase.perf.metrics.Trace
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Trace a block with Firebase performance.
|
|
||||||
*
|
|
||||||
* Supports both suspend and regular methods.
|
|
||||||
*/
|
|
||||||
inline fun <T> trace(name: String, block: Trace.() -> T): T = Trace.create(name).trace(block)
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.domain
|
||||||
|
|
||||||
|
interface TimerDAO {
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.domain.implementation
|
||||||
|
|
||||||
|
class FirebaseConfigurationService {
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.domain.implementation
|
||||||
|
|
||||||
|
class FirebaseTimerDAO {
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
package be.ugent.sel.studeez.domain.implementation
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.timer_info.*
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.reflect.TypeToken
|
||||||
|
|
||||||
|
class JsonToTimerConverter {
|
||||||
|
|
||||||
|
private val timerInfoMap: Map<String, TimerFactory> = mapOf(
|
||||||
|
"endless" to TimerFactory { EndlessTimerInfo(it.name, it.description) },
|
||||||
|
"custom" to TimerFactory { CustomTimerInfo(it.name, it.description, it.studyTime) },
|
||||||
|
"break" to TimerFactory { PomodoroTimerInfo(
|
||||||
|
it.name,
|
||||||
|
it.description,
|
||||||
|
it.studyTime,
|
||||||
|
it.breakTime,
|
||||||
|
it.repeats
|
||||||
|
) }
|
||||||
|
)
|
||||||
|
|
||||||
|
private fun getTimer(timerJson: TimerJson): TimerInfo{
|
||||||
|
return timerInfoMap.getValue(timerJson.type).makeTimer(timerJson)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun convertToTimerInfoList(a: List<TimerJson>): List<TimerInfo> {
|
||||||
|
return a.map(this::getTimer)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun jsonToTimerJsonList(json: String): List<TimerJson> {
|
||||||
|
val type = object : TypeToken<List<TimerJson>>() {}.type
|
||||||
|
return Gson().fromJson(json, type)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_overview
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
package be.ugent.sel.studeez.screens.timer_overview
|
||||||
|
|
||||||
|
class TimerOverviewViewModel {
|
||||||
|
}
|
Reference in a new issue