Skip to content

Commit 63f9b89

Browse files
committed
Add observer for screen timeout settings to fix tile status
On HyperOS/MIUI, opening display settings while caffeine is set to "Infinite" causes the system to reset the timeout to a last valid value. The synchronization logic was updated to detect this mismatch and properly restore the original user value instead of just resetting the internal tile state.
1 parent f2c71a4 commit 63f9b89

File tree

1 file changed

+12
-0
lines changed

1 file changed

+12
-0
lines changed

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@ 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+
5359
fun synchronizeState() {
5460
managerScope.launch {
5561
val prefs = getPrefs()
@@ -138,10 +144,16 @@ class CaffeineManager(context: Context) {
138144
appContext.registerReceiver(
139145
screenOffReceiver, IntentFilter(Intent.ACTION_SCREEN_OFF)
140146
)
147+
appContext.contentResolver.registerContentObserver(
148+
Settings.System.getUriFor(Settings.System.SCREEN_OFF_TIMEOUT),
149+
false,
150+
settingsObserver
151+
)
141152
isReceiverRegistered = true
142153
} else if (!enable && isReceiverRegistered) {
143154
try {
144155
appContext.unregisterReceiver(screenOffReceiver)
156+
appContext.contentResolver.unregisterContentObserver(settingsObserver)
145157
} catch (_: IllegalArgumentException) {
146158
}
147159
isReceiverRegistered = false

0 commit comments

Comments
 (0)