diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2016-03-23 19:14:51 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-03-23 19:14:51 +0000 |
commit | f8be279162b843cb007a4fdd4458da27895a0b77 (patch) | |
tree | 48aa488d9087fb9b928aa339b74c625f5a8faa35 /src/com | |
parent | 5455eace1f2f841f5380533a508c3a1afeba3439 (diff) | |
parent | 437a6bfedb33daf66592bbed8595025f3e707850 (diff) | |
download | android_packages_apps_PackageInstaller-f8be279162b843cb007a4fdd4458da27895a0b77.tar.gz android_packages_apps_PackageInstaller-f8be279162b843cb007a4fdd4458da27895a0b77.tar.bz2 android_packages_apps_PackageInstaller-f8be279162b843cb007a4fdd4458da27895a0b77.zip |
Merge "Respect past user choices in permisson review UI" into nyc-dev
Diffstat (limited to 'src/com')
-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 fdb77934..1e8f48c3 100644 --- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java +++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java @@ -325,6 +325,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 f31d618e..d7e44e7e 100644 --- a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java +++ b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java @@ -240,6 +240,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( @@ -279,6 +282,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()); @@ -311,15 +319,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)); @@ -344,7 +354,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); @@ -353,7 +363,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); @@ -377,6 +387,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) { |