diff options
| author | 2022-11-09 15:51:22 +0000 | |
|---|---|---|
| committer | 2022-11-09 15:51:22 +0000 | |
| commit | e33d4b520db42a992d51fda5073eca22faaa6969 (patch) | |
| tree | a235bef8690f5a988a60d24d0821fc49966ce7d9 | |
| parent | d15162cb89cbcd9865de3016b16fc2f1e778e3c3 (diff) | |
| parent | 03d7508067692e8205f6d61ec12757e3083350b3 (diff) | |
Merge "Switch from Pair to UserPackage."
4 files changed, 59 insertions, 62 deletions
diff --git a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java index bedfa7f99d99..29e730df2374 100644 --- a/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +++ b/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java @@ -84,6 +84,7 @@ import android.content.IntentFilter; import android.content.PermissionChecker; import android.content.pm.PackageManager; import android.content.pm.PackageManagerInternal; +import android.content.pm.UserPackage; import android.database.ContentObserver; import android.net.Uri; import android.os.BatteryManager; @@ -120,7 +121,6 @@ import android.util.IndentingPrintWriter; import android.util.IntArray; import android.util.Log; import android.util.LongArrayQueue; -import android.util.Pair; import android.util.Slog; import android.util.SparseArray; import android.util.SparseArrayMap; @@ -402,7 +402,7 @@ public class AlarmManagerService extends SystemService { public long lastUsage; } /** Map of {package, user} -> {quotaInfo} */ - private final ArrayMap<Pair<String, Integer>, QuotaInfo> mQuotaBuffer = new ArrayMap<>(); + private final ArrayMap<UserPackage, QuotaInfo> mQuotaBuffer = new ArrayMap<>(); private long mMaxDuration; @@ -414,11 +414,11 @@ public class AlarmManagerService extends SystemService { if (quota <= 0) { return; } - final Pair<String, Integer> packageUser = Pair.create(packageName, userId); - QuotaInfo currentQuotaInfo = mQuotaBuffer.get(packageUser); + final UserPackage userPackage = UserPackage.of(userId, packageName); + QuotaInfo currentQuotaInfo = mQuotaBuffer.get(userPackage); if (currentQuotaInfo == null) { currentQuotaInfo = new QuotaInfo(); - mQuotaBuffer.put(packageUser, currentQuotaInfo); + mQuotaBuffer.put(userPackage, currentQuotaInfo); } currentQuotaInfo.remainingQuota = quota; currentQuotaInfo.expirationTime = nowElapsed + mMaxDuration; @@ -426,8 +426,8 @@ public class AlarmManagerService extends SystemService { /** Returns if the supplied package has reserve quota to fire at the given time. */ boolean hasQuota(String packageName, int userId, long triggerElapsed) { - final Pair<String, Integer> packageUser = Pair.create(packageName, userId); - final QuotaInfo quotaInfo = mQuotaBuffer.get(packageUser); + final UserPackage userPackage = UserPackage.of(userId, packageName); + final QuotaInfo quotaInfo = mQuotaBuffer.get(userPackage); return quotaInfo != null && quotaInfo.remainingQuota > 0 && triggerElapsed <= quotaInfo.expirationTime; @@ -438,8 +438,8 @@ public class AlarmManagerService extends SystemService { * required. */ void recordUsage(String packageName, int userId, long nowElapsed) { - final Pair<String, Integer> packageUser = Pair.create(packageName, userId); - final QuotaInfo quotaInfo = mQuotaBuffer.get(packageUser); + final UserPackage userPackage = UserPackage.of(userId, packageName); + final QuotaInfo quotaInfo = mQuotaBuffer.get(userPackage); if (quotaInfo == null) { Slog.wtf(TAG, "Temporary quota being consumed at " + nowElapsed @@ -479,26 +479,26 @@ public class AlarmManagerService extends SystemService { void removeForUser(int userId) { for (int i = mQuotaBuffer.size() - 1; i >= 0; i--) { - final Pair<String, Integer> packageUserKey = mQuotaBuffer.keyAt(i); - if (packageUserKey.second == userId) { + final UserPackage userPackageKey = mQuotaBuffer.keyAt(i); + if (userPackageKey.userId == userId) { mQuotaBuffer.removeAt(i); } } } void removeForPackage(String packageName, int userId) { - final Pair<String, Integer> packageUser = Pair.create(packageName, userId); - mQuotaBuffer.remove(packageUser); + final UserPackage userPackage = UserPackage.of(userId, packageName); + mQuotaBuffer.remove(userPackage); } void dump(IndentingPrintWriter pw, long nowElapsed) { pw.increaseIndent(); for (int i = 0; i < mQuotaBuffer.size(); i++) { - final Pair<String, Integer> packageUser = mQuotaBuffer.keyAt(i); + final UserPackage userPackage = mQuotaBuffer.keyAt(i); final QuotaInfo quotaInfo = mQuotaBuffer.valueAt(i); - pw.print(packageUser.first); + pw.print(userPackage.packageName); pw.print(", u"); - pw.print(packageUser.second); + pw.print(userPackage.userId); pw.print(": "); if (quotaInfo == null) { pw.print("--"); @@ -522,8 +522,7 @@ public class AlarmManagerService extends SystemService { */ @VisibleForTesting static class AppWakeupHistory { - private ArrayMap<Pair<String, Integer>, LongArrayQueue> mPackageHistory = - new ArrayMap<>(); + private final ArrayMap<UserPackage, LongArrayQueue> mPackageHistory = new ArrayMap<>(); private long mWindowSize; AppWakeupHistory(long windowSize) { @@ -531,11 +530,11 @@ public class AlarmManagerService extends SystemService { } void recordAlarmForPackage(String packageName, int userId, long nowElapsed) { - final Pair<String, Integer> packageUser = Pair.create(packageName, userId); - LongArrayQueue history = mPackageHistory.get(packageUser); + final UserPackage userPackage = UserPackage.of(userId, packageName); + LongArrayQueue history = mPackageHistory.get(userPackage); if (history == null) { history = new LongArrayQueue(); - mPackageHistory.put(packageUser, history); + mPackageHistory.put(userPackage, history); } if (history.size() == 0 || history.peekLast() < nowElapsed) { history.addLast(nowElapsed); @@ -545,16 +544,16 @@ public class AlarmManagerService extends SystemService { void removeForUser(int userId) { for (int i = mPackageHistory.size() - 1; i >= 0; i--) { - final Pair<String, Integer> packageUserKey = mPackageHistory.keyAt(i); - if (packageUserKey.second == userId) { + final UserPackage userPackageKey = mPackageHistory.keyAt(i); + if (userPackageKey.userId == userId) { mPackageHistory.removeAt(i); } } } void removeForPackage(String packageName, int userId) { - final Pair<String, Integer> packageUser = Pair.create(packageName, userId); - mPackageHistory.remove(packageUser); + final UserPackage userPackage = UserPackage.of(userId, packageName); + mPackageHistory.remove(userPackage); } private void snapToWindow(LongArrayQueue history) { @@ -564,7 +563,7 @@ public class AlarmManagerService extends SystemService { } int getTotalWakeupsInWindow(String packageName, int userId) { - final LongArrayQueue history = mPackageHistory.get(Pair.create(packageName, userId)); + final LongArrayQueue history = mPackageHistory.get(UserPackage.of(userId, packageName)); return (history == null) ? 0 : history.size(); } @@ -573,7 +572,7 @@ public class AlarmManagerService extends SystemService { * (1=1st-last=the ultimate wakeup and 2=2nd-last=the penultimate wakeup) */ long getNthLastWakeupForPackage(String packageName, int userId, int n) { - final LongArrayQueue history = mPackageHistory.get(Pair.create(packageName, userId)); + final LongArrayQueue history = mPackageHistory.get(UserPackage.of(userId, packageName)); if (history == null) { return 0; } @@ -584,11 +583,11 @@ public class AlarmManagerService extends SystemService { void dump(IndentingPrintWriter pw, long nowElapsed) { pw.increaseIndent(); for (int i = 0; i < mPackageHistory.size(); i++) { - final Pair<String, Integer> packageUser = mPackageHistory.keyAt(i); + final UserPackage userPackage = mPackageHistory.keyAt(i); final LongArrayQueue timestamps = mPackageHistory.valueAt(i); - pw.print(packageUser.first); + pw.print(userPackage.packageName); pw.print(", u"); - pw.print(packageUser.second); + pw.print(userPackage.userId); pw.print(": "); // limit dumping to a max of 100 values final int lastIdx = Math.max(0, timestamps.size() - 100); @@ -1501,13 +1500,13 @@ public class AlarmManagerService extends SystemService { * null indicates all * @return True if there was any reordering done to the current list. */ - boolean reorderAlarmsBasedOnStandbyBuckets(ArraySet<Pair<String, Integer>> targetPackages) { + boolean reorderAlarmsBasedOnStandbyBuckets(ArraySet<UserPackage> targetPackages) { final long start = mStatLogger.getTime(); final boolean changed = mAlarmStore.updateAlarmDeliveries(a -> { - final Pair<String, Integer> packageUser = - Pair.create(a.sourcePackage, UserHandle.getUserId(a.creatorUid)); - if (targetPackages != null && !targetPackages.contains(packageUser)) { + final UserPackage userPackage = + UserPackage.of(UserHandle.getUserId(a.creatorUid), a.sourcePackage); + if (targetPackages != null && !targetPackages.contains(userPackage)) { return false; } return adjustDeliveryTimeBasedOnBucketLocked(a); @@ -1524,13 +1523,13 @@ public class AlarmManagerService extends SystemService { * null indicates all * @return True if there was any reordering done to the current list. */ - boolean reorderAlarmsBasedOnTare(ArraySet<Pair<String, Integer>> targetPackages) { + boolean reorderAlarmsBasedOnTare(ArraySet<UserPackage> targetPackages) { final long start = mStatLogger.getTime(); final boolean changed = mAlarmStore.updateAlarmDeliveries(a -> { - final Pair<String, Integer> packageUser = - Pair.create(a.sourcePackage, UserHandle.getUserId(a.creatorUid)); - if (targetPackages != null && !targetPackages.contains(packageUser)) { + final UserPackage userPackage = + UserPackage.of(UserHandle.getUserId(a.creatorUid), a.sourcePackage); + if (targetPackages != null && !targetPackages.contains(userPackage)) { return false; } return adjustDeliveryTimeBasedOnTareLocked(a); @@ -4786,8 +4785,7 @@ public class AlarmManagerService extends SystemService { } } } - final ArraySet<Pair<String, Integer>> triggerPackages = - new ArraySet<>(); + final ArraySet<UserPackage> triggerPackages = new ArraySet<>(); final IntArray wakeupUids = new IntArray(); for (int i = 0; i < triggerList.size(); i++) { final Alarm a = triggerList.get(i); @@ -4796,13 +4794,13 @@ public class AlarmManagerService extends SystemService { } if (mConstants.USE_TARE_POLICY) { if (!isExemptFromTare(a)) { - triggerPackages.add(Pair.create( - a.sourcePackage, - UserHandle.getUserId(a.creatorUid))); + triggerPackages.add(UserPackage.of( + UserHandle.getUserId(a.creatorUid), + a.sourcePackage)); } } else if (!isExemptFromAppStandby(a)) { - triggerPackages.add(Pair.create( - a.sourcePackage, UserHandle.getUserId(a.creatorUid))); + triggerPackages.add(UserPackage.of( + UserHandle.getUserId(a.creatorUid), a.sourcePackage)); } } if (wakeupUids.size() > 0 && mBatteryStatsInternal != null) { @@ -4990,8 +4988,8 @@ public class AlarmManagerService extends SystemService { case TEMPORARY_QUOTA_CHANGED: case APP_STANDBY_BUCKET_CHANGED: synchronized (mLock) { - final ArraySet<Pair<String, Integer>> filterPackages = new ArraySet<>(); - filterPackages.add(Pair.create((String) msg.obj, msg.arg1)); + final ArraySet<UserPackage> filterPackages = new ArraySet<>(); + filterPackages.add(UserPackage.of(msg.arg1, (String) msg.obj)); if (reorderAlarmsBasedOnStandbyBuckets(filterPackages)) { rescheduleKernelAlarmsLocked(); updateNextAlarmClockLocked(); @@ -5004,8 +5002,8 @@ public class AlarmManagerService extends SystemService { final int userId = msg.arg1; final String packageName = (String) msg.obj; - final ArraySet<Pair<String, Integer>> filterPackages = new ArraySet<>(); - filterPackages.add(Pair.create(packageName, userId)); + final ArraySet<UserPackage> filterPackages = new ArraySet<>(); + filterPackages.add(UserPackage.of(userId, packageName)); if (reorderAlarmsBasedOnTare(filterPackages)) { rescheduleKernelAlarmsLocked(); updateNextAlarmClockLocked(); diff --git a/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java b/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java index ffaf364934f6..108cddc3a0e4 100644 --- a/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java +++ b/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java @@ -17,8 +17,8 @@ package com.android.server.content; import android.app.ActivityManagerInternal; import android.app.usage.UsageStatsManagerInternal; +import android.content.pm.UserPackage; import android.os.SystemClock; -import android.util.Pair; import com.android.server.LocalServices; @@ -26,8 +26,7 @@ import java.util.HashMap; class SyncAdapterStateFetcher { - private final HashMap<Pair<Integer, String>, Integer> mBucketCache = - new HashMap<>(); + private final HashMap<UserPackage, Integer> mBucketCache = new HashMap<>(); public SyncAdapterStateFetcher() { } @@ -36,7 +35,7 @@ class SyncAdapterStateFetcher { * Return sync adapter state with a cache. */ public int getStandbyBucket(int userId, String packageName) { - final Pair<Integer, String> key = Pair.create(userId, packageName); + final UserPackage key = UserPackage.of(userId, packageName); final Integer cached = mBucketCache.get(key); if (cached != null) { return cached; diff --git a/services/core/java/com/android/server/policy/PermissionPolicyService.java b/services/core/java/com/android/server/policy/PermissionPolicyService.java index 9a6667308ed2..e61effa13a60 100644 --- a/services/core/java/com/android/server/policy/PermissionPolicyService.java +++ b/services/core/java/com/android/server/policy/PermissionPolicyService.java @@ -58,6 +58,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManagerInternal.PackageListObserver; import android.content.pm.PermissionInfo; +import android.content.pm.UserPackage; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; @@ -78,7 +79,6 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.Log; import android.util.LongSparseLongArray; -import android.util.Pair; import android.util.Slog; import android.util.SparseBooleanArray; @@ -146,7 +146,7 @@ public final class PermissionPolicyService extends SystemService { * scheduled for a package/user. */ @GuardedBy("mLock") - private final ArraySet<Pair<String, Integer>> mIsPackageSyncsScheduled = new ArraySet<>(); + private final ArraySet<UserPackage> mIsPackageSyncsScheduled = new ArraySet<>(); /** * Whether an async {@link #resetAppOpPermissionsIfNotRequestedForUid} is currently @@ -374,7 +374,7 @@ public final class PermissionPolicyService extends SystemService { @UserIdInt int changedUserId) { if (isStarted(changedUserId)) { synchronized (mLock) { - if (mIsPackageSyncsScheduled.add(new Pair<>(packageName, changedUserId))) { + if (mIsPackageSyncsScheduled.add(UserPackage.of(changedUserId, packageName))) { // TODO(b/165030092): migrate this to PermissionThread.getHandler(). // synchronizePackagePermissionsAndAppOpsForUser is a heavy operation. // Dispatched on a PermissionThread, it interferes with user switch. @@ -642,7 +642,7 @@ public final class PermissionPolicyService extends SystemService { private void synchronizePackagePermissionsAndAppOpsForUser(@NonNull String packageName, @UserIdInt int userId) { synchronized (mLock) { - mIsPackageSyncsScheduled.remove(new Pair<>(packageName, userId)); + mIsPackageSyncsScheduled.remove(UserPackage.of(userId, packageName)); } if (DEBUG) { diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 26f02514455c..316c736ff92a 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -259,6 +259,7 @@ import android.content.pm.ServiceInfo; import android.content.pm.Signature; import android.content.pm.StringParceledListSlice; import android.content.pm.UserInfo; +import android.content.pm.UserPackage; import android.content.res.Resources; import android.database.ContentObserver; import android.database.Cursor; @@ -710,8 +711,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { * Contains (package-user) pairs to remove. An entry (p, u) implies that removal of package p * is requested for user u. */ - private final Set<Pair<String, Integer>> mPackagesToRemove = - new ArraySet<Pair<String, Integer>>(); + private final Set<UserPackage> mPackagesToRemove = new ArraySet<>(); final LocalService mLocalService; @@ -15043,7 +15043,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Preconditions.checkCallAuthorization( hasCallingOrSelfPermission(permission.MANAGE_DEVICE_ADMINS)); - Pair<String, Integer> packageUserPair = new Pair<>(packageName, caller.getUserId()); + UserPackage packageUserPair = UserPackage.of(caller.getUserId(), packageName); synchronized (getLockObject()) { return mPackagesToRemove.contains(packageUserPair); } @@ -15071,7 +15071,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { throw new IllegalArgumentException("Cannot uninstall a package with a device owner"); } - final Pair<String, Integer> packageUserPair = new Pair<>(packageName, userId); + final UserPackage packageUserPair = UserPackage.of(userId, packageName); synchronized (getLockObject()) { mPackagesToRemove.add(packageUserPair); } @@ -15131,7 +15131,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } private void startUninstallIntent(final String packageName, final int userId) { - final Pair<String, Integer> packageUserPair = new Pair<>(packageName, userId); + final UserPackage packageUserPair = UserPackage.of(userId, packageName); synchronized (getLockObject()) { if (!mPackagesToRemove.contains(packageUserPair)) { // Do nothing if uninstall was not requested or was already started. |