diff options
author | Svetoslav <svetoslavganov@google.com> | 2015-06-09 21:14:04 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-06-09 21:14:05 +0000 |
commit | 3bb7fb2db3a7bbb85cdcfc3ba0e8644b6d02afcb (patch) | |
tree | f68f847b7a3c708e8712e557d3d684438facaa74 /src/com/android/packageinstaller/permission | |
parent | f98edbc4f1ced3a9f3394ee5ef881d1cec852bba (diff) | |
parent | 48f67a93bfec31dc8bf0f89290056e5f36434fa2 (diff) | |
download | android_packages_apps_PackageInstaller-3bb7fb2db3a7bbb85cdcfc3ba0e8644b6d02afcb.tar.gz android_packages_apps_PackageInstaller-3bb7fb2db3a7bbb85cdcfc3ba0e8644b6d02afcb.tar.bz2 android_packages_apps_PackageInstaller-3bb7fb2db3a7bbb85cdcfc3ba0e8644b6d02afcb.zip |
Merge "Respect permission request order." into mnc-dev
Diffstat (limited to 'src/com/android/packageinstaller/permission')
4 files changed, 27 insertions, 20 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissions.java b/src/com/android/packageinstaller/permission/model/AppPermissions.java index 17014774..bca06c0c 100644 --- a/src/com/android/packageinstaller/permission/model/AppPermissions.java +++ b/src/com/android/packageinstaller/permission/model/AppPermissions.java @@ -28,7 +28,9 @@ import java.util.Collections; import java.util.List; public final class AppPermissions { - private final ArrayMap<String, AppPermissionGroup> mGroups = new ArrayMap<>(); + private final ArrayList<AppPermissionGroup> mGroups = new ArrayList<>(); + + private final ArrayMap<String, AppPermissionGroup> mNameToGroupMap = new ArrayMap<>(); private final Context mContext; @@ -38,14 +40,17 @@ public final class AppPermissions { private final Runnable mOnErrorCallback; + private final boolean mSortGroups; + private PackageInfo mPackageInfo; public AppPermissions(Context context, PackageInfo packageInfo, String[] permissions, - Runnable onErrorCallback) { + boolean sortGroups, Runnable onErrorCallback) { mContext = context; mPackageInfo = packageInfo; mFilterPermissions = permissions; mAppLabel = packageInfo.applicationInfo.loadLabel(context.getPackageManager()); + mSortGroups = sortGroups; mOnErrorCallback = onErrorCallback; loadPermissionGroups(); } @@ -64,11 +69,11 @@ public final class AppPermissions { } public AppPermissionGroup getPermissionGroup(String name) { - return mGroups.get(name); + return mNameToGroupMap.get(name); } public List<AppPermissionGroup> getPermissionGroups() { - return new ArrayList<>(mGroups.values()); + return mGroups; } @@ -84,7 +89,7 @@ public final class AppPermissions { } private void loadPermissionGroups() { - List<AppPermissionGroup> groups = new ArrayList<>(); + mGroups.clear(); if (mPackageInfo.requestedPermissions == null) { return; @@ -93,7 +98,7 @@ public final class AppPermissions { for (int i = 0; i < mPackageInfo.requestedPermissions.length; i++) { String requestedPerm = mPackageInfo.requestedPermissions[i]; - if (hasGroupForPermission(requestedPerm, groups)) { + if (hasGroupForPermission(requestedPerm)) { continue; } @@ -103,13 +108,13 @@ public final class AppPermissions { continue; } - groups.add(group); + mGroups.add(group); } if (!ArrayUtils.isEmpty(mFilterPermissions)) { - final int groupCount = groups.size(); + final int groupCount = mGroups.size(); for (int i = groupCount - 1; i >= 0; i--) { - AppPermissionGroup group = groups.get(i); + AppPermissionGroup group = mGroups.get(i); boolean groupHasPermission = false; for (String filterPerm : mFilterPermissions) { if (group.hasPermission(filterPerm)) { @@ -118,22 +123,23 @@ public final class AppPermissions { } } if (!groupHasPermission) { - groups.remove(i); + mGroups.remove(i); } } } - Collections.sort(groups); + if (mSortGroups) { + Collections.sort(mGroups); + } - mGroups.clear(); - for (AppPermissionGroup group : groups) { - mGroups.put(group.getName(), group); + mNameToGroupMap.clear(); + for (AppPermissionGroup group : mGroups) { + mNameToGroupMap.put(group.getName(), group); } } - private static boolean hasGroupForPermission(String permission, - List<AppPermissionGroup> groups) { - for (AppPermissionGroup group : groups) { + private boolean hasGroupForPermission(String permission) { + for (AppPermissionGroup group : mGroups) { if (group.hasPermission(permission)) { return true; } diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java index 9e2bfd13..15a33540 100644 --- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java +++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java @@ -51,7 +51,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver { PackageInfo packageInfo = context.getPackageManager().getPackageInfo(pkg, PackageManager.GET_PERMISSIONS); AppPermissions appPermissions = - new AppPermissions(context, packageInfo, null, null); + new AppPermissions(context, packageInfo, null, false, null); int grantedCount = 0; int totalCount = 0; for (AppPermissionGroup group : appPermissions.getPermissionGroups()) { diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java index 50aa2afd..e83641f1 100644 --- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java +++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java @@ -186,7 +186,8 @@ public final class AppPermissionsFragment extends SettingsWithHeader breadcrumbView.setText(label); } - mAppPermissions = new AppPermissions(activity, packageInfo, null, new Runnable() { + mAppPermissions = new AppPermissions(activity, packageInfo, null, true, + new Runnable() { @Override public void run() { getActivity().finish(); diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java index fca3d138..7d516b29 100644 --- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java @@ -99,7 +99,7 @@ public class GrantPermissionsActivity extends Activity return; } - mAppPermissions = new AppPermissions(this, callingPackageInfo, mRequestedPermissions, + mAppPermissions = new AppPermissions(this, callingPackageInfo, mRequestedPermissions, false, new Runnable() { @Override public void run() { |