diff options
| author | 2021-02-09 19:19:06 +0000 | |
|---|---|---|
| committer | 2021-02-09 19:19:06 +0000 | |
| commit | 51fbb494358959377710a1b02a232e2636d25caa (patch) | |
| tree | 381ae365ee8c7edcaf477d6c37afa0e3bc0e70dc | |
| parent | 6007f2cce9ef1b1cc3846e5754bbac67293bc899 (diff) | |
| parent | d4de97915b932efa3ae309e8adf7864d845884b7 (diff) | |
Merge "Make UsageStats query API UserHandle-aware" into sc-dev
4 files changed, 12 insertions, 6 deletions
diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl index 2c1e951b6128..30ea5c476191 100644 --- a/core/java/android/app/usage/IUsageStatsManager.aidl +++ b/core/java/android/app/usage/IUsageStatsManager.aidl @@ -30,7 +30,7 @@ import java.util.Map; interface IUsageStatsManager { @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) ParceledListSlice queryUsageStats(int bucketType, long beginTime, long endTime, - String callingPackage); + String callingPackage, int userId); @UnsupportedAppUsage(maxTargetSdk = 30, trackingBug = 170729553) ParceledListSlice queryConfigurationStats(int bucketType, long beginTime, long endTime, String callingPackage); diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index f74d16ee9238..31781ec79203 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -23,6 +23,7 @@ import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.annotation.SystemService; import android.annotation.TestApi; +import android.annotation.UserHandleAware; import android.app.Activity; import android.app.PendingIntent; import android.compat.annotation.UnsupportedAppUsage; @@ -437,11 +438,12 @@ public final class UsageStatsManager { * @see #INTERVAL_YEARLY * @see #INTERVAL_BEST */ + @UserHandleAware public List<UsageStats> queryUsageStats(int intervalType, long beginTime, long endTime) { try { @SuppressWarnings("unchecked") ParceledListSlice<UsageStats> slice = mService.queryUsageStats(intervalType, beginTime, - endTime, mContext.getOpPackageName()); + endTime, mContext.getOpPackageName(), mContext.getUserId()); if (slice != null) { return slice.getList(); } diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java b/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java index 64906bb27ff0..e16d44854516 100644 --- a/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ResolverListControllerTest.java @@ -100,7 +100,7 @@ public class ResolverListControllerTest { final List<UsageStats> slices = new ArrayList<>(); slices.add(packageStats); ParceledListSlice<UsageStats> stats = new ParceledListSlice<>(slices); - when(mMockService.queryUsageStats(anyInt(), anyLong(), anyLong(), anyString())) + when(mMockService.queryUsageStats(anyInt(), anyLong(), anyLong(), anyString(), anyInt())) .thenReturn(stats); Answer<Void> answer = new Answer<Void>() { @Override diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 0cb1255c6830..9e419d4c3f3b 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -1526,15 +1526,19 @@ public class UsageStatsService extends SystemService implements @Override public ParceledListSlice<UsageStats> queryUsageStats(int bucketType, long beginTime, - long endTime, String callingPackage) { + long endTime, String callingPackage, int userId) { if (!hasPermission(callingPackage)) { return null; } + final int callingUid = Binder.getCallingUid(); + userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(), callingUid, + userId, false, true, "queryUsageStats", callingPackage); + + // Check the caller's userId for obfuscation decision, not the user being queried final boolean obfuscateInstantApps = shouldObfuscateInstantAppsForCaller( - Binder.getCallingUid(), UserHandle.getCallingUserId()); + callingUid, UserHandle.getCallingUserId()); - final int userId = UserHandle.getCallingUserId(); final long token = Binder.clearCallingIdentity(); try { final List<UsageStats> results = UsageStatsService.this.queryUsageStats( |