summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Winson Chiu <chiuwinson@google.com> 2023-02-14 06:13:57 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-02-14 06:13:57 +0000
commitd87ae0e5e14274198775fd80bb9fab95758f09ac (patch)
tree79237812a85672f20447fb3bdfb9312a7ddecdeb
parent308659946e4c316e06fa7b24a1d2ea7e2e2d2fb0 (diff)
parente8e4974e9ab4bcf7d90ff82ca121ccbdc3d3952b (diff)
Merge "Remove SessionParams USE_FULL_SCREEN_INTENT auto grant"
-rw-r--r--core/java/android/content/pm/PackageInstaller.java58
-rw-r--r--services/core/java/com/android/server/pm/InstallingSession.java2
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java2
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerSession.java11
-rw-r--r--services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt7
5 files changed, 17 insertions, 63 deletions
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 8f864f4f9a79..cfd291f3fa5f 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -30,8 +30,6 @@ import static android.content.pm.PackageInfo.INSTALL_LOCATION_AUTO;
import static android.content.pm.PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY;
import static android.content.pm.PackageInfo.INSTALL_LOCATION_PREFER_EXTERNAL;
-import static com.android.internal.util.XmlUtils.writeStringAttribute;
-
import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.CurrentTimeMillisLong;
@@ -84,7 +82,6 @@ import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.ExceptionUtils;
-import android.util.Log;
import com.android.internal.content.InstallLocationUtils;
import com.android.internal.util.ArrayUtils;
@@ -92,7 +89,6 @@ import com.android.internal.util.DataClass;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
import com.android.internal.util.function.pooled.PooledLambda;
-import com.android.modules.utils.TypedXmlSerializer;
import java.io.Closeable;
import java.io.File;
@@ -2313,11 +2309,6 @@ public class PackageInstaller {
private final ArrayMap<String, Integer> mPermissionStates;
/**
- * @see #getFinalPermissionStates()
- */
- private ArrayMap<String, Integer> mFinalPermissionStates;
-
- /**
* Construct parameters for a new package install session.
*
* @param mode one of {@link #MODE_FULL_INSTALL} or
@@ -2563,11 +2554,6 @@ public class PackageInstaller {
+ (permissionName == null ? "null" : "empty"));
}
- if (mFinalPermissionStates != null) {
- Log.wtf(TAG, "Requested permission " + permissionName + " but final permissions"
- + " were already decided for this session: " + mFinalPermissionStates);
- }
-
switch (state) {
case PERMISSION_STATE_DEFAULT:
mPermissionStates.remove(permissionName);
@@ -3008,48 +2994,10 @@ public class PackageInstaller {
}
}
- /**
- * This is only for use by system server. If you need the actual grant state, use
- * {@link #getFinalPermissionStates()}.
- * <p/>
- * This is implemented here to avoid exposing the raw permission sets to external callers,
- * so that enforcement done in the either of the final methods is the single source of truth
- * for default grant/deny policy.
- *
- * @hide
- */
- public void writePermissionStateXml(@NonNull TypedXmlSerializer out,
- @NonNull String grantTag, @NonNull String denyTag, @NonNull String attrName)
- throws IOException {
- for (int index = 0; index < mPermissionStates.size(); index++) {
- var permissionName = mPermissionStates.keyAt(index);
- var state = mPermissionStates.valueAt(index);
- String tag = state == PERMISSION_STATE_GRANTED ? grantTag : denyTag;
- out.startTag(null, tag);
- writeStringAttribute(out, attrName, permissionName);
- out.endTag(null, tag);
- }
- }
-
- /**
- * Snapshot of final permission states taken when this method is first called, to separate
- * what the caller wanted and the effective state that should be applied to the session.
- *
- * This prevents someone from adding more permissions after the fact.
- *
- * @hide
- */
+ /** @hide */
@NonNull
- public ArrayMap<String, Integer> getFinalPermissionStates() {
- if (mFinalPermissionStates == null) {
- mFinalPermissionStates = new ArrayMap<>(mPermissionStates);
- if (!mFinalPermissionStates.containsKey(
- Manifest.permission.USE_FULL_SCREEN_INTENT)) {
- mFinalPermissionStates.put(Manifest.permission.USE_FULL_SCREEN_INTENT,
- PERMISSION_STATE_GRANTED);
- }
- }
- return mFinalPermissionStates;
+ public ArrayMap<String, Integer> getPermissionStates() {
+ return mPermissionStates;
}
/** @hide */
diff --git a/services/core/java/com/android/server/pm/InstallingSession.java b/services/core/java/com/android/server/pm/InstallingSession.java
index f989f6f5b169..c3cc3929d56d 100644
--- a/services/core/java/com/android/server/pm/InstallingSession.java
+++ b/services/core/java/com/android/server/pm/InstallingSession.java
@@ -153,7 +153,7 @@ class InstallingSession {
mInstallSource = installSource;
mVolumeUuid = sessionParams.volumeUuid;
mPackageAbiOverride = sessionParams.abiOverride;
- mPermissionStates = sessionParams.getFinalPermissionStates();
+ mPermissionStates = sessionParams.getPermissionStates();
mAllowlistedRestrictedPermissions = sessionParams.whitelistedRestrictedPermissions;
mAutoRevokePermissionsMode = sessionParams.autoRevokePermissionsMode;
mSigningDetails = signingDetails;
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index ed9d370fd9e3..08972899e9ef 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -804,7 +804,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
+ " PackageManager.INSTALL_GRANT_ALL_REQUESTED_PERMISSIONS flag");
}
- var permissionStates = params.getFinalPermissionStates();
+ var permissionStates = params.getPermissionStates();
if (!permissionStates.isEmpty()) {
if (!hasInstallGrantRuntimePermissions) {
for (int index = 0; index < permissionStates.size(); index++) {
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 3ad3af3e1c2b..39519039e95b 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -4878,7 +4878,16 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
private static void writePermissionsLocked(@NonNull TypedXmlSerializer out,
@NonNull SessionParams params) throws IOException {
- params.writePermissionStateXml(out, TAG_GRANT_PERMISSION, TAG_DENY_PERMISSION, ATTR_NAME);
+ var permissionStates = params.getPermissionStates();
+ for (int index = 0; index < permissionStates.size(); index++) {
+ var permissionName = permissionStates.keyAt(index);
+ var state = permissionStates.valueAt(index);
+ String tag = state == SessionParams.PERMISSION_STATE_GRANTED ? TAG_GRANT_PERMISSION
+ : TAG_DENY_PERMISSION;
+ out.startTag(null, tag);
+ writeStringAttribute(out, ATTR_NAME, permissionName);
+ out.endTag(null, tag);
+ }
}
private static void writeWhitelistedRestrictedPermissionsLocked(@NonNull TypedXmlSerializer out,
diff --git a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt
index d760dc7c1a66..811b0860ea64 100644
--- a/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt
+++ b/services/tests/PackageManagerServiceTests/server/src/com/android/server/pm/PackageInstallerSessionTest.kt
@@ -15,7 +15,6 @@
*/
package com.android.server.pm
-import android.Manifest
import android.content.Context
import android.content.pm.PackageInstaller
import android.content.pm.PackageInstaller.SessionParams
@@ -122,12 +121,10 @@ class PackageInstallerSessionTest {
writeRestoreAssert(sessions).single().params.run {
assertThat(legacyGrantedRuntimePermissions).asList()
.containsExactly("grantPermission", "denyToGrantPermission")
- assertThat(finalPermissionStates)
+ assertThat(permissionStates)
.containsExactlyEntriesIn(mapOf(
"grantPermission" to PERMISSION_STATE_GRANTED,
"denyToGrantPermission" to PERMISSION_STATE_GRANTED,
- // Fullscreen Intent is auto-granted if the caller has no opinion
- Manifest.permission.USE_FULL_SCREEN_INTENT to PERMISSION_STATE_GRANTED,
"denyPermission" to PERMISSION_STATE_DENIED,
"grantToDenyPermission" to PERMISSION_STATE_DENIED,
))
@@ -282,7 +279,7 @@ class PackageInstallerSessionTest {
assertThat(expected.referrerUri).isEqualTo(actual.referrerUri)
assertThat(expected.abiOverride).isEqualTo(actual.abiOverride)
assertThat(expected.volumeUuid).isEqualTo(actual.volumeUuid)
- assertThat(expected.finalPermissionStates).isEqualTo(actual.finalPermissionStates)
+ assertThat(expected.permissionStates).isEqualTo(actual.permissionStates)
assertThat(expected.installerPackageName).isEqualTo(actual.installerPackageName)
assertThat(expected.isMultiPackage).isEqualTo(actual.isMultiPackage)
assertThat(expected.isStaged).isEqualTo(actual.isStaged)