diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2016-03-23 12:04:00 -0700 |
---|---|---|
committer | Svetoslav Ganov <svetoslavganov@google.com> | 2016-03-23 12:04:03 -0700 |
commit | 437a6bfedb33daf66592bbed8595025f3e707850 (patch) | |
tree | 65b83a607ebad12fe9f6294a8b29598ec6c674e3 /src | |
parent | ad6218a2c0991a34a9f9e7ff375c0088a12e42ef (diff) | |
download | android_packages_apps_PackageInstaller-437a6bfedb33daf66592bbed8595025f3e707850.tar.gz android_packages_apps_PackageInstaller-437a6bfedb33daf66592bbed8595025f3e707850.tar.bz2 android_packages_apps_PackageInstaller-437a6bfedb33daf66592bbed8595025f3e707850.zip |
Respect past user choices in permisson review UI
In a permission review mode we show UI for the user to review
new permissions for apps that do not support the new runtime
permission model. The review is shown on an app launch. It is
possible for the user to modify permissions in the settings
UI before launching an app.
This change ensures that the default value in the review UI
reflects the user choice in settings. Specifically, the review
UI shows the permission toggle in a granted state if the user
expressed no opinion or granted the pemrission in settings
(initially permissions are shown as revoked in settings as a
review is pending - granting a permission from settings doesn't
void the pending review). However, if the user grants and then
revokes a permission in settings, (expresses an opinion the
pemrission should be revoked) the default state of the permission
toggle is off.
bug:26741436
Change-Id: Iae6ae497dfba46ba1399fbf66fb60e70c37f0420
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/packageinstaller/permission/model/AppPermissionGroup.java | 14 | ||||
-rw-r--r-- | src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java | 23 |
2 files changed, 32 insertions, 5 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java index 0771a0f4..11d89341 100644 --- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java @@ -321,6 +321,20 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup> return false; } + public boolean shouldRevokeOnUpgrade() { + if (mAppSupportsRuntimePermissions) { + return false; + } + final int permissionCount = mPermissions.size(); + for (int i = 0; i < permissionCount; i++) { + Permission permission = mPermissions.valueAt(i); + if ((permission.getFlags() & PackageManager.FLAG_PERMISSION_REVOKE_ON_UPGRADE) != 0) { + return true; + } + } + return false; + } + public boolean grantRuntimePermissions(boolean fixedByTheUser) { return grantRuntimePermissions(fixedByTheUser, null); } diff --git a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java index 38080e6b..ae656ebf 100644 --- a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java @@ -229,6 +229,9 @@ public final class ReviewPermissionsActivity extends Activity private void bindUi() { Activity activity = getActivity(); + if (activity == null) { + return; + } // Set icon Drawable icon = mAppPermissions.getPackageInfo().applicationInfo.loadIcon( @@ -268,6 +271,11 @@ public final class ReviewPermissionsActivity extends Activity } private void loadPreferences() { + Activity activity = getActivity(); + if (activity == null) { + return; + } + PreferenceScreen screen = getPreferenceScreen(); if (screen == null) { screen = getPreferenceManager().createPreferenceScreen(getActivity()); @@ -300,15 +308,17 @@ public final class ReviewPermissionsActivity extends Activity // We update permission grants based on the final preference states if (group.isReviewRequired()) { - // If review is required use granted as default - preference.setChecked(true); + // If review is required use granted as default unless + // the user went to settings first and expressed that + // the permission should be revoked for this app. + preference.setChecked(!group.shouldRevokeOnUpgrade()); } else { // If review not required use the current grant state as default preference.setChecked(group.areRuntimePermissionsGranted()); } preference.setKey(group.getName()); - Drawable icon = Utils.loadDrawable(getActivity().getPackageManager(), + Drawable icon = Utils.loadDrawable(activity.getPackageManager(), group.getIconPkg(), group.getIconResId()); preference.setIcon(Utils.applyTint(getContext(), icon, android.R.attr.colorControlNormal)); @@ -333,7 +343,7 @@ public final class ReviewPermissionsActivity extends Activity screen.addPreference(preference); } else { if (mNewPermissionsCategory == null) { - mNewPermissionsCategory = new PreferenceCategory(getActivity()); + mNewPermissionsCategory = new PreferenceCategory(activity); mNewPermissionsCategory.setTitle(R.string.new_permissions_category); mNewPermissionsCategory.setOrder(1); screen.addPreference(mNewPermissionsCategory); @@ -342,7 +352,7 @@ public final class ReviewPermissionsActivity extends Activity } } else { if (currentPermissionsCategory == null) { - currentPermissionsCategory = new PreferenceCategory(getActivity()); + currentPermissionsCategory = new PreferenceCategory(activity); currentPermissionsCategory.setTitle(R.string.current_permissions_category); currentPermissionsCategory.setOrder(2); screen.addPreference(currentPermissionsCategory); @@ -366,6 +376,9 @@ public final class ReviewPermissionsActivity extends Activity private void executeCallback(boolean success) { Activity activity = getActivity(); + if (activity == null) { + return; + } if (success) { IntentSender intent = activity.getIntent().getParcelableExtra(Intent.EXTRA_INTENT); if (intent != null) { |