Loading src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading src/com/android/packageinstaller/permission/utils/ArrayUtils.java +18 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.packageinstaller.permission.utils; import android.text.TextUtils; import java.util.Objects; public final class ArrayUtils { Loading @@ -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; } } Loading
src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading
src/com/android/packageinstaller/permission/utils/ArrayUtils.java +18 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.packageinstaller.permission.utils; import android.text.TextUtils; import java.util.Objects; public final class ArrayUtils { Loading @@ -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; } }