update + Fix

This commit is contained in:
Johnny committed 2026-07-03 07:56:33 +02:00
1 parent 202ee1cc58
commit a84c22f04b
4 files changed
+69 -9

No files matched your search

@@ -17,7 +17,10 @@ data class AppSettings(
val whitelistedPackages: Set<String> = emptySet(),
val showSystemApps: Boolean = false,
val passwordHash: String? = null,
val passwordSalt: String? = null
val passwordSalt: String? = null,
val cutoffCycleAnchorMillis: Long? = null,
val cutoffInPulse: Boolean = false,
val cutoffPulseStartMillis: Long = 0L
) {
val planStartDate: LocalDate get() = LocalDate.ofEpochDay(planStartDateEpochDay)
@@ -36,6 +36,9 @@ class SettingsRepository @Inject constructor(
val SHOW_SYSTEM_APPS = booleanPreferencesKey("show_system_apps")
val PASSWORD_HASH = stringPreferencesKey("password_hash")
val PASSWORD_SALT = stringPreferencesKey("password_salt")
val CUTOFF_ANCHOR_MILLIS = longPreferencesKey("cutoff_anchor_millis")
val CUTOFF_IN_PULSE = booleanPreferencesKey("cutoff_in_pulse")
val CUTOFF_PULSE_START_MILLIS = longPreferencesKey("cutoff_pulse_start_millis")
}
val settingsFlow: Flow<AppSettings> = context.dataStore.data.map { prefs ->
@@ -52,7 +55,10 @@ class SettingsRepository @Inject constructor(
whitelistedPackages = prefs[Keys.WHITELISTED_PACKAGES] ?: defaults.whitelistedPackages,
showSystemApps = prefs[Keys.SHOW_SYSTEM_APPS] ?: defaults.showSystemApps,
passwordHash = prefs[Keys.PASSWORD_HASH],
passwordSalt = prefs[Keys.PASSWORD_SALT]
passwordSalt = prefs[Keys.PASSWORD_SALT],
cutoffCycleAnchorMillis = prefs[Keys.CUTOFF_ANCHOR_MILLIS],
cutoffInPulse = prefs[Keys.CUTOFF_IN_PULSE] ?: defaults.cutoffInPulse,
cutoffPulseStartMillis = prefs[Keys.CUTOFF_PULSE_START_MILLIS] ?: defaults.cutoffPulseStartMillis
)
}
@@ -126,4 +132,17 @@ class SettingsRepository @Inject constructor(
val salt = prefs[Keys.PASSWORD_SALT] ?: return true
return PasswordHasher.hash(password, salt) == hash
}
/**
* Persiste l'état du cycle de coupure automatique, pour que le minuteur ne reparte pas de
* zéro si [DataMonitorService] est tué puis relancé par le système avant la fin de l'intervalle
* (fréquent sur les ROM qui tuent agressivement les apps en arrière-plan sans exemption batterie).
*/
suspend fun setCutoffCycleState(anchorMillis: Long?, inPulse: Boolean, pulseStartMillis: Long) {
context.dataStore.edit { prefs ->
if (anchorMillis == null) prefs.remove(Keys.CUTOFF_ANCHOR_MILLIS) else prefs[Keys.CUTOFF_ANCHOR_MILLIS] = anchorMillis
prefs[Keys.CUTOFF_IN_PULSE] = inPulse
prefs[Keys.CUTOFF_PULSE_START_MILLIS] = pulseStartMillis
}
}
}