From 366e7a20c4d716c3d260faef929f0e8d6be267fb Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Fri, 25 Jul 2014 10:20:26 -0700 Subject: [PATCH] Fix UsageStats permissions in Settings AppOpsManager returns all permission for all users. We need to check that the permission we're getting is actually for our user. Change-Id: I8287d2dc1959d4a22c19ebb2d24136324e04cd2b --- src/com/android/settings/UsageAccessSettings.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/UsageAccessSettings.java b/src/com/android/settings/UsageAccessSettings.java index 8e8e533117a..8ae277d228d 100644 --- a/src/com/android/settings/UsageAccessSettings.java +++ b/src/com/android/settings/UsageAccessSettings.java @@ -148,6 +148,11 @@ public class UsageAccessSettings extends SettingsPreferenceFragment implements continue; } + if (packageOp.getUid() != pe.packageInfo.applicationInfo.uid) { + // This AppOp does not belong to this user. + continue; + } + if (packageOp.getOps().size() < 1) { Log.w(TAG, "No AppOps permission exists for package " + packageOp.getPackageName()); @@ -294,9 +299,13 @@ public class UsageAccessSettings extends SettingsPreferenceFragment implements final int newMode = (Boolean) newValue ? AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED; - mAppOpsManager.setMode(AppOpsManager.OP_GET_USAGE_STATS, pe.packageInfo.applicationInfo.uid, - packageName, newMode); - pe.appOpMode = newMode; + + // Check if we need to do any work. + if (pe.appOpMode != newMode) { + mAppOpsManager.setMode(AppOpsManager.OP_GET_USAGE_STATS, + pe.packageInfo.applicationInfo.uid, packageName, newMode); + pe.appOpMode = newMode; + } return true; }