summaryrefslogtreecommitdiffstats
path: root/src/com/android
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android')
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissionGroup.java25
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionApps.java6
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java2
-rw-r--r--src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java10
-rw-r--r--src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java23
-rw-r--r--src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java2
6 files changed, 48 insertions, 20 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
index 633336c3..b3ac9721 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
@@ -28,6 +28,7 @@ import android.os.Build;
import android.os.UserHandle;
import android.util.ArrayMap;
+import com.android.internal.util.ArrayUtils;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.utils.LocationUtils;
@@ -264,13 +265,19 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
return mPermissions.get(permission) != null;
}
- public boolean areRuntimePermissionsGranted() {
+ public boolean areRuntimePermissionsGranted(String[] filterPermissions) {
if (LocationUtils.isLocked(mName, mPackageInfo.packageName)) {
return LocationUtils.isLocationEnabled(mContext);
}
final int permissionCount = mPermissions.size();
for (int i = 0; i < permissionCount; i++) {
Permission permission = mPermissions.valueAt(i);
+
+ if (filterPermissions != null && !ArrayUtils.contains(
+ filterPermissions, permission.getName())) {
+ continue;
+ }
+
if (mAppSupportsRuntimePermissions) {
if (permission.isGranted()) {
return true;
@@ -283,7 +290,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
return false;
}
- public boolean grantRuntimePermissions(boolean fixedByTheUser) {
+ public boolean grantRuntimePermissions(boolean fixedByTheUser, String[] filterPermissions) {
final boolean isSharedUser = mPackageInfo.sharedUserId != null;
final int uid = mPackageInfo.applicationInfo.uid;
@@ -291,6 +298,12 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
// permissions, otherwise we toggle the app op corresponding
// to the permission if the permission is granted to the app.
for (Permission permission : mPermissions.values()) {
+
+ if (filterPermissions != null && !ArrayUtils.contains(
+ filterPermissions, permission.getName())) {
+ continue;
+ }
+
if (mAppSupportsRuntimePermissions) {
// Do not touch permissions fixed by the system.
if (permission.isSystemFixed()) {
@@ -371,7 +384,7 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
return true;
}
- public boolean revokeRuntimePermissions(boolean fixedByTheUser) {
+ public boolean revokeRuntimePermissions(boolean fixedByTheUser, String[] filterPermissions) {
final boolean isSharedUser = mPackageInfo.sharedUserId != null;
final int uid = mPackageInfo.applicationInfo.uid;
@@ -379,6 +392,12 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
// permissions, otherwise we toggle the app op corresponding
// to the permission if the permission is granted to the app.
for (Permission permission : mPermissions.values()) {
+
+ if (filterPermissions != null && !ArrayUtils.contains(
+ filterPermissions, permission.getName())) {
+ continue;
+ }
+
if (mAppSupportsRuntimePermissions) {
// Do not touch permissions fixed by the system.
if (permission.isSystemFixed()) {
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java
index 73fc7089..09d469bc 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionApps.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java
@@ -313,15 +313,15 @@ public class PermissionApps {
}
public boolean areRuntimePermissionsGranted() {
- return mAppPermissionGroup.areRuntimePermissionsGranted();
+ return mAppPermissionGroup.areRuntimePermissionsGranted(null);
}
public void grantRuntimePermissions() {
- mAppPermissionGroup.grantRuntimePermissions(false);
+ mAppPermissionGroup.grantRuntimePermissions(false, null);
}
public void revokeRuntimePermissions() {
- mAppPermissionGroup.revokeRuntimePermissions(false);
+ mAppPermissionGroup.revokeRuntimePermissions(false, null);
}
public boolean isPolicyFixed() {
diff --git a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
index 52fb874e..84a977d7 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionStatusReceiver.java
@@ -77,7 +77,7 @@ public class PermissionStatusReceiver extends BroadcastReceiver {
for (AppPermissionGroup group : appPermissions.getPermissionGroups()) {
if (Utils.shouldShowPermission(group)) {
totalCount++;
- if (group.areRuntimePermissionsGranted()) {
+ if (group.areRuntimePermissionsGranted(null)) {
grantedCount++;
if (Utils.OS_PKG.equals(group.getDeclaringPackage())) {
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
index e4e904c8..3277289c 100644
--- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
@@ -224,7 +224,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
}
preference.setPersistent(false);
preference.setEnabled(!group.isPolicyFixed());
- preference.setChecked(group.areRuntimePermissionsGranted());
+ preference.setChecked(group.areRuntimePermissionsGranted(null));
if (isPlatform) {
screen.addPreference(preference);
@@ -281,7 +281,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
return false;
}
if (newValue == Boolean.TRUE) {
- group.grantRuntimePermissions(false);
+ group.grantRuntimePermissions(false, null);
} else {
final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
@@ -294,7 +294,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
@Override
public void onClick(DialogInterface dialog, int which) {
((SwitchPreference) preference).setChecked(false);
- group.revokeRuntimePermissions(false);
+ group.revokeRuntimePermissions(false, null);
if (!grantedByDefault) {
mHasConfirmedRevoke = true;
}
@@ -303,7 +303,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
.show();
return false;
} else {
- group.revokeRuntimePermissions(false);
+ group.revokeRuntimePermissions(false, null);
}
}
@@ -351,7 +351,7 @@ public final class AppPermissionsFragment extends SettingsWithHeader
SwitchPreference switchPref = (SwitchPreference) preference;
AppPermissionGroup group = mAppPermissions.getPermissionGroup(switchPref.getKey());
if (group != null) {
- switchPref.setChecked(group.areRuntimePermissionsGranted());
+ switchPref.setChecked(group.areRuntimePermissionsGranted(null));
}
}
}
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
index c451dd50..a61432e3 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.java
@@ -118,21 +118,30 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
if (!group.isUserFixed() && !group.isPolicyFixed()) {
switch (permissionPolicy) {
case DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT: {
- if (!group.areRuntimePermissionsGranted()) {
- group.grantRuntimePermissions(false);
+ if (!group.areRuntimePermissionsGranted(mRequestedPermissions)) {
+ group.grantRuntimePermissions(false, mRequestedPermissions);
group.setPolicyFixed();
}
} break;
case DevicePolicyManager.PERMISSION_POLICY_AUTO_DENY: {
- if (!group.areRuntimePermissionsGranted()) {
- group.revokeRuntimePermissions(false);
+ if (group.areRuntimePermissionsGranted(mRequestedPermissions)) {
+ group.revokeRuntimePermissions(false, mRequestedPermissions);
group.setPolicyFixed();
}
} break;
default: {
- mRequestGrantPermissionGroups.put(group.getName(), new GroupState(group));
+ if (group.areRuntimePermissionsGranted(null)
+ && !group.areRuntimePermissionsGranted(mRequestedPermissions)) {
+ // If the group is granted but requested permissions
+ // in it not we auto grant the these permissions.
+ group.grantRuntimePermissions(group.isUserFixed(),
+ mRequestedPermissions);
+ } else {
+ mRequestGrantPermissionGroups.put(group.getName(),
+ new GroupState(group));
+ }
} break;
}
} else {
@@ -226,10 +235,10 @@ public class GrantPermissionsActivity extends OverlayTouchActivity
GroupState groupState = mRequestGrantPermissionGroups.get(name);
if (groupState.mGroup != null) {
if (granted) {
- groupState.mGroup.grantRuntimePermissions(doNotAskAgain);
+ groupState.mGroup.grantRuntimePermissions(doNotAskAgain, mRequestedPermissions);
groupState.mState = GroupState.STATE_ALLOWED;
} else {
- groupState.mGroup.revokeRuntimePermissions(doNotAskAgain);
+ groupState.mGroup.revokeRuntimePermissions(doNotAskAgain, mRequestedPermissions);
groupState.mState = GroupState.STATE_DENIED;
}
updateGrantResults(groupState.mGroup);
diff --git a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
index 8280ba36..851d41d2 100644
--- a/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
+++ b/src/com/android/packageinstaller/permission/utils/SafetyNetLogger.java
@@ -63,7 +63,7 @@ public final class SafetyNetLogger {
builder.append(';');
}
builder.append(group.getName()).append('|');
- builder.append(group.areRuntimePermissionsGranted()).append('|');
+ builder.append(group.areRuntimePermissionsGranted(null)).append('|');
builder.append(group.getFlags());
}