diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2021-03-29 09:39:08 -0600 |
|---|---|---|
| committer | Jeff Sharkey <jsharkey@google.com> | 2021-03-31 14:19:33 +0000 |
| commit | 2d9355bc449842c7cd0a58afb5095ee20453068d (patch) | |
| tree | 56b35cf1bb41ac098ea879e6bf2a02d3243d996a /core/java/android | |
| parent | 456fb2e78bab4ab585a3977a4d2b0fb1d6b4ee49 (diff) | |
Continue populating legacy data structures.
Previous work implemented getRequestedPermissions() by dynamically
constructing the legacy list of requested permissions, along with a
deprecation message to migrate to ParsedUsesPermission, but there
are too many callers to migrate at this stage of the release.
For now, to mitigate performance issues that arose, this change
builds a parallel list of requested permissions to avoid the
overhead of dynamically building the legacy list.
Bug: 183223056
Test: atest FrameworksServicesTests:PackageParserTest
Test: atest com.android.server.pm.parsing
Test: atest -p core/java/android/content/pm \
core/java/com/android/internal/content \
services/core/java/com/android/server/pm \
services/tests/servicestests/src/com/android/server/pm
Change-Id: I538fbc12a9fd34f5ad5d63177ac5a2cb9a1ff3ce
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/pm/parsing/ParsingPackageImpl.java | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index 60aac76fa8a5..72c9879c9360 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -227,6 +227,14 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { @NonNull @DataClass.ParcelWith(ForInternedStringList.class) protected List<String> adoptPermissions = emptyList(); + /** + * @deprecated consider migrating to {@link #getUsesPermissions} which has + * more parsed details, such as flags + */ + @NonNull + @Deprecated + @DataClass.ParcelWith(ForInternedStringList.class) + protected List<String> requestedPermissions = emptyList(); @NonNull private List<ParsedUsesPermission> usesPermissions = emptyList(); @@ -701,6 +709,11 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { @Override public ParsingPackageImpl addUsesPermission(ParsedUsesPermission permission) { this.usesPermissions = CollectionUtils.add(this.usesPermissions, permission); + + // Continue populating legacy data structures to avoid performance + // issues until all that code can be migrated + this.requestedPermissions = CollectionUtils.add(this.requestedPermissions, permission.name); + return this; } @@ -1142,6 +1155,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { dest.writeByteArray(this.restrictUpdateHash); dest.writeStringList(this.originalPackages); sForInternedStringList.parcel(this.adoptPermissions, dest, flags); + sForInternedStringList.parcel(this.requestedPermissions, dest, flags); dest.writeTypedList(this.usesPermissions); sForInternedStringList.parcel(this.implicitPermissions, dest, flags); sForStringSet.parcel(this.upgradeKeySets, dest, flags); @@ -1264,6 +1278,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { this.restrictUpdateHash = in.createByteArray(); this.originalPackages = in.createStringArrayList(); this.adoptPermissions = sForInternedStringList.unparcel(in); + this.requestedPermissions = sForInternedStringList.unparcel(in); this.usesPermissions = in.createTypedArrayList(ParsedUsesPermission.CREATOR); this.implicitPermissions = sForInternedStringList.unparcel(in); this.upgradeKeySets = sForStringSet.unparcel(in); @@ -1558,15 +1573,14 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable { return adoptPermissions; } + /** + * @deprecated consider migrating to {@link #getUsesPermissions} which has + * more parsed details, such as flags + */ @NonNull @Override + @Deprecated public List<String> getRequestedPermissions() { - final List<ParsedUsesPermission> usesPermissions = getUsesPermissions(); - final int size = usesPermissions.size(); - final List<String> requestedPermissions = new ArrayList<>(size); - for (int i = 0; i < size; i++) { - requestedPermissions.add(usesPermissions.get(i).name); - } return requestedPermissions; } |
