From ea82335c13155c71e2187635ce8fb25f180316e2 Mon Sep 17 00:00:00 2001 From: Hai Zhang Date: Fri, 4 Nov 2022 08:37:26 +0000 Subject: [PATCH] Add knownCerts to system API and copy constructor. PermissionInfo.PROTECTION_FLAG_KNOWN_SIGNER is already @SystemApi, and we need system API for accessing the actual certs in the modularized permission subsystem. The copy constructor missed knownCerts in ag/13504004 and is fixed now. knownCerts isn't deep copied in the copy constructor because PackageItemInfo.metaData isn't deep copied either. Bug: 182523293 Test: atest CtsContentTestCases:PermissionInfoTest Change-Id: I784764fdf7238f6b10455ff40c693de0823a94cb --- core/api/system-current.txt | 1 + core/java/android/content/pm/PermissionInfo.java | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 70b89b8af0448..20bdfcbe8257b 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -3617,6 +3617,7 @@ package android.content.pm { field public static final int PROTECTION_FLAG_SYSTEM_TEXT_CLASSIFIER = 65536; // 0x10000 field @Deprecated public static final int PROTECTION_FLAG_WELLBEING = 131072; // 0x20000 field @Nullable public final String backgroundPermission; + field @NonNull public java.util.Set knownCerts; field @StringRes public int requestRes; } diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java index bb88486a014d9..7c22c08860b19 100644 --- a/core/java/android/content/pm/PermissionInfo.java +++ b/core/java/android/content/pm/PermissionInfo.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.StringRes; +import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; import android.compat.annotation.UnsupportedAppUsage; @@ -33,6 +34,7 @@ import com.android.internal.util.Parcelling.BuiltIn.ForStringSet; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.util.Collections; import java.util.Set; /** @@ -486,7 +488,10 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { * * @hide */ - public @Nullable Set knownCerts; + // Already being used as mutable and most other fields in this class are also mutable. + @SuppressLint("MutableBareField") + @SystemApi + public @NonNull Set knownCerts = Collections.emptySet(); /** @hide */ public static int fixProtectionLevel(int level) { @@ -620,6 +625,8 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { descriptionRes = orig.descriptionRes; requestRes = orig.requestRes; nonLocalizedDescription = orig.nonLocalizedDescription; + // Note that knownCerts wasn't properly copied before Android U. + knownCerts = orig.knownCerts; } /**