summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSvetoslav Ganov <svetoslavganov@google.com>2016-03-23 12:42:06 -0700
committerSvetoslav Ganov <svetoslavganov@google.com>2016-03-23 13:35:34 -0700
commitdcc39fe43bc27412b7237195392b11299fd56ebf (patch)
tree41f8dce3f0bd0e25bc85b7a0686d49895b2c5845
parent8842534eee8a4c247c422e52691d6629bdb83c19 (diff)
downloadandroid_packages_apps_PackageInstaller-dcc39fe43bc27412b7237195392b11299fd56ebf.tar.gz
android_packages_apps_PackageInstaller-dcc39fe43bc27412b7237195392b11299fd56ebf.tar.bz2
android_packages_apps_PackageInstaller-dcc39fe43bc27412b7237195392b11299fd56ebf.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: I021175df00e334e73aa01363d2c5645e2fe16b90
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissionGroup.java19
-rw-r--r--src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java31
2 files changed, 23 insertions, 27 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
index fdb77934..050e8b1e 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
@@ -215,6 +215,9 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
}
public boolean isReviewRequired() {
+ if (mAppSupportsRuntimePermissions) {
+ return false;
+ }
final int permissionCount = mPermissions.size();
for (int i = 0; i < permissionCount; i++) {
Permission permission = mPermissions.valueAt(i);
@@ -250,17 +253,6 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
return false;
}
- public boolean hasAppOpPermission() {
- final int permissionCount = mPermissions.size();
- for (int i = 0; i < permissionCount; i++) {
- Permission permission = mPermissions.valueAt(i);
- if (permission.getAppOp() != AppOpsManager.OP_NONE) {
- return true;
- }
- }
- return false;
- }
-
public PackageInfo getApp() {
return mPackageInfo;
}
@@ -316,9 +308,8 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
if (permission.isGranted()) {
return true;
}
- } else if (permission.isGranted() && ((permission.getAppOp()
- == AppOpsManager.OP_NONE || permission.isAppOpAllowed()))
- && !permission.isReviewRequired()) {
+ } else if (permission.isGranted() && (permission.getAppOp()
+ == AppOpsManager.OP_NONE || permission.isAppOpAllowed())) {
return true;
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
index f31d618e..2bff0e28 100644
--- a/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/ReviewPermissionsActivity.java
@@ -144,7 +144,7 @@ public final class ReviewPermissionsActivity extends Activity
return;
}
- boolean reviewRequired= false;
+ boolean reviewRequired = false;
for (AppPermissionGroup group : mAppPermissions.getPermissionGroups()) {
if (group.isReviewRequired()) {
reviewRequired = true;
@@ -166,6 +166,7 @@ public final class ReviewPermissionsActivity extends Activity
@Override
public void onResume() {
super.onResume();
+ mAppPermissions.refresh();
loadPreferences();
}
@@ -240,6 +241,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 +283,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());
@@ -309,17 +318,8 @@ public final class ReviewPermissionsActivity extends Activity
} else {
preference = new SwitchPreference(getActivity());
- // We update permission grants based on the final preference states
- if (group.isReviewRequired()) {
- // If review is required use granted as default
- preference.setChecked(true);
- } 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));
@@ -330,6 +330,8 @@ public final class ReviewPermissionsActivity extends Activity
preference.setOnPreferenceChangeListener(this);
}
+ preference.setChecked(group.areRuntimePermissionsGranted());
+
// Mutable state
if (group.isPolicyFixed()) {
preference.setEnabled(false);
@@ -344,7 +346,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 +355,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 +379,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) {