Skip to content

Commit d0b448e

Browse files
committed
Fix #24: Caffeine state sync and original timeout bugs
- Removed redundant `ContentObserver` to prevent unnecessary background wake-ups - Fixed original timeout capture using `contains(PREF_KEY_ORIGINAL)` to respect user defaults - Applied synchronous `commit = true` to prevent SharedPreferences race conditions - Updated `forceReset()` to `clear()` all preferences for proper state cleanup Thanks Claude :)
1 parent 59c1afb commit d0b448e

1 file changed

Lines changed: 7 additions & 18 deletions

File tree

app/src/main/java/com/wstxda/toolkit/manager/caffeine/CaffeineManager.kt

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class CaffeineManager(context: Context) {
2323
private const val PREF_NAME = "caffeine_prefs"
2424
private const val PREF_KEY_ORIGINAL = "original_timeout"
2525
private const val PREF_KEY_EXPECTED = "expected_timeout"
26-
private const val DEFAULT_TIMEOUT = 60000
26+
private const val DEFAULT_TIMEOUT = 60_000
2727
}
2828

2929
private val appContext = context.applicationContext
@@ -50,12 +50,6 @@ class CaffeineManager(context: Context) {
5050
}
5151
}
5252

53-
private val settingsObserver = object : android.database.ContentObserver(null) {
54-
override fun onChange(selfChange: Boolean) {
55-
synchronizeState()
56-
}
57-
}
58-
5953
fun synchronizeState() {
6054
managerScope.launch {
6155
val prefs = getPrefs()
@@ -97,10 +91,12 @@ class CaffeineManager(context: Context) {
9791
if (newState == CaffeineState.Off) {
9892
restoreOriginalTimeout()
9993
} else {
100-
if (stateCycle.indexOf(newState) == 1) saveOriginalTimeout()
94+
if (!getPrefs().contains(PREF_KEY_ORIGINAL)) {
95+
saveOriginalTimeout()
96+
}
10197

10298
if (setSystemTimeout(newState.timeout)) {
103-
getPrefs().edit { putInt(PREF_KEY_EXPECTED, newState.timeout) }
99+
getPrefs().edit(commit = true) { putInt(PREF_KEY_EXPECTED, newState.timeout) }
104100
toggleReceiver(true)
105101
} else {
106102
forceReset()
@@ -111,8 +107,7 @@ class CaffeineManager(context: Context) {
111107

112108
private fun saveOriginalTimeout() {
113109
val current = getSystemTimeout()
114-
if (stateCycle.any { it.timeout == current && it != CaffeineState.Off }) return
115-
getPrefs().edit { putInt(PREF_KEY_ORIGINAL, current) }
110+
getPrefs().edit(commit = true) { putInt(PREF_KEY_ORIGINAL, current) }
116111
}
117112

118113
private fun restoreOriginalTimeout() {
@@ -123,7 +118,7 @@ class CaffeineManager(context: Context) {
123118

124119
private fun forceReset() {
125120
_currentState.value = CaffeineState.Off
126-
getPrefs().edit { remove(PREF_KEY_EXPECTED) }
121+
getPrefs().edit { clear() }
127122
toggleReceiver(false)
128123
requestTileUpdate()
129124
}
@@ -133,16 +128,10 @@ class CaffeineManager(context: Context) {
133128
appContext.registerReceiver(
134129
screenOffReceiver, IntentFilter(Intent.ACTION_SCREEN_OFF)
135130
)
136-
appContext.contentResolver.registerContentObserver(
137-
Settings.System.getUriFor(Settings.System.SCREEN_OFF_TIMEOUT),
138-
false,
139-
settingsObserver
140-
)
141131
isReceiverRegistered = true
142132
} else if (!enable && isReceiverRegistered) {
143133
try {
144134
appContext.unregisterReceiver(screenOffReceiver)
145-
appContext.contentResolver.unregisterContentObserver(settingsObserver)
146135
} catch (_: IllegalArgumentException) {
147136
}
148137
isReceiverRegistered = false

0 commit comments

Comments
 (0)