diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt index 3421917c..3af7f77d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/helpers/Config.kt @@ -4,6 +4,7 @@ import android.content.Context import android.media.RingtoneManager import com.simplemobiletools.clock.extensions.gson.gson import com.simplemobiletools.clock.models.Alarm +import com.simplemobiletools.clock.models.ObfuscatedTimer import com.simplemobiletools.clock.models.Timer import com.simplemobiletools.commons.extensions.getDefaultAlarmSound import com.simplemobiletools.commons.extensions.getDefaultAlarmTitle @@ -70,10 +71,18 @@ class Config(context: Context) : BaseConfig(context) { set(alarm) = prefs.edit().putString(ALARM_LAST_CONFIG, gson.toJson(alarm)).apply() var timerLastConfig: Timer? - get() = prefs.getString(TIMER_LAST_CONFIG, null)?.let { lastAlarm -> - gson.fromJson(lastAlarm, Timer::class.java) + get() = prefs.getString(TIMER_LAST_CONFIG, null)?.let { lastTimer -> + try { + if (lastTimer.contains("\"b\"")) { + gson.fromJson(lastTimer, ObfuscatedTimer::class.java).toTimer() + } else { + gson.fromJson(lastTimer, Timer::class.java) + } + } catch (e: Exception) { + null + } } - set(alarm) = prefs.edit().putString(TIMER_LAST_CONFIG, gson.toJson(alarm)).apply() + set(timer) = prefs.edit().putString(TIMER_LAST_CONFIG, gson.toJson(timer)).apply() var timerChannelId: String? get() = prefs.getString(TIMER_CHANNEL_ID, null) diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt b/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt index 1a8df393..a1242342 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/models/Timer.kt @@ -1,9 +1,11 @@ package com.simplemobiletools.clock.models +import androidx.annotation.Keep import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "timers") +@Keep data class Timer( @PrimaryKey(autoGenerate = true) var id: Int?, var seconds: Int, @@ -16,3 +18,31 @@ data class Timer( var channelId: String? = null, var oneShot: Boolean = false ) + +@Keep +data class ObfuscatedTimer( + var a: Int?, + var b: Int, + // We ignore timer state and will just use idle + val c: Map, + var d: Boolean, + var e: String, + var f: String, + var g: String, + var h: Long, + var i: String? = null, + var j: Boolean = false +) { + fun toTimer(): Timer = Timer( + a, + b, + TimerState.Idle, + d, + e, + f, + g, + h, + i, + j + ) +} diff --git a/app/src/main/kotlin/com/simplemobiletools/clock/models/TimerState.kt b/app/src/main/kotlin/com/simplemobiletools/clock/models/TimerState.kt index ad8f3a6e..a8a5e9c8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/clock/models/TimerState.kt +++ b/app/src/main/kotlin/com/simplemobiletools/clock/models/TimerState.kt @@ -1,8 +1,15 @@ package com.simplemobiletools.clock.models +import androidx.annotation.Keep + +@Keep sealed class TimerState { + @Keep object Idle : TimerState() + @Keep data class Running(val duration: Long, val tick: Long) : TimerState() + @Keep data class Paused(val duration: Long, val tick: Long) : TimerState() + @Keep object Finished : TimerState() }