Loading apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +34 −9 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; import android.util.SparseLongArray; import android.util.SparseSetArray; import android.util.TimeUtils; import android.view.Display; import android.widget.Toast; Loading Loading @@ -462,6 +463,12 @@ public class AppStandbyController */ private final Map<String, String> mAppStandbyProperties = new ArrayMap<>(); /** * Set of apps that were restored via backup & restore, per user, that need their * standby buckets to be adjusted when installed. */ private final SparseSetArray<String> mAppsToRestoreToRare = new SparseSetArray<>(); /** * List of app-ids of system packages, populated on boot, when system services are ready. */ Loading Loading @@ -1663,18 +1670,29 @@ public class AppStandbyController final int reason = REASON_MAIN_DEFAULT | REASON_SUB_DEFAULT_APP_RESTORED; final long nowElapsed = mInjector.elapsedRealtime(); for (String packageName : restoredApps) { // If the package is not installed, don't allow the bucket to be set. // If the package is not installed, don't allow the bucket to be set. Instead, add it // to a list of all packages whose buckets need to be adjusted when installed. if (!mInjector.isPackageInstalled(packageName, 0, userId)) { Slog.e(TAG, "Tried to restore bucket for uninstalled app: " + packageName); Slog.i(TAG, "Tried to restore bucket for uninstalled app: " + packageName); mAppsToRestoreToRare.add(userId, packageName); continue; } final int standbyBucket = getAppStandbyBucket(packageName, userId, nowElapsed, false); restoreAppToRare(packageName, userId, nowElapsed, reason); } // Clear out the list of restored apps that need to have their standby buckets adjusted // if they still haven't been installed eight hours after restore. // Note: if the device reboots within these first 8 hours, this list will be lost since it's // not persisted - this is the expected behavior for now and may be updated in the future. mHandler.postDelayed(() -> mAppsToRestoreToRare.remove(userId), 8 * ONE_HOUR); } /** Adjust the standby bucket of the given package for the user to RARE. */ private void restoreAppToRare(String pkgName, int userId, long nowElapsed, int reason) { final int standbyBucket = getAppStandbyBucket(pkgName, userId, nowElapsed, false); // Only update the standby bucket to RARE if the app is still in the NEVER bucket. if (standbyBucket == STANDBY_BUCKET_NEVER) { setAppStandbyBucket(packageName, userId, STANDBY_BUCKET_RARE, reason, nowElapsed, false); } setAppStandbyBucket(pkgName, userId, STANDBY_BUCKET_RARE, reason, nowElapsed, false); } } Loading Loading @@ -2176,8 +2194,15 @@ public class AppStandbyController Intent.ACTION_PACKAGE_ADDED.equals(action))) { if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { maybeUnrestrictBuggyApp(pkgName, userId); } else { } else if (!Intent.ACTION_PACKAGE_ADDED.equals(action)) { clearAppIdleForPackage(pkgName, userId); } else { // Package was just added and it's not being replaced. if (mAppsToRestoreToRare.contains(userId, pkgName)) { restoreAppToRare(pkgName, userId, mInjector.elapsedRealtime(), REASON_MAIN_DEFAULT | REASON_SUB_DEFAULT_APP_RESTORED); mAppsToRestoreToRare.remove(userId, pkgName); } } } synchronized (mSystemExemptionAppOpMode) { Loading Loading
apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java +34 −9 Original line number Diff line number Diff line Loading @@ -111,6 +111,7 @@ import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; import android.util.SparseLongArray; import android.util.SparseSetArray; import android.util.TimeUtils; import android.view.Display; import android.widget.Toast; Loading Loading @@ -462,6 +463,12 @@ public class AppStandbyController */ private final Map<String, String> mAppStandbyProperties = new ArrayMap<>(); /** * Set of apps that were restored via backup & restore, per user, that need their * standby buckets to be adjusted when installed. */ private final SparseSetArray<String> mAppsToRestoreToRare = new SparseSetArray<>(); /** * List of app-ids of system packages, populated on boot, when system services are ready. */ Loading Loading @@ -1663,18 +1670,29 @@ public class AppStandbyController final int reason = REASON_MAIN_DEFAULT | REASON_SUB_DEFAULT_APP_RESTORED; final long nowElapsed = mInjector.elapsedRealtime(); for (String packageName : restoredApps) { // If the package is not installed, don't allow the bucket to be set. // If the package is not installed, don't allow the bucket to be set. Instead, add it // to a list of all packages whose buckets need to be adjusted when installed. if (!mInjector.isPackageInstalled(packageName, 0, userId)) { Slog.e(TAG, "Tried to restore bucket for uninstalled app: " + packageName); Slog.i(TAG, "Tried to restore bucket for uninstalled app: " + packageName); mAppsToRestoreToRare.add(userId, packageName); continue; } final int standbyBucket = getAppStandbyBucket(packageName, userId, nowElapsed, false); restoreAppToRare(packageName, userId, nowElapsed, reason); } // Clear out the list of restored apps that need to have their standby buckets adjusted // if they still haven't been installed eight hours after restore. // Note: if the device reboots within these first 8 hours, this list will be lost since it's // not persisted - this is the expected behavior for now and may be updated in the future. mHandler.postDelayed(() -> mAppsToRestoreToRare.remove(userId), 8 * ONE_HOUR); } /** Adjust the standby bucket of the given package for the user to RARE. */ private void restoreAppToRare(String pkgName, int userId, long nowElapsed, int reason) { final int standbyBucket = getAppStandbyBucket(pkgName, userId, nowElapsed, false); // Only update the standby bucket to RARE if the app is still in the NEVER bucket. if (standbyBucket == STANDBY_BUCKET_NEVER) { setAppStandbyBucket(packageName, userId, STANDBY_BUCKET_RARE, reason, nowElapsed, false); } setAppStandbyBucket(pkgName, userId, STANDBY_BUCKET_RARE, reason, nowElapsed, false); } } Loading Loading @@ -2176,8 +2194,15 @@ public class AppStandbyController Intent.ACTION_PACKAGE_ADDED.equals(action))) { if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) { maybeUnrestrictBuggyApp(pkgName, userId); } else { } else if (!Intent.ACTION_PACKAGE_ADDED.equals(action)) { clearAppIdleForPackage(pkgName, userId); } else { // Package was just added and it's not being replaced. if (mAppsToRestoreToRare.contains(userId, pkgName)) { restoreAppToRare(pkgName, userId, mInjector.elapsedRealtime(), REASON_MAIN_DEFAULT | REASON_SUB_DEFAULT_APP_RESTORED); mAppsToRestoreToRare.remove(userId, pkgName); } } } synchronized (mSystemExemptionAppOpMode) { Loading