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
This commit is contained in:
Adam Lesinski
2014-07-25 10:20:26 -07:00
parent 80e1f1bfdb
commit 366e7a20c4

View File

@@ -148,6 +148,11 @@ public class UsageAccessSettings extends SettingsPreferenceFragment implements
continue; continue;
} }
if (packageOp.getUid() != pe.packageInfo.applicationInfo.uid) {
// This AppOp does not belong to this user.
continue;
}
if (packageOp.getOps().size() < 1) { if (packageOp.getOps().size() < 1) {
Log.w(TAG, "No AppOps permission exists for package " Log.w(TAG, "No AppOps permission exists for package "
+ packageOp.getPackageName()); + packageOp.getPackageName());
@@ -294,9 +299,13 @@ public class UsageAccessSettings extends SettingsPreferenceFragment implements
final int newMode = (Boolean) newValue ? final int newMode = (Boolean) newValue ?
AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED; AppOpsManager.MODE_ALLOWED : AppOpsManager.MODE_IGNORED;
mAppOpsManager.setMode(AppOpsManager.OP_GET_USAGE_STATS, pe.packageInfo.applicationInfo.uid,
packageName, newMode); // Check if we need to do any work.
pe.appOpMode = newMode; if (pe.appOpMode != newMode) {
mAppOpsManager.setMode(AppOpsManager.OP_GET_USAGE_STATS,
pe.packageInfo.applicationInfo.uid, packageName, newMode);
pe.appOpMode = newMode;
}
return true; return true;
} }