summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShijian Li <shijianli@google.com>2017-01-23 12:13:53 +0000
committerShijian Li <shijianli@google.com>2017-01-23 18:39:54 +0000
commit275897a5a576e8d16ebc245c0a299c5d9448a5a6 (patch)
treec8212b9dc76ff621a5d6bef90f2be39726c4635b
parentb8e4193e57bcaca51b08a88f3a67ef1d0641b75a (diff)
downloadandroid_packages_apps_PackageInstaller-275897a5a576e8d16ebc245c0a299c5d9448a5a6.tar.gz
android_packages_apps_PackageInstaller-275897a5a576e8d16ebc245c0a299c5d9448a5a6.tar.bz2
android_packages_apps_PackageInstaller-275897a5a576e8d16ebc245c0a299c5d9448a5a6.zip
Set USER_FIXED for all non-granted permissions as long as one in the group
is changed. This only applies to individually controlled permission group. Test: Manually test on a local build. Bug: 34561693 Change-Id: I24f83a56d4011253ed2aa78dd0613021dfe56136
-rw-r--r--src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java23
-rw-r--r--src/com/android/packageinstaller/permission/utils/ArrayUtils.java18
2 files changed, 41 insertions, 0 deletions
diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
index 31615676..4ef27426 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
@@ -42,6 +42,7 @@ import com.android.packageinstaller.permission.model.AppPermissions;
import com.android.packageinstaller.permission.model.Permission;
import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
+import com.android.packageinstaller.permission.utils.ArrayUtils;
import com.android.packageinstaller.permission.utils.Utils;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
@@ -212,6 +213,28 @@ public final class AppPermissionsFragmentWear extends PreferenceFragment {
} else {
group.revokeRuntimePermissions(true, new String[]{ perm.name });
}
+
+ if (Utils.areGroupPermissionsIndividuallyControlled(getContext(), group.getName())
+ && group.hasRuntimePermission()) {
+ // As long as one permission is changed in individually controlled group
+ // permissions, we will set user_fixed for non-granted permissions in that group.
+ // This avoids the system to automatically grant runtime permissions based on the
+ // fact that one of dangerous permission in that group is already granted.
+ String[] revokedPermissionsToFix = null;
+ final int permissionCount = group.getPermissions().size();
+
+ for (int i = 0; i < permissionCount; i++) {
+ Permission current = group.getPermissions().get(i);
+ if (!current.isGranted() && !current.isUserFixed()) {
+ revokedPermissionsToFix = ArrayUtils.appendString(
+ revokedPermissionsToFix, current.getName());
+ }
+ }
+
+ if (revokedPermissionsToFix != null) {
+ group.revokeRuntimePermissions(true, revokedPermissionsToFix);
+ }
+ }
return true;
});
return pref;
diff --git a/src/com/android/packageinstaller/permission/utils/ArrayUtils.java b/src/com/android/packageinstaller/permission/utils/ArrayUtils.java
index 4b7a3947..2af641bc 100644
--- a/src/com/android/packageinstaller/permission/utils/ArrayUtils.java
+++ b/src/com/android/packageinstaller/permission/utils/ArrayUtils.java
@@ -16,6 +16,8 @@
package com.android.packageinstaller.permission.utils;
+import android.text.TextUtils;
+
import java.util.Objects;
public final class ArrayUtils {
@@ -42,4 +44,20 @@ public final class ArrayUtils {
}
return -1;
}
+
+ public static String[] appendString(String[] cur, String val) {
+ if (cur == null) {
+ return new String[] { val };
+ }
+ final int N = cur.length;
+ for (int i = 0; i < N; i++) {
+ if (TextUtils.equals(cur[i], val)) {
+ return cur;
+ }
+ }
+ String[] ret = new String[N + 1];
+ System.arraycopy(cur, 0, ret, 0, N);
+ ret[N] = val;
+ return ret;
+ }
}