diff --git a/services/usage/java/com/android/server/usage/AppIdleHistory.java b/services/usage/java/com/android/server/usage/AppIdleHistory.java index 3e2b43d2af5ca..a3313c9741cd7 100644 --- a/services/usage/java/com/android/server/usage/AppIdleHistory.java +++ b/services/usage/java/com/android/server/usage/AppIdleHistory.java @@ -274,6 +274,11 @@ public class AppIdleHistory { - (idle ? mScreenOnTimeThreshold : 0) - 1000 /* just a second more */; } + public void clearUsageLocked(String packageName, int userId) { + ArrayMap userHistory = getUserHistoryLocked(userId); + userHistory.remove(packageName); + } + private boolean hasPassedThresholdsLocked(PackageHistory packageHistory, long elapsedRealtime) { return (packageHistory.lastUsedScreenTime <= getScreenOnTimeLocked(elapsedRealtime) - mScreenOnTimeThreshold) diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 8da17852b4376..beec40f8b0fa6 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -180,6 +180,7 @@ public class UsageStatsService extends SystemService implements IntentFilter packageFilter = new IntentFilter(); packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED); packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); + packageFilter.addAction(Intent.ACTION_PACKAGE_REMOVED); packageFilter.addDataScheme("package"); getContext().registerReceiverAsUser(new PackageReceiver(), UserHandle.ALL, packageFilter, @@ -266,6 +267,12 @@ public class UsageStatsService extends SystemService implements || Intent.ACTION_PACKAGE_CHANGED.equals(action)) { clearCarrierPrivilegedApps(); } + if ((Intent.ACTION_PACKAGE_REMOVED.equals(action) || + Intent.ACTION_PACKAGE_ADDED.equals(action)) + && !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { + clearAppIdleForPackage(intent.getData().getSchemeSpecificPart(), + getSendingUserId()); + } } } @@ -332,6 +339,12 @@ public class UsageStatsService extends SystemService implements } } + void clearAppIdleForPackage(String packageName, int userId) { + synchronized (mLock) { + mAppIdleHistory.clearUsageLocked(packageName, userId); + } + } + private void cleanUpRemovedUsersLocked() { final List users = mUserManager.getUsers(true); if (users == null || users.size() == 0) {