Loading apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +47 −49 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading Loading @@ -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("--"); Loading @@ -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) { Loading @@ -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); Loading @@ -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) { Loading @@ -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(); } Loading @@ -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; } Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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(); Loading services/core/java/com/android/server/content/SyncAdapterStateFetcher.java +3 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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() { } Loading @@ -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; Loading services/core/java/com/android/server/policy/PermissionPolicyService.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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. Loading Loading @@ -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) { Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +5 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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); } Loading Loading @@ -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. Loading
apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java +47 −49 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading @@ -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 Loading Loading @@ -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("--"); Loading @@ -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) { Loading @@ -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); Loading @@ -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) { Loading @@ -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(); } Loading @@ -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; } Loading @@ -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); Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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(); Loading
services/core/java/com/android/server/content/SyncAdapterStateFetcher.java +3 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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() { } Loading @@ -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; Loading
services/core/java/com/android/server/policy/PermissionPolicyService.java +4 −4 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 Loading Loading @@ -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. Loading Loading @@ -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) { Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +5 −5 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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); } Loading Loading @@ -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.