From 5e0921d0750101707cdc635fd2e4e482aa30c5f9 Mon Sep 17 00:00:00 2001 From: alv-cor Date: Sun, 8 Mar 2026 20:35:16 +0100 Subject: [PATCH] Refine usage fallback logic with 1-day threshold Add a Map.totalTime() helper and ONE_DAY_MS constant; use a mutable `usage` variable to prefer event-based usage only when it's non-empty and the summed time is <= one day. If that check fails, fall back to stats-based calculation and return it only if it's <= one day; otherwise return an empty map. Also change exception handling to return an empty map instead of falling back to stats. This avoids returning large/invalid aggregates and makes the fallback behavior more explicit. --- .../dev/pranav/reef/util/ScreenUsageHelper.kt | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Reef/src/main/java/dev/pranav/reef/util/ScreenUsageHelper.kt b/Reef/src/main/java/dev/pranav/reef/util/ScreenUsageHelper.kt index cd154f0..0370bc4 100644 --- a/Reef/src/main/java/dev/pranav/reef/util/ScreenUsageHelper.kt +++ b/Reef/src/main/java/dev/pranav/reef/util/ScreenUsageHelper.kt @@ -29,19 +29,27 @@ object ScreenUsageHelper { end: Long, targetPackage: String? = null ): Map { + fun Map<*, Long>.totalTime(): Long = values.sum() + val ONE_DAY_MS: Long = 24 * 60 * 60 * 1000L + try { - val eventBasedUsage = + var usage = calculateUsageFromEvents(usageStatsManager, start, end, targetPackage) - if (eventBasedUsage.isEmpty()) { - Log.w(TAG, "Event-based tracking returned no data, using UsageStats fallback") - return calculateUsageFromStats(usageStatsManager, start, end, targetPackage) + if (!usage.isEmpty() && usage.totalTime() <= ONE_DAY_MS) { + return usage + } + + usage = calculateUsageFromStats(usageStatsManager, start, end, targetPackage) + + if (usage.totalTime() <= ONE_DAY_MS) { + return usage } - return eventBasedUsage + return emptyMap() } catch (e: Exception) { Log.e(TAG, "Error fetching usage", e) - return calculateUsageFromStats(usageStatsManager, start, end, targetPackage) + return emptyMap() } }