v1.16: simplify usage alerts to fixed 90% and 100% (less aggressive)
Build APK / build (push) Successful in 1m50s
Build APK / build (push) Successful in 1m50s
Replace the configurable threshold sliders with two fixed alert levels — 90% and 100% — per metric. Anti-spam now uses hysteresis instead of the API reset-epoch (which could drift and re-fire): each level fires once when crossed and re-arms only after usage drops back below it. Alerts are posted only by the background worker, never the in-app refresh loop, so you're not pinged while looking at the app. UI drops the sliders for a one-line description; settings keep just the on/off switch. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -127,19 +127,13 @@ class PreferencesManager(context: Context) {
|
||||
fun isNotifyEnabled(): Boolean = prefs.getBoolean(KEY_NOTIFY_ENABLED, true)
|
||||
fun setNotifyEnabled(v: Boolean) = prefs.edit().putBoolean(KEY_NOTIFY_ENABLED, v).apply()
|
||||
|
||||
fun getSessionThreshold(): Int = prefs.getInt(KEY_NOTIFY_SESSION_PCT, 90)
|
||||
fun setSessionThreshold(pct: Int) = prefs.edit().putInt(KEY_NOTIFY_SESSION_PCT, pct).apply()
|
||||
|
||||
fun getWeeklyThreshold(): Int = prefs.getInt(KEY_NOTIFY_WEEKLY_PCT, 85)
|
||||
fun setWeeklyThreshold(pct: Int) = prefs.edit().putInt(KEY_NOTIFY_WEEKLY_PCT, pct).apply()
|
||||
|
||||
/**
|
||||
* Tracks the reset-epoch a metric was last notified for, so we alert at most once
|
||||
* per limit window. When the window rolls over (reset epoch changes), it re-arms.
|
||||
* Per-level "already alerted" flag (e.g. "session_90"). Set when the level is crossed,
|
||||
* cleared when usage drops back below it — so each level fires once per window.
|
||||
*/
|
||||
fun getNotifiedResetEpoch(key: String): Long = prefs.getLong("notified_$key", 0L)
|
||||
fun setNotifiedResetEpoch(key: String, epoch: Long) =
|
||||
prefs.edit().putLong("notified_$key", epoch).apply()
|
||||
fun wasNotified(key: String): Boolean = prefs.getBoolean("notified_$key", false)
|
||||
fun setNotified(key: String, v: Boolean) =
|
||||
prefs.edit().putBoolean("notified_$key", v).apply()
|
||||
|
||||
companion object {
|
||||
private const val KEY_COOKIES = "session_cookies"
|
||||
@@ -150,8 +144,6 @@ class PreferencesManager(context: Context) {
|
||||
private const val KEY_ACTIVE_MASK = "active_mask"
|
||||
private const val KEY_HISTORY = "usage_history"
|
||||
private const val KEY_NOTIFY_ENABLED = "notify_enabled"
|
||||
private const val KEY_NOTIFY_SESSION_PCT = "notify_session_pct"
|
||||
private const val KEY_NOTIFY_WEEKLY_PCT = "notify_weekly_pct"
|
||||
private const val KEY_AUTH_FAILS = "auth_fail_count"
|
||||
|
||||
private const val MIN_HISTORY_GAP_MS = 2 * 60 * 1000L // collapse readings <2 min apart
|
||||
|
||||
Reference in New Issue
Block a user