Loading core/java/com/android/internal/util/ArrayUtils.java +27 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.IntFunction; /** * ArrayUtils contains some methods that you can call to find out Loading Loading @@ -656,4 +657,30 @@ public class ArrayUtils { throw new ArrayIndexOutOfBoundsException("length=" + len + "; index=" + index); } } /** * Returns an array with values from {@code val} minus {@code null} values * * @param arrayConstructor typically {@code T[]::new} e.g. {@code String[]::new} */ public static <T> T[] filterNotNull(T[] val, IntFunction<T[]> arrayConstructor) { int nullCount = 0; int size = size(val); for (int i = 0; i < size; i++) { if (val[i] == null) { nullCount++; } } if (nullCount == 0) { return val; } T[] result = arrayConstructor.apply(size - nullCount); int outIdx = 0; for (int i = 0; i < size; i++) { if (val[i] != null) { result[outIdx++] = val[i]; } } return result; } } services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +11 −1 Original line number Diff line number Diff line Loading @@ -46,7 +46,6 @@ import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemProperties; import android.os.UserHandle; import android.os.storage.StorageManager; import android.permission.PermissionManager; Loading Loading @@ -1059,6 +1058,17 @@ public final class DefaultPermissionGrantPolicy { return; } // Intersect the requestedPermissions for a factory image with that of its current update // in case the latter one removed a <uses-permission> String[] requestedByNonSystemPackage = getPackageInfo(pkg.packageName).requestedPermissions; int size = requestedPermissions.length; for (int i = 0; i < size; i++) { if (!ArrayUtils.contains(requestedByNonSystemPackage, requestedPermissions[i])) { requestedPermissions[i] = null; } } requestedPermissions = ArrayUtils.filterNotNull(requestedPermissions, String[]::new); PackageManager pm = mContext.getPackageManager(); final ArraySet<String> permissions = new ArraySet<>(permissionsWithoutSplits); ApplicationInfo applicationInfo = pkg.applicationInfo; Loading Loading
core/java/com/android/internal/util/ArrayUtils.java +27 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.function.IntFunction; /** * ArrayUtils contains some methods that you can call to find out Loading Loading @@ -656,4 +657,30 @@ public class ArrayUtils { throw new ArrayIndexOutOfBoundsException("length=" + len + "; index=" + index); } } /** * Returns an array with values from {@code val} minus {@code null} values * * @param arrayConstructor typically {@code T[]::new} e.g. {@code String[]::new} */ public static <T> T[] filterNotNull(T[] val, IntFunction<T[]> arrayConstructor) { int nullCount = 0; int size = size(val); for (int i = 0; i < size; i++) { if (val[i] == null) { nullCount++; } } if (nullCount == 0) { return val; } T[] result = arrayConstructor.apply(size - nullCount); int outIdx = 0; for (int i = 0; i < size; i++) { if (val[i] != null) { result[outIdx++] = val[i]; } } return result; } }
services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +11 −1 Original line number Diff line number Diff line Loading @@ -46,7 +46,6 @@ import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemProperties; import android.os.UserHandle; import android.os.storage.StorageManager; import android.permission.PermissionManager; Loading Loading @@ -1059,6 +1058,17 @@ public final class DefaultPermissionGrantPolicy { return; } // Intersect the requestedPermissions for a factory image with that of its current update // in case the latter one removed a <uses-permission> String[] requestedByNonSystemPackage = getPackageInfo(pkg.packageName).requestedPermissions; int size = requestedPermissions.length; for (int i = 0; i < size; i++) { if (!ArrayUtils.contains(requestedByNonSystemPackage, requestedPermissions[i])) { requestedPermissions[i] = null; } } requestedPermissions = ArrayUtils.filterNotNull(requestedPermissions, String[]::new); PackageManager pm = mContext.getPackageManager(); final ArraySet<String> permissions = new ArraySet<>(permissionsWithoutSplits); ApplicationInfo applicationInfo = pkg.applicationInfo; Loading