summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kweku Adams <kwekua@google.com> 2022-11-09 15:51:22 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-11-09 15:51:22 +0000
commite33d4b520db42a992d51fda5073eca22faaa6969 (patch)
treea235bef8690f5a988a60d24d0821fc49966ce7d9
parentd15162cb89cbcd9865de3016b16fc2f1e778e3c3 (diff)
parent03d7508067692e8205f6d61ec12757e3083350b3 (diff)
Merge "Switch from Pair to UserPackage."
-rw-r--r--apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java96
-rw-r--r--services/core/java/com/android/server/content/SyncAdapterStateFetcher.java7
-rw-r--r--services/core/java/com/android/server/policy/PermissionPolicyService.java8
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java10
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.