diff --git a/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt b/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt index f9ddf9a9a59a7..90dca25b3b70a 100644 --- a/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt +++ b/apct-tests/perftests/core/src/android/os/PackageParsingPerfTest.kt @@ -191,7 +191,7 @@ class PackageParsingPerfTest { } class ParallelParser2(cacher: PackageCacher2? = null) - : ParallelParser(cacher) { + : ParallelParser(cacher) { val input = ThreadLocal.withInitial { // For testing, just disable enforcement to avoid hooking up to compat framework ParseTypeImpl(ParseInput.Callback { _, _, _ -> false }) @@ -211,7 +211,6 @@ class PackageParsingPerfTest { override fun parseImpl(file: File) = parser.parsePackage(input.get()!!.reset(), file, 0).result - as ParsingPackageImpl } abstract class PackageCacher(private val cacheDir: File) { @@ -267,7 +266,7 @@ class PackageParsingPerfTest { /** * Re-implementation of the server side PackageCacher, as it's inaccessible here. */ - class PackageCacher2(cacheDir: File) : PackageCacher(cacheDir) { + class PackageCacher2(cacheDir: File) : PackageCacher(cacheDir) { override fun fromParcel(parcel: Parcel) = ParsingPackageImpl(parcel) } } diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 1b34d9ba2e5df..29ce3971e83a3 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -7970,10 +7970,13 @@ public class PackageParser { ai.enabled = false; } ai.enabledSetting = state.enabled; + if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) { + ai.category = state.categoryHint; + } if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) { ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName); } - ai.seInfoUser = SELinuxUtil.getSeinfoUser(state); + ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state); final OverlayPaths overlayPaths = state.getAllOverlayPaths(); if (overlayPaths != null) { ai.resourceDirs = overlayPaths.getResourceDirs().toArray(new String[0]); diff --git a/core/java/android/content/pm/PackageUserState.java b/core/java/android/content/pm/PackageUserState.java index 3fb1999bb6ba3..84317b3739c5f 100644 --- a/core/java/android/content/pm/PackageUserState.java +++ b/core/java/android/content/pm/PackageUserState.java @@ -48,26 +48,20 @@ import android.util.TypedXmlSerializer; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; -import com.android.internal.util.CollectionUtils; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; -import java.util.Arrays; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Set; /** * Per-user state information about a package. * @hide */ -public class PackageUserState implements android.content.pm.pkg.PackageUserState { +public class PackageUserState { private static final boolean DEBUG = false; private static final String LOG_TAG = "PackageUserState"; @@ -83,7 +77,7 @@ public class PackageUserState implements android.content.pm.pkg.PackageUserState public boolean virtualPreload; public int enabled; public String lastDisableAppCaller; - @PackageManager.InstallReason + public int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED; public int installReason; public @PackageManager.UninstallReason int uninstallReason; public String harmfulAppWarning; @@ -124,6 +118,7 @@ public class PackageUserState implements android.content.pm.pkg.PackageUserState virtualPreload = o.virtualPreload; enabled = o.enabled; lastDisableAppCaller = o.lastDisableAppCaller; + categoryHint = o.categoryHint; installReason = o.installReason; uninstallReason = o.uninstallReason; disabledComponents = ArrayUtils.cloneOrNull(o.disabledComponents); @@ -139,6 +134,16 @@ public class PackageUserState implements android.content.pm.pkg.PackageUserState splashScreenTheme = o.splashScreenTheme; } + @Nullable + public OverlayPaths getOverlayPaths() { + return overlayPaths; + } + + @Nullable + public Map getSharedLibraryOverlayPaths() { + return sharedLibraryOverlayPaths; + } + /** * Sets the path of overlays currently enabled for this package and user combination. * @return true if the path contents differ than what they were previously @@ -438,6 +443,9 @@ public class PackageUserState implements android.content.pm.pkg.PackageUserState && !lastDisableAppCaller.equals(oldState.lastDisableAppCaller))) { return false; } + if (categoryHint != oldState.categoryHint) { + return false; + } if (installReason != oldState.installReason) { return false; } @@ -498,6 +506,7 @@ public class PackageUserState implements android.content.pm.pkg.PackageUserState hashCode = 31 * hashCode + Boolean.hashCode(virtualPreload); hashCode = 31 * hashCode + enabled; hashCode = 31 * hashCode + Objects.hashCode(lastDisableAppCaller); + hashCode = 31 * hashCode + categoryHint; hashCode = 31 * hashCode + installReason; hashCode = 31 * hashCode + uninstallReason; hashCode = 31 * hashCode + Objects.hashCode(disabledComponents); @@ -507,103 +516,6 @@ public class PackageUserState implements android.content.pm.pkg.PackageUserState return hashCode; } - @Override - public long getCeDataInode() { - return ceDataInode; - } - - @NonNull - @Override - public Set getDisabledComponents() { - return disabledComponents; - } - - @PackageManager.DistractionRestriction - @Override - public int getDistractionFlags() { - return distractionFlags; - } - - @NonNull - @Override - public Set getEnabledComponents() { - return enabledComponents; - } - - @Override - public int getEnabledState() { - return enabled; - } - - @Nullable - @Override - public String getHarmfulAppWarning() { - return harmfulAppWarning; - } - - @Override - public int getInstallReason() { - return installReason; - } - - @Nullable - @Override - public String getLastDisableAppCaller() { - return lastDisableAppCaller; - } - - @Nullable - @Override - public OverlayPaths getOverlayPaths() { - return overlayPaths; - } - - @Nullable - @Override - public Map getSharedLibraryOverlayPaths() { - return sharedLibraryOverlayPaths; - } - - @Override - public int getUninstallReason() { - return uninstallReason; - } - - @Override - public boolean isHidden() { - return hidden; - } - - @Override - public boolean isInstalled() { - return installed; - } - - @Override - public boolean isInstantApp() { - return instantApp; - } - - @Override - public boolean isNotLaunched() { - return notLaunched; - } - - @Override - public boolean isStopped() { - return stopped; - } - - @Override - public boolean isSuspended() { - return suspended; - } - - @Override - public boolean isVirtualPreload() { - return virtualPreload; - } - /** * Container to describe suspension parameters. */ diff --git a/core/java/android/content/pm/SELinuxUtil.java b/core/java/android/content/pm/SELinuxUtil.java index d8d52b79a680f..025c0fe308775 100644 --- a/core/java/android/content/pm/SELinuxUtil.java +++ b/core/java/android/content/pm/SELinuxUtil.java @@ -16,6 +16,8 @@ package android.content.pm; +import com.android.internal.util.ArrayUtils; + /** * Utility methods that need to be used in application space. * @hide @@ -29,10 +31,11 @@ public final class SELinuxUtil { public static final String COMPLETE_STR = ":complete"; /** @hide */ - public static String getSeinfoUser(PackageUserState userState) { + public static String assignSeinfoUser(PackageUserState userState) { if (userState.instantApp) { return INSTANT_APP_STR + COMPLETE_STR; } return COMPLETE_STR; } + } diff --git a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java index 747015d4f9efc..dfc1886a9a036 100644 --- a/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java +++ b/core/java/android/content/pm/parsing/PackageInfoWithoutStateUtils.java @@ -213,8 +213,8 @@ public class PackageInfoWithoutStateUtils { PackageInfo pi = new PackageInfo(); pi.packageName = pkg.getPackageName(); pi.splitNames = pkg.getSplitNames(); - pi.versionCode = ((ParsingPackageHidden) pkg).getVersionCode(); - pi.versionCodeMajor = ((ParsingPackageHidden) pkg).getVersionCodeMajor(); + pi.versionCode = pkg.getVersionCode(); + pi.versionCodeMajor = pkg.getVersionCodeMajor(); pi.baseRevisionCode = pkg.getBaseRevisionCode(); pi.splitRevisionCodes = pkg.getSplitRevisionCodes(); pi.versionName = pkg.getVersionName(); @@ -229,7 +229,7 @@ public class PackageInfoWithoutStateUtils { pi.restrictedAccountType = pkg.getRestrictedAccountType(); pi.requiredAccountType = pkg.getRequiredAccountType(); pi.overlayTarget = pkg.getOverlayTarget(); - pi.targetOverlayableName = pkg.getOverlayTargetOverlayableName(); + pi.targetOverlayableName = pkg.getOverlayTargetName(); pi.overlayCategory = pkg.getOverlayCategory(); pi.overlayPriority = pkg.getOverlayPriority(); pi.mOverlayIsStatic = pkg.isOverlayIsStatic(); @@ -246,10 +246,10 @@ public class PackageInfoWithoutStateUtils { pi.configPreferences = new ConfigurationInfo[size]; pkg.getConfigPreferences().toArray(pi.configPreferences); } - size = pkg.getRequestedFeatures().size(); + size = pkg.getReqFeatures().size(); if (size > 0) { pi.reqFeatures = new FeatureInfo[size]; - pkg.getRequestedFeatures().toArray(pi.reqFeatures); + pkg.getReqFeatures().toArray(pi.reqFeatures); } size = pkg.getFeatureGroups().size(); if (size > 0) { @@ -389,10 +389,10 @@ public class PackageInfoWithoutStateUtils { */ @NonNull public static ApplicationInfo generateApplicationInfoUnchecked(@NonNull ParsingPackageRead pkg, - @PackageManager.ApplicationInfoFlags int flags, @NonNull PackageUserState state, - int userId, boolean assignUserFields) { + @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId, + boolean assignUserFields) { // Make shallow copy so we can store the metadata/libraries safely - ApplicationInfo ai = ((ParsingPackageHidden) pkg).toAppInfoWithoutState(); + ApplicationInfo ai = pkg.toAppInfoWithoutState(); if (assignUserFields) { assignUserFields(pkg, ai, userId); @@ -434,10 +434,13 @@ public class PackageInfoWithoutStateUtils { ai.enabled = false; } ai.enabledSetting = state.enabled; + if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) { + ai.category = state.categoryHint; + } if (ai.category == ApplicationInfo.CATEGORY_UNDEFINED) { ai.category = FallbackCategoryProvider.getFallbackCategory(ai.packageName); } - ai.seInfoUser = SELinuxUtil.getSeinfoUser(state); + ai.seInfoUser = SELinuxUtil.assignSeinfoUser(state); final OverlayPaths overlayPaths = state.getAllOverlayPaths(); if (overlayPaths != null) { ai.resourceDirs = overlayPaths.getResourceDirs().toArray(new String[0]); diff --git a/core/java/android/content/pm/parsing/ParsingPackage.java b/core/java/android/content/pm/parsing/ParsingPackage.java index 14d69ccdf17d6..d6e1ac903c42f 100644 --- a/core/java/android/content/pm/parsing/ParsingPackage.java +++ b/core/java/android/content/pm/parsing/ParsingPackage.java @@ -300,7 +300,9 @@ public interface ParsingPackage extends ParsingPackageRead { ParsingPackage setOverlayTarget(String overlayTarget); - ParsingPackage setOverlayTargetOverlayableName(String overlayTargetOverlayableName); + ParsingPackage setOverlayTargetName(String overlayTargetName); + + ParsingPackage setRealPackage(String realPackage); ParsingPackage setRequiredAccountType(String requiredAccountType); diff --git a/core/java/android/content/pm/parsing/ParsingPackageHidden.java b/core/java/android/content/pm/parsing/ParsingPackageHidden.java deleted file mode 100644 index c49d11e738a72..0000000000000 --- a/core/java/android/content/pm/parsing/ParsingPackageHidden.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.content.pm.parsing; - -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; - -/** - * Methods that normal consumers should not have access to. This usually means the field is stateful - * or deprecated and should be access through a utility class or a system manager class. - *

- * This is a separate interface, not implemented by the base {@link ParsingPackageRead} because Java - * doesn't support non-public interface methods. The class must be cast to this interface. - * - * @hide - */ -interface ParsingPackageHidden { - - /** - * @see PackageInfo#versionCode - * @see ApplicationInfo#versionCode - */ - int getVersionCode(); - - /** - * @see PackageInfo#versionCodeMajor - */ - int getVersionCodeMajor(); - - // TODO(b/135203078): Hide and enforce going through PackageInfoUtils - ApplicationInfo toAppInfoWithoutState(); -} diff --git a/core/java/android/content/pm/parsing/ParsingPackageImpl.java b/core/java/android/content/pm/parsing/ParsingPackageImpl.java index 5a5f6db6ae97c..f0d95d97263a9 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageImpl.java +++ b/core/java/android/content/pm/parsing/ParsingPackageImpl.java @@ -89,7 +89,9 @@ import java.util.UUID; * * @hide */ -public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, Parcelable { +public class ParsingPackageImpl implements ParsingPackage, Parcelable { + + private static final String TAG = "PackageImpl"; public static ForBoolean sForBoolean = Parcelling.Cache.getOrCreate(ForBoolean.class); public static ForInternedString sForInternedString = Parcelling.Cache.getOrCreate( @@ -145,6 +147,10 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, @DataClass.ParcelWith(ForInternedString.class) protected String packageName; + @Nullable + @DataClass.ParcelWith(ForInternedString.class) + private String realPackage; + @NonNull protected String mBaseApkPath; @@ -160,7 +166,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, private String overlayTarget; @Nullable @DataClass.ParcelWith(ForInternedString.class) - private String overlayTargetOverlayableName; + private String overlayTargetName; @Nullable @DataClass.ParcelWith(ForInternedString.class) private String overlayCategory; @@ -1013,6 +1019,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, return appInfo; } + @Override public ApplicationInfo toAppInfoWithoutStateWithoutFlags() { ApplicationInfo appInfo = new ApplicationInfo(); @@ -1119,11 +1126,12 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, dest.writeInt(this.compileSdkVersion); dest.writeString(this.compileSdkVersionCodeName); sForInternedString.parcel(this.packageName, dest, flags); + dest.writeString(this.realPackage); dest.writeString(this.mBaseApkPath); dest.writeString(this.restrictedAccountType); dest.writeString(this.requiredAccountType); sForInternedString.parcel(this.overlayTarget, dest, flags); - dest.writeString(this.overlayTargetOverlayableName); + dest.writeString(this.overlayTargetName); dest.writeString(this.overlayCategory); dest.writeInt(this.overlayPriority); sForInternedStringValueMap.parcel(this.overlayables, dest, flags); @@ -1242,11 +1250,12 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, this.compileSdkVersion = in.readInt(); this.compileSdkVersionCodeName = in.readString(); this.packageName = sForInternedString.unparcel(in); + this.realPackage = in.readString(); this.mBaseApkPath = in.readString(); this.restrictedAccountType = in.readString(); this.requiredAccountType = in.readString(); this.overlayTarget = sForInternedString.unparcel(in); - this.overlayTargetOverlayableName = in.readString(); + this.overlayTargetName = in.readString(); this.overlayCategory = in.readString(); this.overlayPriority = in.readInt(); this.overlayables = sForInternedStringValueMap.unparcel(in); @@ -1374,11 +1383,6 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, return versionCodeMajor; } - @Override - public long getLongVersionCode() { - return mLongVersionCode; - } - @Override public int getBaseRevisionCode() { return baseRevisionCode; @@ -1407,6 +1411,12 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, return packageName; } + @Nullable + @Override + public String getRealPackage() { + return realPackage; + } + @NonNull @Override public String getBaseApkPath() { @@ -1438,8 +1448,8 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, @Nullable @Override - public String getOverlayTargetOverlayableName() { - return overlayTargetOverlayableName; + public String getOverlayTargetName() { + return overlayTargetName; } @Nullable @@ -1542,7 +1552,7 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, @NonNull @Override - public List getRequestedFeatures() { + public List getReqFeatures() { return reqFeatures; } @@ -1929,13 +1939,13 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, } @Override - public int getTargetSdkVersion() { - return targetSdkVersion; + public int getTargetSandboxVersion() { + return targetSandboxVersion; } @Override - public int getTargetSandboxVersion() { - return targetSandboxVersion; + public int getTargetSdkVersion() { + return targetSdkVersion; } @Nullable @@ -2687,6 +2697,12 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, return this; } + @Override + public ParsingPackageImpl setRealPackage(@Nullable String realPackage) { + this.realPackage = realPackage; + return this; + } + @Override public ParsingPackageImpl setRestrictedAccountType(@Nullable String restrictedAccountType) { this.restrictedAccountType = restrictedAccountType; @@ -2694,9 +2710,8 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden, } @Override - public ParsingPackageImpl setOverlayTargetOverlayableName( - @Nullable String overlayTargetOverlayableName) { - this.overlayTargetOverlayableName = overlayTargetOverlayableName; + public ParsingPackageImpl setOverlayTargetName(@Nullable String overlayTargetName) { + this.overlayTargetName = overlayTargetName; return this; } diff --git a/core/java/android/content/pm/parsing/ParsingPackageInternal.java b/core/java/android/content/pm/parsing/ParsingPackageInternal.java deleted file mode 100644 index ca16fa2d97eb9..0000000000000 --- a/core/java/android/content/pm/parsing/ParsingPackageInternal.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.content.pm.parsing; - -import android.annotation.Nullable; -import android.content.pm.PackageInfo; - -import com.android.internal.R; - -/** - * Methods which would've been a part of {@link PkgWithoutStatePackageInfo} or {@link - * PkgWithoutStateAppInfo}, but are removed/deprecated. - *

- * This is different from {@link ParsingPackageHidden}. The methods in that interface cannot be - * accessed by anyone except the parsing utilities, whereas the methods in this interface are valid - * and can be accessed by any internal caller that needs it. - * - * @hide - */ -interface ParsingPackageInternal { - - /** - * @see PackageInfo#overlayCategory - * @see R.styleable#AndroidManifestResourceOverlay_category - */ - @Nullable - String getOverlayCategory(); - - /** - * @see PackageInfo#overlayPriority - * @see R.styleable#AndroidManifestResourceOverlay_priority - */ - int getOverlayPriority(); - - /** - * @see PackageInfo#overlayTarget - * @see R.styleable#AndroidManifestResourceOverlay_targetPackage - */ - @Nullable - String getOverlayTarget(); - - /** - * @see PackageInfo#targetOverlayableName - * @see R.styleable#AndroidManifestResourceOverlay_targetName - */ - @Nullable - String getOverlayTargetOverlayableName(); - - /** - * @see PackageInfo#mOverlayIsStatic - */ - boolean isOverlayIsStatic(); -} diff --git a/core/java/android/content/pm/parsing/ParsingPackageRead.java b/core/java/android/content/pm/parsing/ParsingPackageRead.java index 4a249bb0846e4..d5bd3a93bcbd3 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageRead.java +++ b/core/java/android/content/pm/parsing/ParsingPackageRead.java @@ -19,18 +19,30 @@ package android.content.pm.parsing; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Intent; +import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; +import android.content.pm.ConfigurationInfo; +import android.content.pm.FeatureGroupInfo; +import android.content.pm.FeatureInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager.Property; -import android.content.pm.PackageParser; +import android.content.pm.ServiceInfo; import android.content.pm.SigningDetails; +import android.content.pm.parsing.component.ParsedActivity; import android.content.pm.parsing.component.ParsedAttribution; +import android.content.pm.parsing.component.ParsedInstrumentation; import android.content.pm.parsing.component.ParsedIntentInfo; +import android.content.pm.parsing.component.ParsedPermission; import android.content.pm.parsing.component.ParsedPermissionGroup; import android.content.pm.parsing.component.ParsedProcess; +import android.content.pm.parsing.component.ParsedProvider; +import android.content.pm.parsing.component.ParsedService; import android.content.pm.parsing.component.ParsedUsesPermission; import android.os.Bundle; +import android.os.Parcelable; import android.util.ArraySet; import android.util.Pair; +import android.util.SparseArray; import android.util.SparseIntArray; import java.security.PublicKey; @@ -43,21 +55,41 @@ import java.util.Set; * * @hide */ -public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutStatePackageInfo, - ParsingPackageInternal { +@SuppressWarnings("UnusedReturnValue") +public interface ParsingPackageRead extends Parcelable { /** - * The names of packages to adopt ownership of permissions from, parsed under {@link - * PackageParser#TAG_ADOPT_PERMISSIONS}. - * + * @see ActivityInfo + * @see PackageInfo#activities + */ + @NonNull + List getActivities(); + + /** + * The names of packages to adopt ownership of permissions from, parsed under + * {@link ParsingPackageUtils#TAG_ADOPT_PERMISSIONS}. * @see R.styleable#AndroidManifestOriginalPackage_name */ @NonNull List getAdoptPermissions(); + /** + * @see PackageInfo#configPreferences + * @see R.styleable#AndroidManifestUsesConfiguration + */ + @NonNull + List getConfigPreferences(); + @NonNull List getAttributions(); + /** + * @see PackageInfo#featureGroups + * @see R.styleable#AndroidManifestUsesFeature + */ + @NonNull + List getFeatureGroups(); + /** * Permissions requested but not in the manifest. These may have been split or migrated from * previous versions/definitions. @@ -65,13 +97,16 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt @NonNull List getImplicitPermissions(); + /** + * @see android.content.pm.InstrumentationInfo + * @see PackageInfo#instrumentation + */ @NonNull - List getUsesPermissions(); + List getInstrumentations(); /** - * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in {@link - * PackageParser#TAG_KEY_SETS}. - * + * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in + * {@link ParsingPackageUtils#TAG_KEY_SETS}. * @see R.styleable#AndroidManifestKeySet * @see R.styleable#AndroidManifestPublicKey */ @@ -80,31 +115,14 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt /** * Library names this package is declared as, for use by other packages with "uses-library". - * * @see R.styleable#AndroidManifestLibrary */ @NonNull List getLibraryNames(); /** - * TODO(b/135203078): Make all the Bundles immutable (and non-null by shared empty reference?) - */ - @Nullable - Bundle getMetaData(); - - @Nullable - Set getMimeGroups(); - - /** - * @see R.styleable#AndroidManifestExtensionSdk - */ - @Nullable - SparseIntArray getMinExtensionVersions(); - - /** - * For system use to migrate from an old package name to a new one, moving over data if - * available. - * + * For system use to migrate from an old package name to a new one, moving over data + * if available. * @see R.styleable#AndroidManifestOriginalPackage} */ @NonNull @@ -116,6 +134,13 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt @NonNull Map getOverlayables(); + /** + * @see android.content.pm.PermissionInfo + * @see PackageInfo#permissions + */ + @NonNull + List getPermissions(); + /** * @see android.content.pm.PermissionGroupInfo */ @@ -124,13 +149,27 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt /** * Used to determine the default preferred handler of an {@link Intent}. - *

- * Map of component className to intent info inside that component. TODO(b/135203078): Is this - * actually used/working? + * + * Map of component className to intent info inside that component. + * TODO(b/135203078): Is this actually used/working? */ @NonNull List> getPreferredActivityFilters(); + /** + * System protected broadcasts. + * @see R.styleable#AndroidManifestProtectedBroadcast + */ + @NonNull + List getProtectedBroadcasts(); + + /** + * @see android.content.pm.ProviderInfo + * @see PackageInfo#providers + */ + @NonNull + List getProviders(); + /** * @see android.content.pm.ProcessInfo */ @@ -138,50 +177,39 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt Map getProcesses(); /** - * System protected broadcasts. - * - * @see R.styleable#AndroidManifestProtectedBroadcast + * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even + * though they represent different functionality. + * TODO(b/135203078): Reconsider this and maybe make ParsedReceiver so it's not so confusing + * @see ActivityInfo + * @see PackageInfo#receivers */ @NonNull - List getProtectedBroadcasts(); + List getReceivers(); /** - * Intents that this package may query or require and thus requires visibility into. - * - * @see R.styleable#AndroidManifestQueriesIntent + * @see PackageInfo#reqFeatures + * @see R.styleable#AndroidManifestUsesFeature */ @NonNull - List getQueriesIntents(); + List getReqFeatures(); /** - * Other packages that this package may query or require and thus requires visibility into. - * - * @see R.styleable#AndroidManifestQueriesPackage + * @deprecated consider migrating to {@link #getUsesPermissions} which has + * more parsed details, such as flags */ @NonNull - List getQueriesPackages(); + @Deprecated + List getRequestedPermissions(); /** - * Authorities that this package may query or require and thus requires visibility into. - * - * @see R.styleable#AndroidManifestQueriesProvider + * All the permissions declared. This is an effective set, and may include permissions + * transformed from split/migrated permissions from previous versions, so may not be exactly + * what the package declares in its manifest. + * @see PackageInfo#requestedPermissions + * @see R.styleable#AndroidManifestUsesPermission */ @NonNull - Set getQueriesProviders(); - - /** - * SHA-512 hash of the only APK that can be used to update a system package. - * - * @see R.styleable#AndroidManifestRestrictUpdate - */ - @Nullable - byte[] getRestrictUpdateHash(); - - /** - * The signature data of all APKs in this package, which must be exactly the same across the - * base and splits. - */ - SigningDetails getSigningDetails(); + List getUsesPermissions(); /** * Returns the properties set on the application @@ -190,58 +218,40 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt Map getProperties(); /** - * Flags of any split APKs; ordered by parsed splitName + * Whether or not the app requested explicitly resizeable Activities. + * A null value means nothing was explicitly requested. */ @Nullable - int[] getSplitFlags(); + Boolean getResizeableActivity(); /** - * @see R.styleable#AndroidManifestStaticLibrary_name - */ - @Nullable - String getStaticSharedLibName(); - - /** - * @see R.styleable#AndroidManifestStaticLibrary_version - */ - long getStaticSharedLibVersion(); - - /** - * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in {@link - * PackageParser#TAG_KEY_SETS}. - * - * @see R.styleable#AndroidManifestUpgradeKeySet + * @see ServiceInfo + * @see PackageInfo#services */ @NonNull - Set getUpgradeKeySets(); + List getServices(); - /** - * @see R.styleable#AndroidManifestUsesLibrary - */ + /** @see R.styleable#AndroidManifestUsesLibrary */ @NonNull List getUsesLibraries(); /** - * @see R.styleable#AndroidManifestUsesNativeLibrary - */ - @NonNull - List getUsesNativeLibraries(); - - /** - * Like {@link #getUsesLibraries()}, but marked optional by setting {@link - * R.styleable#AndroidManifestUsesLibrary_required} to false . Application is expected to handle - * absence manually. - * + * Like {@link #getUsesLibraries()}, but marked optional by setting + * {@link R.styleable#AndroidManifestUsesLibrary_required} to false . Application is expected + * to handle absence manually. * @see R.styleable#AndroidManifestUsesLibrary */ @NonNull List getUsesOptionalLibraries(); + /** @see R.styleabele#AndroidManifestUsesNativeLibrary */ + @NonNull + List getUsesNativeLibraries(); + /** - * Like {@link #getUsesNativeLibraries()}, but marked optional by setting {@link - * R.styleable#AndroidManifestUsesNativeLibrary_required} to false . Application is expected to - * handle absence manually. - * + * Like {@link #getUsesNativeLibraries()}, but marked optional by setting + * {@link R.styleable#AndroidManifestUsesNativeLibrary_required} to false . Application is + * expected to handle absence manually. * @see R.styleable#AndroidManifestUsesNativeLibrary */ @NonNull @@ -249,52 +259,672 @@ public interface ParsingPackageRead extends PkgWithoutStateAppInfo, PkgWithoutSt /** * TODO(b/135203078): Move static library stuff to an inner data class - * * @see R.styleable#AndroidManifestUsesStaticLibrary */ @NonNull List getUsesStaticLibraries(); - /** - * @see R.styleable#AndroidManifestUsesStaticLibrary_certDigest - */ + /** @see R.styleable#AndroidManifestUsesStaticLibrary_certDigest */ @Nullable String[][] getUsesStaticLibrariesCertDigests(); - /** - * @see R.styleable#AndroidManifestUsesStaticLibrary_version - */ + /** @see R.styleable#AndroidManifestUsesStaticLibrary_version */ @Nullable long[] getUsesStaticLibrariesVersions(); - boolean hasPreserveLegacyExternalStorage(); + /** + * Intents that this package may query or require and thus requires visibility into. + * @see R.styleable#AndroidManifestQueriesIntent + */ + @NonNull + List getQueriesIntents(); /** - * @see R.styleable#AndroidManifestApplication_forceQueryable + * Other packages that this package may query or require and thus requires visibility into. + * @see R.styleable#AndroidManifestQueriesPackage */ + @NonNull + List getQueriesPackages(); + + /** + * Authorities that this package may query or require and thus requires visibility into. + * @see R.styleable#AndroidManifestQueriesProvider + */ + @NonNull + Set getQueriesProviders(); + + /** + * We store the application meta-data independently to avoid multiple unwanted references + * TODO(b/135203078): What does this comment mean? + * TODO(b/135203078): Make all the Bundles immutable (and non-null by shared empty reference?) + */ + @Nullable + Bundle getMetaData(); + + /** @see R.styleable#AndroidManifestApplication_forceQueryable */ boolean isForceQueryable(); /** - * @see ApplicationInfo#FLAG_IS_GAME + * @see ApplicationInfo#maxAspectRatio + * @see R.styleable#AndroidManifestApplication_maxAspectRatio */ + float getMaxAspectRatio(); + + /** + * @see ApplicationInfo#minAspectRatio + * @see R.styleable#AndroidManifestApplication_minAspectRatio + */ + float getMinAspectRatio(); + + /** + * @see ApplicationInfo#permission + * @see R.styleable#AndroidManifestApplication_permission + */ + @Nullable + String getPermission(); + + /** + * @see ApplicationInfo#processName + * @see R.styleable#AndroidManifestApplication_process + */ + @NonNull + String getProcessName(); + + /** + * @see PackageInfo#sharedUserId + * @see R.styleable#AndroidManifest_sharedUserId + */ + @Deprecated + @Nullable + String getSharedUserId(); + + /** @see R.styleable#AndroidManifestStaticLibrary_name */ + @Nullable + String getStaticSharedLibName(); + + /** + * @see ApplicationInfo#taskAffinity + * @see R.styleable#AndroidManifestApplication_taskAffinity + */ + @Nullable + String getTaskAffinity(); + + /** + * @see ApplicationInfo#targetSdkVersion + * @see R.styleable#AndroidManifestUsesSdk_targetSdkVersion + */ + int getTargetSdkVersion(); + + /** + * @see ApplicationInfo#uiOptions + * @see R.styleable#AndroidManifestApplication_uiOptions + */ + int getUiOptions(); + + boolean isCrossProfile(); + + boolean isResizeableActivityViaSdkVersion(); + + /** @see ApplicationInfo#FLAG_HARDWARE_ACCELERATED */ + boolean isBaseHardwareAccelerated(); + + /** + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_resizeable + * @see ApplicationInfo#FLAG_RESIZEABLE_FOR_SCREENS + */ + boolean isResizeable(); + + /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE */ + boolean isAllowAudioPlaybackCapture(); + + /** @see ApplicationInfo#FLAG_ALLOW_BACKUP */ + boolean isAllowBackup(); + + /** @see ApplicationInfo#FLAG_ALLOW_CLEAR_USER_DATA */ + boolean isAllowClearUserData(); + + /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE */ + boolean isAllowClearUserDataOnFailedRestore(); + + /** @see ApplicationInfo#FLAG_ALLOW_TASK_REPARENTING */ + boolean isAllowTaskReparenting(); + + /** + * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY + * @see ApplicationInfo#isResourceOverlay() + */ + boolean isOverlay(); + + /** @see ApplicationInfo#PRIVATE_FLAG_BACKUP_IN_FOREGROUND */ + boolean isBackupInForeground(); + + /** @see ApplicationInfo#PRIVATE_FLAG_CANT_SAVE_STATE */ + boolean isCantSaveState(); + + /** @see ApplicationInfo#FLAG_DEBUGGABLE */ + boolean isDebuggable(); + + /** @see ApplicationInfo#PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE */ + boolean isDefaultToDeviceProtectedStorage(); + + /** @see ApplicationInfo#PRIVATE_FLAG_DIRECT_BOOT_AWARE */ + boolean isDirectBootAware(); + + /** @see ApplicationInfo#FLAG_EXTERNAL_STORAGE */ + boolean isExternalStorage(); + + /** @see ApplicationInfo#FLAG_EXTRACT_NATIVE_LIBS */ + boolean isExtractNativeLibs(); + + /** @see ApplicationInfo#FLAG_FULL_BACKUP_ONLY */ + boolean isFullBackupOnly(); + + /** @see ApplicationInfo#FLAG_HAS_CODE */ + boolean isHasCode(); + + /** @see ApplicationInfo#PRIVATE_FLAG_HAS_FRAGILE_USER_DATA */ + boolean isHasFragileUserData(); + + /** @see ApplicationInfo#FLAG_IS_GAME */ @Deprecated boolean isGame(); + /** @see ApplicationInfo#PRIVATE_FLAG_ISOLATED_SPLIT_LOADING */ + boolean isIsolatedSplitLoading(); + + /** @see ApplicationInfo#FLAG_KILL_AFTER_RESTORE */ + boolean isKillAfterRestore(); + + /** @see ApplicationInfo#FLAG_LARGE_HEAP */ + boolean isLargeHeap(); + + /** @see ApplicationInfo#FLAG_MULTIARCH */ + boolean isMultiArch(); + + /** @see ApplicationInfo#PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE */ + boolean isPartiallyDirectBootAware(); + + /** @see ApplicationInfo#FLAG_PERSISTENT */ + boolean isPersistent(); + + /** @see ApplicationInfo#PRIVATE_FLAG_PROFILEABLE_BY_SHELL */ + boolean isProfileableByShell(); + + /** @see ApplicationInfo#PRIVATE_FLAG_EXT_PROFILEABLE */ + boolean isProfileable(); + + /** @see ApplicationInfo#PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE */ + boolean isRequestLegacyExternalStorage(); + + /** @see ApplicationInfo#FLAG_RESTORE_ANY_VERSION */ + boolean isRestoreAnyVersion(); + + // ParsingPackageRead setSplitHasCode(int splitIndex, boolean splitHasCode); + + /** Flags of any split APKs; ordered by parsed splitName */ + @Nullable + int[] getSplitFlags(); + + /** @see ApplicationInfo#splitSourceDirs */ + @Nullable + String[] getSplitCodePaths(); + + /** @see ApplicationInfo#splitDependencies */ + @Nullable + SparseArray getSplitDependencies(); + /** - * The install time abi override to choose 32bit abi's when multiple abi's are present. This is - * only meaningful for multiarch applications. The use32bitAbi attribute is ignored if - * cpuAbiOverride is also set. - * - * @see R.attr#use32bitAbi + * @see ApplicationInfo#splitNames + * @see PackageInfo#splitNames */ - boolean isUse32BitAbi(); + @Nullable + String[] getSplitNames(); + + /** @see PackageInfo#splitRevisionCodes */ + int[] getSplitRevisionCodes(); + + /** @see ApplicationInfo#PRIVATE_FLAG_STATIC_SHARED_LIBRARY */ + boolean isStaticSharedLibrary(); + + /** @see ApplicationInfo#FLAG_SUPPORTS_RTL */ + boolean isSupportsRtl(); + + /** @see ApplicationInfo#FLAG_TEST_ONLY */ + boolean isTestOnly(); + + /** @see ApplicationInfo#PRIVATE_FLAG_USE_EMBEDDED_DEX */ + boolean isUseEmbeddedDex(); + + /** @see ApplicationInfo#FLAG_USES_CLEARTEXT_TRAFFIC */ + boolean isUsesCleartextTraffic(); + + /** @see ApplicationInfo#PRIVATE_FLAG_USES_NON_SDK_API */ + boolean isUsesNonSdkApi(); /** * Set if the any of components are visible to instant applications. - * * @see R.styleable#AndroidManifestActivity_visibleToInstantApps * @see R.styleable#AndroidManifestProvider_visibleToInstantApps * @see R.styleable#AndroidManifestService_visibleToInstantApps */ boolean isVisibleToInstantApps(); + + /** @see ApplicationInfo#FLAG_VM_SAFE_MODE */ + boolean isVmSafeMode(); + + /** + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_anyDensity + * @see ApplicationInfo#FLAG_SUPPORTS_SCREEN_DENSITIES + */ + boolean isAnyDensity(); + + /** + * @see ApplicationInfo#appComponentFactory + * @see R.styleable#AndroidManifestApplication_appComponentFactory + */ + @Nullable + String getAppComponentFactory(); + + /** + * @see ApplicationInfo#backupAgentName + * @see R.styleable#AndroidManifestApplication_backupAgent + */ + @Nullable + String getBackupAgentName(); + + /** + * @see ApplicationInfo#banner + * @see R.styleable#AndroidManifestApplication_banner + */ + int getBanner(); + + /** + * @see ApplicationInfo#category + * @see R.styleable#AndroidManifestApplication_appCategory + */ + int getCategory(); + + /** + * @see ApplicationInfo#classLoaderName + * @see R.styleable#AndroidManifestApplication_classLoader + */ + @Nullable + String getClassLoaderName(); + + /** + * @see ApplicationInfo#className + * @see R.styleable#AndroidManifestApplication_name + */ + @Nullable + String getClassName(); + + String getPackageName(); + + /** Path of base APK */ + String getBaseApkPath(); + + /** + * Path where this package was found on disk. For monolithic packages + * this is path to single base APK file; for cluster packages this is + * path to the cluster directory. + */ + @NonNull + String getPath(); + + /** + * @see ApplicationInfo#compatibleWidthLimitDp + * @see R.styleable#AndroidManifestSupportsScreens_compatibleWidthLimitDp + */ + int getCompatibleWidthLimitDp(); + + /** + * @see ApplicationInfo#descriptionRes + * @see R.styleable#AndroidManifestApplication_description + */ + int getDescriptionRes(); + + /** + * @see ApplicationInfo#enabled + * @see R.styleable#AndroidManifestApplication_enabled + */ + boolean isEnabled(); + + /** + * @see ApplicationInfo#fullBackupContent + * @see R.styleable#AndroidManifestApplication_fullBackupContent + */ + int getFullBackupContent(); + + /** + * @see R.styleable#AndroidManifestApplication_dataExtractionRules + */ + int getDataExtractionRules(); + + /** @see ApplicationInfo#PRIVATE_FLAG_HAS_DOMAIN_URLS */ + boolean isHasDomainUrls(); + + /** + * @see ApplicationInfo#iconRes + * @see R.styleable#AndroidManifestApplication_icon + */ + int getIconRes(); + + /** + * @see ApplicationInfo#installLocation + * @see R.styleable#AndroidManifest_installLocation + */ + int getInstallLocation(); + + /** + * @see ApplicationInfo#labelRes + * @see R.styleable#AndroidManifestApplication_label + */ + int getLabelRes(); + + /** + * @see ApplicationInfo#largestWidthLimitDp + * @see R.styleable#AndroidManifestSupportsScreens_largestWidthLimitDp + */ + int getLargestWidthLimitDp(); + + /** + * @see ApplicationInfo#logo + * @see R.styleable#AndroidManifestApplication_logo + */ + int getLogo(); + + /** + * @see ApplicationInfo#manageSpaceActivityName + * @see R.styleable#AndroidManifestApplication_manageSpaceActivity + */ + @Nullable + String getManageSpaceActivityName(); + + /** + * @see ApplicationInfo#minExtensionVersions + * @see R.styleable#AndroidManifestExtensionSdk + */ + @Nullable + SparseIntArray getMinExtensionVersions(); + + /** + * @see ApplicationInfo#minSdkVersion + * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion + */ + int getMinSdkVersion(); + + /** + * @see ApplicationInfo#networkSecurityConfigRes + * @see R.styleable#AndroidManifestApplication_networkSecurityConfig + */ + int getNetworkSecurityConfigRes(); + + /** + * If {@link R.styleable#AndroidManifestApplication_label} is a string literal, this is it. + * Otherwise, it's stored as {@link #getLabelRes()}. + * @see ApplicationInfo#nonLocalizedLabel + * @see R.styleable#AndroidManifestApplication_label + */ + @Nullable + CharSequence getNonLocalizedLabel(); + + /** + * @see PackageInfo#overlayCategory + * @see R.styleable#AndroidManifestResourceOverlay_category + */ + @Nullable + String getOverlayCategory(); + + /** @see PackageInfo#mOverlayIsStatic */ + boolean isOverlayIsStatic(); + + /** + * @see PackageInfo#overlayPriority + * @see R.styleable#AndroidManifestResourceOverlay_priority + */ + int getOverlayPriority(); + + /** + * @see PackageInfo#overlayTarget + * @see R.styleable#AndroidManifestResourceOverlay_targetPackage + */ + @Nullable + String getOverlayTarget(); + + /** + * @see PackageInfo#targetOverlayableName + * @see R.styleable#AndroidManifestResourceOverlay_targetName + */ + @Nullable + String getOverlayTargetName(); + + /** + * If a system app declares {@link #getOriginalPackages()}, and the app was previously installed + * under one of those original package names, the {@link #getPackageName()} system identifier + * will be changed to that previously installed name. This will then be non-null, set to the + * manifest package name, for tracking the package under its true name. + * + * TODO(b/135203078): Remove this in favor of checking originalPackages.isEmpty and + * getManifestPackageName + */ + @Nullable + String getRealPackage(); + + /** + * The required account type without which this application will not function. + * + * @see PackageInfo#requiredAccountType + * @see R.styleable#AndroidManifestApplication_requiredAccountType + */ + @Nullable + String getRequiredAccountType(); + + /** + * @see PackageInfo#requiredForAllUsers + * @see R.styleable#AndroidManifestApplication_requiredForAllUsers + */ + boolean isRequiredForAllUsers(); + + /** + * @see ApplicationInfo#requiresSmallestWidthDp + * @see R.styleable#AndroidManifestSupportsScreens_requiresSmallestWidthDp + */ + int getRequiresSmallestWidthDp(); + + /** + * SHA-512 hash of the only APK that can be used to update a system package. + * @see R.styleable#AndroidManifestRestrictUpdate + */ + @Nullable + byte[] getRestrictUpdateHash(); + + /** + * The restricted account authenticator type that is used by this application + * + * @see PackageInfo#restrictedAccountType + * @see R.styleable#AndroidManifestApplication_restrictedAccountType + */ + @Nullable + String getRestrictedAccountType(); + + /** + * @see ApplicationInfo#roundIconRes + * @see R.styleable#AndroidManifestApplication_roundIcon + */ + int getRoundIconRes(); + + /** + * @see PackageInfo#sharedUserLabel + * @see R.styleable#AndroidManifest_sharedUserLabel + */ + @Deprecated + int getSharedUserLabel(); + + /** + * The signature data of all APKs in this package, which must be exactly the same across the + * base and splits. + */ + SigningDetails getSigningDetails(); + + /** + * @see ApplicationInfo#splitClassLoaderNames + * @see R.styleable#AndroidManifestApplication_classLoader + */ + @Nullable + String[] getSplitClassLoaderNames(); + + /** @see R.styleable#AndroidManifestStaticLibrary_version */ + long getStaticSharedLibVersion(); + + /** + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_largeScreens + * @see ApplicationInfo#FLAG_SUPPORTS_LARGE_SCREENS + */ + boolean isSupportsLargeScreens(); + + /** + * If omitted from manifest, returns true. + * @see R.styleable#AndroidManifestSupportsScreens_normalScreens + * @see ApplicationInfo#FLAG_SUPPORTS_NORMAL_SCREENS + */ + boolean isSupportsNormalScreens(); + + /** + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_smallScreens + * @see ApplicationInfo#FLAG_SUPPORTS_SMALL_SCREENS + */ + boolean isSupportsSmallScreens(); + + /** + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#GINGERBREAD}. + * @see R.styleable#AndroidManifestSupportsScreens_xlargeScreens + * @see ApplicationInfo#FLAG_SUPPORTS_XLARGE_SCREENS + */ + boolean isSupportsExtraLargeScreens(); + + /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING */ + boolean isAllowNativeHeapPointerTagging(); + + int getAutoRevokePermissions(); + + boolean hasPreserveLegacyExternalStorage(); + + /** + * @see ApplicationInfo#targetSandboxVersion + * @see R.styleable#AndroidManifest_targetSandboxVersion + */ + @Deprecated + int getTargetSandboxVersion(); + + /** + * @see ApplicationInfo#theme + * @see R.styleable#AndroidManifestApplication_theme + */ + int getTheme(); + + /** + * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in + * {@link ParsingPackageUtils#TAG_KEY_SETS}. + * @see R.styleable#AndroidManifestUpgradeKeySet + */ + @NonNull + Set getUpgradeKeySets(); + + /** + * The install time abi override to choose 32bit abi's when multiple abi's + * are present. This is only meaningfull for multiarch applications. + * The use32bitAbi attribute is ignored if cpuAbiOverride is also set. + */ + boolean isUse32BitAbi(); + + /** @see ApplicationInfo#volumeUuid */ + @Nullable + String getVolumeUuid(); + + /** @see ApplicationInfo#zygotePreloadName */ + @Nullable + String getZygotePreloadName(); + + /** Revision code of base APK */ + int getBaseRevisionCode(); + + /** @see PackageInfo#versionName */ + @Nullable + String getVersionName(); + + /** @see PackageInfo#versionCodeMajor */ + @Nullable + int getVersionCode(); + + /** @see PackageInfo#versionCodeMajor */ + @Nullable + int getVersionCodeMajor(); + + /** + * @see ApplicationInfo#compileSdkVersion + * @see R.styleable#AndroidManifest_compileSdkVersion + */ + int getCompileSdkVersion(); + + /** + * @see ApplicationInfo#compileSdkVersionCodename + * @see R.styleable#AndroidManifest_compileSdkVersionCodename + */ + @Nullable + String getCompileSdkVersionCodeName(); + + @Nullable + Set getMimeGroups(); + + /** + * @see ApplicationInfo#gwpAsanMode + * @see R.styleable#AndroidManifest_gwpAsanMode + */ + @ApplicationInfo.GwpAsanMode + int getGwpAsanMode(); + + /** + * @see ApplicationInfo#memtagMode + * @see R.styleable#AndroidManifest_memtagMode + */ + @ApplicationInfo.MemtagMode + int getMemtagMode(); + + /** + * @see ApplicationInfo#nativeHeapZeroInitialized + * @see R.styleable#AndroidManifest_nativeHeapZeroInitialized + */ + @ApplicationInfo.NativeHeapZeroInitialized + int getNativeHeapZeroInitialized(); + @Nullable + Boolean hasRequestRawExternalStorageAccess(); + + /** + * @see ApplicationInfo#hasRequestForegroundServiceExemption() + * @see R.styleable#AndroidManifest_requestForegroundServiceExemption + */ + boolean hasRequestForegroundServiceExemption(); + + // TODO(b/135203078): Hide and enforce going through PackageInfoUtils + ApplicationInfo toAppInfoWithoutState(); + + /** + * same as toAppInfoWithoutState except without flag computation. + */ + ApplicationInfo toAppInfoWithoutStateWithoutFlags(); + + /** + * Whether or not the app has said its attribution tags can be made user-visible. + * @see ApplicationInfo#areAttributionsUserVisible() + */ + boolean areAttributionsUserVisible(); } diff --git a/core/java/android/content/pm/parsing/ParsingPackageUtils.java b/core/java/android/content/pm/parsing/ParsingPackageUtils.java index 69cf32fe24846..115ba505f2f36 100644 --- a/core/java/android/content/pm/parsing/ParsingPackageUtils.java +++ b/core/java/android/content/pm/parsing/ParsingPackageUtils.java @@ -2760,7 +2760,7 @@ public class ParsingPackageUtils { return input.success(pkg.setOverlay(true) .setOverlayTarget(target) .setOverlayPriority(priority) - .setOverlayTargetOverlayableName( + .setOverlayTargetName( sa.getString(R.styleable.AndroidManifestResourceOverlay_targetName)) .setOverlayCategory( sa.getString(R.styleable.AndroidManifestResourceOverlay_category)) @@ -2840,6 +2840,9 @@ public class ParsingPackageUtils { R.styleable.AndroidManifestOriginalPackage_name, 0); if (!pkg.getPackageName().equals(orig)) { + if (pkg.getOriginalPackages().isEmpty()) { + pkg.setRealPackage(pkg.getPackageName()); + } pkg.addOriginalPackage(orig); } return input.success(pkg); diff --git a/core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java b/core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java deleted file mode 100644 index fcad10c767c3e..0000000000000 --- a/core/java/android/content/pm/parsing/PkgWithoutStateAppInfo.java +++ /dev/null @@ -1,642 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.content.pm.parsing; - -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.content.pm.ApplicationInfo; -import android.util.SparseArray; - -import com.android.internal.R; - -/** - * Container for fields that are eventually exposed through {@link ApplicationInfo}. - *

- * The following are dependent on system state and explicitly removed from this interface. They must - * be accessed by other means: - *

    - *
  • {@link ApplicationInfo#credentialProtectedDataDir}
  • - *
  • {@link ApplicationInfo#dataDir}
  • - *
  • {@link ApplicationInfo#deviceProtectedDataDir}
  • - *
  • {@link ApplicationInfo#enabledSetting}
  • - *
  • {@link ApplicationInfo#enabled}
  • - *
  • {@link ApplicationInfo#FLAG_INSTALLED}
  • - *
  • {@link ApplicationInfo#FLAG_STOPPED}
  • - *
  • {@link ApplicationInfo#FLAG_SUSPENDED}
  • - *
  • {@link ApplicationInfo#FLAG_UPDATED_SYSTEM_APP}
  • - *
  • {@link ApplicationInfo#hiddenUntilInstalled}
  • - *
  • {@link ApplicationInfo#primaryCpuAbi}
  • - *
  • {@link ApplicationInfo#PRIVATE_FLAG_HIDDEN}
  • - *
  • {@link ApplicationInfo#PRIVATE_FLAG_INSTANT}
  • - *
  • {@link ApplicationInfo#PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER}
  • - *
  • {@link ApplicationInfo#PRIVATE_FLAG_VIRTUAL_PRELOAD}
  • - *
  • {@link ApplicationInfo#resourceDirs}
  • - *
  • {@link ApplicationInfo#secondaryCpuAbi}
  • - *
  • {@link ApplicationInfo#seInfoUser}
  • - *
  • {@link ApplicationInfo#seInfo}
  • - *
  • {@link ApplicationInfo#sharedLibraryFiles}
  • - *
  • {@link ApplicationInfo#sharedLibraryInfos}
  • - *
  • {@link ApplicationInfo#uid}
  • - *
- * The following are derived from other fields and thus not provided specifically: - *
    - *
  • {@link ApplicationInfo#getBaseResourcePath}
  • - *
  • {@link ApplicationInfo#getResourcePath}
  • - *
  • {@link ApplicationInfo#getSplitResourcePaths}
  • - *
  • {@link ApplicationInfo#publicSourceDir}
  • - *
  • {@link ApplicationInfo#scanPublicSourceDir}
  • - *
  • {@link ApplicationInfo#splitPublicSourceDirs}
  • - *
  • {@link ApplicationInfo#storageUuid}
  • - *
- * The following were deprecated at migration time and thus removed from this interface: - *
    - *
  • {@link ApplicationInfo#FLAG_IS_GAME}
  • - *
  • {@link ApplicationInfo#targetSandboxVersion}
  • - *
  • {@link ApplicationInfo#versionCode}
  • - *
- * TODO: The following fields are just not available at all. Never filled, even by legacy parsing? - *
    - *
  • {@link ApplicationInfo#FLAG_IS_DATA_ONLY}
  • - *
- * - * @hide - */ -public interface PkgWithoutStateAppInfo { - - /** - * @see ApplicationInfo#areAttributionsUserVisible() - * @see R.styleable#AndroidManifestApplication_attributionsAreUserVisible - */ - @Nullable - boolean areAttributionsUserVisible(); - - /** - * @see ApplicationInfo#appComponentFactory - * @see R.styleable#AndroidManifestApplication_appComponentFactory - */ - @Nullable - String getAppComponentFactory(); - - /** - * @see ApplicationInfo#AUTO_REVOKE_ALLOWED - * @see ApplicationInfo#AUTO_REVOKE_DISCOURAGED - * @see ApplicationInfo#AUTO_REVOKE_DISALLOWED - */ - int getAutoRevokePermissions(); - - /** - * @see ApplicationInfo#backupAgentName - * @see R.styleable#AndroidManifestApplication_backupAgent - */ - @Nullable - String getBackupAgentName(); - - /** - * @see ApplicationInfo#banner - * @see R.styleable#AndroidManifestApplication_banner - */ - int getBanner(); - - /** - * @see ApplicationInfo#sourceDir - * @see ApplicationInfo#getBaseCodePath - */ - @NonNull - String getBaseApkPath(); - - /** - * @see ApplicationInfo#category - * @see R.styleable#AndroidManifestApplication_appCategory - */ - int getCategory(); - - /** - * @see ApplicationInfo#classLoaderName - * @see R.styleable#AndroidManifestApplication_classLoader - */ - @Nullable - String getClassLoaderName(); - - /** - * @see ApplicationInfo#className - * @see R.styleable#AndroidManifestApplication_name - */ - @Nullable - String getClassName(); - - /** - * @see ApplicationInfo#compatibleWidthLimitDp - * @see R.styleable#AndroidManifestSupportsScreens_compatibleWidthLimitDp - */ - int getCompatibleWidthLimitDp(); - - /** - * @see ApplicationInfo#compileSdkVersion - * @see R.styleable#AndroidManifest_compileSdkVersion - */ - int getCompileSdkVersion(); - - /** - * @see ApplicationInfo#compileSdkVersionCodename - * @see R.styleable#AndroidManifest_compileSdkVersionCodename - */ - @Nullable - String getCompileSdkVersionCodeName(); - - /** - * @see ApplicationInfo#dataExtractionRulesRes - * @see R.styleable#AndroidManifestApplication_dataExtractionRules - */ - int getDataExtractionRules(); - - /** - * @see ApplicationInfo#descriptionRes - * @see R.styleable#AndroidManifestApplication_description - */ - int getDescriptionRes(); - - /** - * @see ApplicationInfo#fullBackupContent - * @see R.styleable#AndroidManifestApplication_fullBackupContent - */ - int getFullBackupContent(); - - /** - * @see ApplicationInfo#getGwpAsanMode() - * @see R.styleable#AndroidManifestApplication_gwpAsanMode - */ - @ApplicationInfo.GwpAsanMode - int getGwpAsanMode(); - - /** - * @see ApplicationInfo#iconRes - * @see R.styleable#AndroidManifestApplication_icon - */ - int getIconRes(); - - /** - * @see ApplicationInfo#installLocation - * @see R.styleable#AndroidManifest_installLocation - */ - int getInstallLocation(); - - /** - * @see ApplicationInfo#labelRes - * @see R.styleable#AndroidManifestApplication_label - */ - int getLabelRes(); - - /** - * @see ApplicationInfo#largestWidthLimitDp - * @see R.styleable#AndroidManifestSupportsScreens_largestWidthLimitDp - */ - int getLargestWidthLimitDp(); - - /** - * @see ApplicationInfo#logo - * @see R.styleable#AndroidManifestApplication_logo - */ - int getLogo(); - - /** - * @see ApplicationInfo#longVersionCode - */ - long getLongVersionCode(); - - /** - * @see ApplicationInfo#manageSpaceActivityName - * @see R.styleable#AndroidManifestApplication_manageSpaceActivity - */ - @Nullable - String getManageSpaceActivityName(); - - /** - * @see ApplicationInfo#maxAspectRatio - * @see R.styleable#AndroidManifestApplication_maxAspectRatio - */ - float getMaxAspectRatio(); - - /** - * @see ApplicationInfo#getMemtagMode() - * @see R.styleable#AndroidManifestApplication_memtagMode - */ - @ApplicationInfo.MemtagMode - int getMemtagMode(); - - /** - * @see ApplicationInfo#minAspectRatio - * @see R.styleable#AndroidManifestApplication_minAspectRatio - */ - float getMinAspectRatio(); - - /** - * @see ApplicationInfo#minSdkVersion - * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion - */ - int getMinSdkVersion(); - - /** - * @see ApplicationInfo#getNativeHeapZeroInitialized() - * @see R.styleable#AndroidManifestApplication_nativeHeapZeroInitialized - */ - @ApplicationInfo.NativeHeapZeroInitialized - int getNativeHeapZeroInitialized(); - - /** - * @see ApplicationInfo#networkSecurityConfigRes - * @see R.styleable#AndroidManifestApplication_networkSecurityConfig - */ - int getNetworkSecurityConfigRes(); - - /** - * If {@link R.styleable#AndroidManifestApplication_label} is a string literal, this is it. - * Otherwise, it's stored as {@link #getLabelRes()}. - * - * @see ApplicationInfo#nonLocalizedLabel - * @see R.styleable#AndroidManifestApplication_label - */ - @Nullable - CharSequence getNonLocalizedLabel(); - - /** - * @see ApplicationInfo#scanSourceDir - * @see ApplicationInfo#getCodePath - */ - @NonNull - String getPath(); - - /** - * @see ApplicationInfo#permission - * @see R.styleable#AndroidManifestApplication_permission - */ - @Nullable - String getPermission(); - - /** - * @see ApplicationInfo#processName - * @see R.styleable#AndroidManifestApplication_process - */ - @NonNull - String getProcessName(); - - /** - * @see ApplicationInfo#requiresSmallestWidthDp - * @see R.styleable#AndroidManifestSupportsScreens_requiresSmallestWidthDp - */ - int getRequiresSmallestWidthDp(); - - /** - * Whether or not the app requested explicitly resizeable Activities. Null value means nothing - * was explicitly requested. - * - * @see ApplicationInfo#PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE - * @see ApplicationInfo#PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE - */ - @Nullable - Boolean getResizeableActivity(); - - /** - * @see ApplicationInfo#roundIconRes - * @see R.styleable#AndroidManifestApplication_roundIcon - */ - int getRoundIconRes(); - - /** - * @see ApplicationInfo#splitClassLoaderNames - * @see R.styleable#AndroidManifestApplication_classLoader - */ - @Nullable - String[] getSplitClassLoaderNames(); - - /** - * @see ApplicationInfo#splitSourceDirs - * @see ApplicationInfo#getSplitCodePaths - */ - @Nullable - String[] getSplitCodePaths(); - - /** - * @see ApplicationInfo#splitDependencies - */ - @Nullable - SparseArray getSplitDependencies(); - - /** - * @see ApplicationInfo#targetSdkVersion - * @see R.styleable#AndroidManifestUsesSdk_targetSdkVersion - */ - int getTargetSdkVersion(); - - /** - * @see ApplicationInfo#targetSandboxVersion - * @see R.styleable#AndroidManifest_targetSandboxVersion - */ - int getTargetSandboxVersion(); - - /** - * @see ApplicationInfo#taskAffinity - * @see R.styleable#AndroidManifestApplication_taskAffinity - */ - @Nullable - String getTaskAffinity(); - - /** - * @see ApplicationInfo#theme - * @see R.styleable#AndroidManifestApplication_theme - */ - int getTheme(); - - /** - * @see ApplicationInfo#uiOptions - * @see R.styleable#AndroidManifestApplication_uiOptions - */ - int getUiOptions(); - - /** - * @see ApplicationInfo#volumeUuid - */ - @Nullable - String getVolumeUuid(); - - /** - * @see ApplicationInfo#zygotePreloadName - */ - @Nullable - String getZygotePreloadName(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_EXT_REQUEST_FOREGROUND_SERVICE_EXEMPTION - * @see R.styleable#AndroidManifestApplication_requestForegroundServiceExemption - */ - boolean hasRequestForegroundServiceExemption(); - - /** - * @see ApplicationInfo#getRequestRawExternalStorageAccess() - * @see R.styleable#AndroidManifestApplication_requestRawExternalStorageAccess - */ - Boolean hasRequestRawExternalStorageAccess(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE - */ - boolean isAllowAudioPlaybackCapture(); - - /** - * @see ApplicationInfo#FLAG_ALLOW_BACKUP - */ - boolean isAllowBackup(); - - /** - * @see ApplicationInfo#FLAG_ALLOW_CLEAR_USER_DATA - */ - boolean isAllowClearUserData(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE - */ - boolean isAllowClearUserDataOnFailedRestore(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_ALLOW_NATIVE_HEAP_POINTER_TAGGING - */ - boolean isAllowNativeHeapPointerTagging(); - - /** - * @see ApplicationInfo#FLAG_ALLOW_TASK_REPARENTING - */ - boolean isAllowTaskReparenting(); - - /** - * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= {@link - * android.os.Build.VERSION_CODES#DONUT}. - * - * @see R.styleable#AndroidManifestSupportsScreens_anyDensity - * @see ApplicationInfo#FLAG_SUPPORTS_SCREEN_DENSITIES - */ - boolean isAnyDensity(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_BACKUP_IN_FOREGROUND - */ - boolean isBackupInForeground(); - - /** - * @see ApplicationInfo#FLAG_HARDWARE_ACCELERATED - */ - boolean isBaseHardwareAccelerated(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_CANT_SAVE_STATE - */ - boolean isCantSaveState(); - - /** - * @see ApplicationInfo#crossProfile - */ - boolean isCrossProfile(); - - /** - * @see ApplicationInfo#FLAG_DEBUGGABLE - */ - boolean isDebuggable(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE - */ - boolean isDefaultToDeviceProtectedStorage(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_DIRECT_BOOT_AWARE - */ - boolean isDirectBootAware(); - - /** - * @see ApplicationInfo#enabled - * @see R.styleable#AndroidManifestApplication_enabled - */ - boolean isEnabled(); - - /** - * @see ApplicationInfo#FLAG_EXTERNAL_STORAGE - */ - boolean isExternalStorage(); - - /** - * @see ApplicationInfo#FLAG_EXTRACT_NATIVE_LIBS - */ - boolean isExtractNativeLibs(); - - /** - * @see ApplicationInfo#FLAG_FULL_BACKUP_ONLY - */ - boolean isFullBackupOnly(); - - /** - * @see ApplicationInfo#FLAG_HAS_CODE - */ - boolean isHasCode(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_HAS_DOMAIN_URLS - */ - boolean isHasDomainUrls(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_HAS_FRAGILE_USER_DATA - */ - boolean isHasFragileUserData(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_ISOLATED_SPLIT_LOADING - */ - boolean isIsolatedSplitLoading(); - - /** - * @see ApplicationInfo#FLAG_KILL_AFTER_RESTORE - */ - boolean isKillAfterRestore(); - - /** - * @see ApplicationInfo#FLAG_LARGE_HEAP - */ - boolean isLargeHeap(); - - /** - * @see ApplicationInfo#FLAG_MULTIARCH - */ - boolean isMultiArch(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY - * @see ApplicationInfo#isResourceOverlay() - */ - boolean isOverlay(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE - */ - boolean isPartiallyDirectBootAware(); - - /** - * @see ApplicationInfo#FLAG_PERSISTENT - */ - boolean isPersistent(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_EXT_PROFILEABLE - */ - boolean isProfileable(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_PROFILEABLE_BY_SHELL - */ - boolean isProfileableByShell(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE - */ - boolean isRequestLegacyExternalStorage(); - - /** - * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= {@link - * android.os.Build.VERSION_CODES#DONUT}. - * - * @see R.styleable#AndroidManifestSupportsScreens_resizeable - * @see ApplicationInfo#FLAG_RESIZEABLE_FOR_SCREENS - */ - boolean isResizeable(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION - */ - boolean isResizeableActivityViaSdkVersion(); - - /** - * @see ApplicationInfo#FLAG_RESTORE_ANY_VERSION - */ - boolean isRestoreAnyVersion(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_STATIC_SHARED_LIBRARY - */ - boolean isStaticSharedLibrary(); - - /** - * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= {@link - * android.os.Build.VERSION_CODES#GINGERBREAD}. - * - * @see R.styleable#AndroidManifestSupportsScreens_xlargeScreens - * @see ApplicationInfo#FLAG_SUPPORTS_XLARGE_SCREENS - */ - boolean isSupportsExtraLargeScreens(); - - /** - * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= {@link - * android.os.Build.VERSION_CODES#DONUT}. - * - * @see R.styleable#AndroidManifestSupportsScreens_largeScreens - * @see ApplicationInfo#FLAG_SUPPORTS_LARGE_SCREENS - */ - boolean isSupportsLargeScreens(); - - /** - * If omitted from manifest, returns true. - * - * @see R.styleable#AndroidManifestSupportsScreens_normalScreens - * @see ApplicationInfo#FLAG_SUPPORTS_NORMAL_SCREENS - */ - boolean isSupportsNormalScreens(); - - /** - * @see ApplicationInfo#FLAG_SUPPORTS_RTL - */ - boolean isSupportsRtl(); - - /** - * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= {@link - * android.os.Build.VERSION_CODES#DONUT}. - * - * @see R.styleable#AndroidManifestSupportsScreens_smallScreens - * @see ApplicationInfo#FLAG_SUPPORTS_SMALL_SCREENS - */ - boolean isSupportsSmallScreens(); - - /** - * @see ApplicationInfo#FLAG_TEST_ONLY - */ - boolean isTestOnly(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_USE_EMBEDDED_DEX - */ - boolean isUseEmbeddedDex(); - - /** - * @see ApplicationInfo#FLAG_USES_CLEARTEXT_TRAFFIC - */ - boolean isUsesCleartextTraffic(); - - /** - * @see ApplicationInfo#PRIVATE_FLAG_USES_NON_SDK_API - */ - boolean isUsesNonSdkApi(); - - /** - * @see ApplicationInfo#FLAG_VM_SAFE_MODE - */ - boolean isVmSafeMode(); -} diff --git a/core/java/android/content/pm/parsing/PkgWithoutStatePackageInfo.java b/core/java/android/content/pm/parsing/PkgWithoutStatePackageInfo.java deleted file mode 100644 index b10e6fe5014db..0000000000000 --- a/core/java/android/content/pm/parsing/PkgWithoutStatePackageInfo.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.content.pm.parsing; - -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.content.pm.ActivityInfo; -import android.content.pm.ApplicationInfo; -import android.content.pm.ConfigurationInfo; -import android.content.pm.FeatureGroupInfo; -import android.content.pm.FeatureInfo; -import android.content.pm.InstrumentationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PermissionInfo; -import android.content.pm.ProviderInfo; -import android.content.pm.ServiceInfo; -import android.content.pm.parsing.component.ParsedActivity; -import android.content.pm.parsing.component.ParsedInstrumentation; -import android.content.pm.parsing.component.ParsedPermission; -import android.content.pm.parsing.component.ParsedProvider; -import android.content.pm.parsing.component.ParsedService; - -import com.android.internal.R; - -import java.util.List; - -/** - * Container for fields that are eventually exposed through {@link PackageInfo}. - *

- * The following are dependent on system state and explicitly removed from this interface. They must - * be accessed by other means: - *

    - *
  • {@link PackageInfo#firstInstallTime}
  • - *
  • {@link PackageInfo#lastUpdateTime}
  • - *
  • {@link PackageInfo#gids}
  • - *
- * The following are derived from other fields and thus not provided specifically: - *
    - *
  • {@link PackageInfo#requestedPermissionsFlags}
  • - *
- * The following were deprecated at migration time and thus removed from this interface: - *
    - *
  • {@link PackageInfo#mOverlayIsStatic}
  • - *
  • {@link PackageInfo#overlayCategory}
  • - *
  • {@link PackageInfo#overlayPriority}
  • - *
  • {@link PackageInfo#overlayTarget}
  • - *
  • {@link PackageInfo#signatures}
  • - *
  • {@link PackageInfo#targetOverlayableName}
  • - *
  • {@link PackageInfo#versionCodeMajor}
  • - *
  • {@link PackageInfo#versionCode}
  • - *
- * The following are retrieved through other APIs: - *
    - *
  • {@link PackageInfo#signingInfo}
  • - *
  • {@link PackageInfo#isApex}
  • - *
- * - * @hide - */ -public interface PkgWithoutStatePackageInfo { - - /** - * @see ActivityInfo - * @see PackageInfo#activities - */ - @NonNull - List getActivities(); - - /** - * @see PackageInfo#baseRevisionCode - */ - int getBaseRevisionCode(); - - /** - * @see PackageInfo#compileSdkVersion - * @see R.styleable#AndroidManifest_compileSdkVersion - */ - int getCompileSdkVersion(); - - /** - * @see ApplicationInfo#compileSdkVersionCodename - * @see R.styleable#AndroidManifest_compileSdkVersionCodename - */ - @Nullable - String getCompileSdkVersionCodeName(); - - /** - * @see PackageInfo#configPreferences - * @see R.styleable#AndroidManifestUsesConfiguration - */ - @NonNull - List getConfigPreferences(); - - /** - * @see PackageInfo#featureGroups - * @see R.styleable#AndroidManifestUsesFeature - */ - @NonNull - List getFeatureGroups(); - - /** - * @see InstrumentationInfo - * @see PackageInfo#instrumentation - */ - @NonNull - List getInstrumentations(); - - /** - * @see PackageInfo#getLongVersionCode() - */ - long getLongVersionCode(); - - /** - * @see PackageInfo#packageName - */ - String getPackageName(); - - /** - * @see PermissionInfo - * @see PackageInfo#permissions - */ - @NonNull - List getPermissions(); - - /** - * @see ProviderInfo - * @see PackageInfo#providers - */ - @NonNull - List getProviders(); - - /** - * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even - * though they represent different functionality. TODO(b/135203078): Reconsider this and maybe - * make ParsedReceiver so it's not so confusing - * - * @see ActivityInfo - * @see PackageInfo#receivers - */ - @NonNull - List getReceivers(); - - /** - * @see PackageInfo#reqFeatures - * @see R.styleable#AndroidManifestUsesFeature - */ - @NonNull - List getRequestedFeatures(); - - /** - * All the permissions declared. This is an effective set, and may include permissions - * transformed from split/migrated permissions from previous versions, so may not be exactly - * what the package declares in its manifest. - * - * @see PackageInfo#requestedPermissions - * @see R.styleable#AndroidManifestUsesPermission - */ - @NonNull - List getRequestedPermissions(); - - /** - * The required account type without which this application will not function. - * - * @see PackageInfo#requiredAccountType - * @see R.styleable#AndroidManifestApplication_requiredAccountType - */ - @Nullable - String getRequiredAccountType(); - - /** - * The restricted account authenticator type that is used by this application - * - * @see PackageInfo#restrictedAccountType - * @see R.styleable#AndroidManifestApplication_restrictedAccountType - */ - @Nullable - String getRestrictedAccountType(); - - /** - * @see ServiceInfo - * @see PackageInfo#services - */ - @NonNull - List getServices(); - - /** - * @see PackageInfo#sharedUserId - * @see R.styleable#AndroidManifest_sharedUserId - */ - @Nullable - String getSharedUserId(); - - /** - * @see PackageInfo#sharedUserLabel - * @see R.styleable#AndroidManifest_sharedUserLabel - */ - int getSharedUserLabel(); - - /** - * TODO(b/135203078): Move split stuff to an inner data class - * - * @see ApplicationInfo#splitNames - * @see PackageInfo#splitNames - */ - @Nullable - String[] getSplitNames(); - - /** - * @see PackageInfo#splitRevisionCodes - */ - int[] getSplitRevisionCodes(); - - /** - * @see PackageInfo#versionName - */ - @Nullable - String getVersionName(); - - /** - * @see PackageInfo#requiredForAllUsers - * @see R.styleable#AndroidManifestApplication_requiredForAllUsers - */ - boolean isRequiredForAllUsers(); -} diff --git a/core/java/android/content/pm/pkg/PackageUserState.java b/core/java/android/content/pm/pkg/PackageUserState.java deleted file mode 100644 index e5853f0d70f0e..0000000000000 --- a/core/java/android/content/pm/pkg/PackageUserState.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package android.content.pm.pkg; - - -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.annotation.SystemApi; -import android.content.pm.PackageManager; -import android.content.pm.overlay.OverlayPaths; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * The API surface for a {@link android.content.pm.PackageUserState}. Methods are expected to return - * immutable objects. This may mean copying data on each invocation until related classes are - * refactored to be immutable. - *

- * TODO: Replace implementation usage with the interface. Currently the name overlap is intentional. - *

- * - * @hide - */ -// TODO(b/173807334): Expose API -//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) -public interface PackageUserState { - /** - * Credential encrypted /data partition inode. - */ - long getCeDataInode(); - - @NonNull - Set getDisabledComponents(); - - @PackageManager.DistractionRestriction - int getDistractionFlags(); - - @NonNull - Set getEnabledComponents(); - - int getEnabledState(); - - @Nullable - String getHarmfulAppWarning(); - - @PackageManager.InstallReason - int getInstallReason(); - - @Nullable - String getLastDisableAppCaller(); - - @Nullable - OverlayPaths getOverlayPaths(); - - @NonNull - Map getSharedLibraryOverlayPaths(); - - @PackageManager.UninstallReason - int getUninstallReason(); - - boolean isHidden(); - - boolean isInstalled(); - - boolean isInstantApp(); - - boolean isNotLaunched(); - - boolean isStopped(); - - boolean isSuspended(); - - boolean isVirtualPreload(); -} diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index 9bdcddf38c61d..c6fd6eec2f915 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -891,18 +891,4 @@ public class ArrayUtils { public static @Nullable T firstOrNull(T[] items) { return items.length > 0 ? items[0] : null; } - - /** - * Creates a {@link List} from an array. Different from {@link Arrays#asList(Object[])} as that - * will use the parameter as the backing array, meaning changes are not isolated. - */ - public static List toList(T[] array) { - List list = new ArrayList<>(array.length); - //noinspection ManualArrayToCollectionCopy - for (T item : array) { - //noinspection UseBulkOperation - list.add(item); - } - return list; - } } diff --git a/core/java/com/android/internal/util/CollectionUtils.java b/core/java/com/android/internal/util/CollectionUtils.java index b87027cbb6e76..c6a040c162ab3 100644 --- a/core/java/com/android/internal/util/CollectionUtils.java +++ b/core/java/com/android/internal/util/CollectionUtils.java @@ -226,13 +226,6 @@ public class CollectionUtils { return size(cur) == 0; } - /** - * Returns whether the given map {@link Map#isEmpty is empty} or {@code null} - */ - public static boolean isEmpty(@Nullable Map cur) { - return size(cur) == 0; - } - /** * Returns the elements of the given list that are of type {@code c} */ diff --git a/services/core/java/android/content/pm/PackageManagerInternal.java b/services/core/java/android/content/pm/PackageManagerInternal.java index c3bf03ce49c9e..6529b11043323 100644 --- a/services/core/java/android/content/pm/PackageManagerInternal.java +++ b/services/core/java/android/content/pm/PackageManagerInternal.java @@ -20,7 +20,6 @@ import android.annotation.AppIdInt; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; -import android.annotation.SystemApi; import android.annotation.UserIdInt; import android.annotation.WorkerThread; import android.content.ComponentName; @@ -49,8 +48,6 @@ import com.android.internal.util.function.pooled.PooledLambda; import com.android.server.pm.PackageList; import com.android.server.pm.PackageSetting; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.pkg.AndroidPackageApi; -import com.android.server.pm.pkg.PackageState; import java.io.IOException; import java.lang.annotation.Retention; @@ -651,15 +648,7 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP */ public abstract @Nullable AndroidPackage getPackage(@NonNull String packageName); - /** - * Returns the {@link SystemApi} variant of a package for use with mainline. - */ - @Nullable - public abstract AndroidPackageApi getAndroidPackage(@NonNull String packageName); - - public abstract @Nullable PackageSetting getPackageSetting(@NonNull String packageName); - - public abstract @Nullable PackageState getPackageState(@NonNull String packageName); + public abstract @Nullable PackageSetting getPackageSetting(String packageName); /** * Returns a package for the given UID. If the UID is part of a shared user ID, one @@ -884,17 +873,6 @@ public abstract class PackageManagerInternal implements PackageSettingsSnapshotP */ public abstract void forEachPackageSetting(Consumer actionLocked); - /** - * Perform the given action for each package. - * - * @param locked whether to hold the packages lock. If the lock is not held, the objects will - * be iterated using a temporary data structure. In the vast majority of cases, - * the lock should not have to be held. This is exposed to mirror the - * functionality of the other forEach methods, for eventual migration. - * @param action action to be performed - */ - public abstract void forEachPackageState(boolean locked, Consumer action); - /** * Perform the given action for each installed package for a user. * Note that packages lock will be held while performing the actions. diff --git a/services/core/java/com/android/server/om/IdmapManager.java b/services/core/java/com/android/server/om/IdmapManager.java index 903d02afc307d..157a1fc4d12c1 100644 --- a/services/core/java/com/android/server/om/IdmapManager.java +++ b/services/core/java/com/android/server/om/IdmapManager.java @@ -229,7 +229,7 @@ final class IdmapManager { private boolean matchesActorSignature(@NonNull AndroidPackage targetPackage, @NonNull AndroidPackage overlayPackage, int userId) { - String targetOverlayableName = overlayPackage.getOverlayTargetOverlayableName(); + String targetOverlayableName = overlayPackage.getOverlayTargetName(); if (targetOverlayableName != null) { try { OverlayableInfo overlayableInfo = mPackageManager.getOverlayableForTarget( diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java index ae683d4c367f6..e4ca5b6d04bb5 100644 --- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java @@ -100,8 +100,7 @@ final class OverlayManagerServiceImpl { if (!Objects.equals(theTruth.getOverlayTarget(), oldSettings.targetPackageName)) { return true; } - if (!Objects.equals(theTruth.getOverlayTargetOverlayableName(), - oldSettings.targetOverlayableName)) { + if (!Objects.equals(theTruth.getOverlayTargetName(), oldSettings.targetOverlayableName)) { return true; } if (oldSettings.isFabricated) { @@ -344,7 +343,7 @@ final class OverlayManagerServiceImpl { } currentInfo = mSettings.init(overlay, userId, pkg.getOverlayTarget(), - pkg.getOverlayTargetOverlayableName(), pkg.getBaseApkPath(), + pkg.getOverlayTargetName(), pkg.getBaseApkPath(), isPackageConfiguredMutable(pkg), isPackageConfiguredEnabled(pkg), getPackageConfiguredPriority(pkg), pkg.getOverlayCategory(), diff --git a/services/core/java/com/android/server/om/OverlayReferenceMapper.java b/services/core/java/com/android/server/om/OverlayReferenceMapper.java index 539fecf099fc4..94a1f3b1c5023 100644 --- a/services/core/java/com/android/server/om/OverlayReferenceMapper.java +++ b/services/core/java/com/android/server/om/OverlayReferenceMapper.java @@ -129,7 +129,7 @@ public class OverlayReferenceMapper { return Collections.emptyMap(); } - String overlayable = pkg.getOverlayTargetOverlayableName(); + String overlayable = pkg.getOverlayTargetName(); Map> targetToOverlayables = new HashMap<>(); Set overlayables = new HashSet<>(); overlayables.add(overlayable); diff --git a/services/core/java/com/android/server/pm/AppsFilter.java b/services/core/java/com/android/server/pm/AppsFilter.java index 3818d74cfa0db..f5526067a3ffc 100644 --- a/services/core/java/com/android/server/pm/AppsFilter.java +++ b/services/core/java/com/android/server/pm/AppsFilter.java @@ -57,7 +57,6 @@ import com.android.server.FgThread; import com.android.server.compat.CompatChange; import com.android.server.om.OverlayReferenceMapper; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.utils.Snappable; import com.android.server.utils.SnapshotCache; import com.android.server.utils.Snapshots; @@ -449,8 +448,7 @@ public class AppsFilter implements Watchable, Snappable { // TODO(b/135203078): Do not use toAppInfo // TODO(b/167551701): Make changeId non-logging final boolean enabled = mInjector.getCompatibility().isChangeEnabledInternalNoLogging( - PackageManager.FILTER_APPLICATION_QUERY, - AndroidPackageUtils.generateAppInfoWithoutState(pkg)); + PackageManager.FILTER_APPLICATION_QUERY, pkg.toAppInfoWithoutState()); if (enabled) { mDisabledPackages.remove(pkg.getPackageName()); } else { diff --git a/services/core/java/com/android/server/pm/ComponentResolver.java b/services/core/java/com/android/server/pm/ComponentResolver.java index e0f11e25d27c6..dde9f822ac767 100644 --- a/services/core/java/com/android/server/pm/ComponentResolver.java +++ b/services/core/java/com/android/server/pm/ComponentResolver.java @@ -59,7 +59,6 @@ import com.android.server.IntentResolver; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.PackageInfoUtils.CachedApplicationInfoGenerator; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.utils.Snappable; import com.android.server.utils.SnapshotCache; import com.android.server.utils.WatchableImpl; @@ -685,8 +684,7 @@ public class ComponentResolver AndroidPackage pkg = sPackageManagerInternal.getPackage(p.getPackageName()); if (pkg != null) { - pw.print(" applicationInfo="); - pw.println(AndroidPackageUtils.generateAppInfoWithoutState(pkg)); + pw.print(" applicationInfo="); pw.println(pkg.toAppInfoWithoutState()); } } } diff --git a/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java b/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java index fd0010666e739..d600ae52900d7 100644 --- a/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java +++ b/services/core/java/com/android/server/pm/InitAndSystemPackageHelper.java @@ -77,7 +77,6 @@ import com.android.server.EventLogTags; import com.android.server.pm.parsing.PackageCacher; import com.android.server.pm.parsing.PackageParser2; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.parsing.pkg.ParsedPackage; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.utils.WatchedArrayMap; @@ -961,8 +960,7 @@ public class InitAndSystemPackageHelper { PackageSetting pkgSetting; synchronized (mPm.mLock) { - renamedPkgName = mPm.mSettings.getRenamedPackageLPr( - AndroidPackageUtils.getRealPackageOrNull(parsedPackage)); + renamedPkgName = mPm.mSettings.getRenamedPackageLPr(parsedPackage.getRealPackage()); final String realPkgName = PackageManagerService.getRealPackageName(parsedPackage, renamedPkgName); if (realPkgName != null) { @@ -1312,7 +1310,7 @@ public class InitAndSystemPackageHelper { if (originalPkgSetting == null || !mPm.isDeviceUpgrading()) { return; } - if (originalPkgSetting.versionCode == pkg.getLongVersionCode()) { + if (originalPkgSetting.versionCode == pkg.getVersionCode()) { return; } @@ -1321,7 +1319,7 @@ public class InitAndSystemPackageHelper { Slog.d(TAG, originalPkgSetting.name + " clear profile due to version change " + originalPkgSetting.versionCode + " != " - + pkg.getLongVersionCode()); + + pkg.getVersionCode()); } } } diff --git a/services/core/java/com/android/server/pm/InstantAppRegistry.java b/services/core/java/com/android/server/pm/InstantAppRegistry.java index 4709ba117d566..d4ebbe38e3b67 100644 --- a/services/core/java/com/android/server/pm/InstantAppRegistry.java +++ b/services/core/java/com/android/server/pm/InstantAppRegistry.java @@ -56,7 +56,6 @@ import com.android.internal.util.ArrayUtils; import com.android.internal.util.XmlUtils; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.permission.PermissionManagerServiceInternal; import com.android.server.utils.Snappable; import com.android.server.utils.SnapshotCache; @@ -619,8 +618,7 @@ class InstantAppRegistry implements Watchable, Snappable { } // TODO(b/135203078): Remove toAppInfo call? Requires significant additions/changes to PM - Drawable icon = AndroidPackageUtils.generateAppInfoWithoutState(pkg) - .loadIcon(mService.mContext.getPackageManager()); + Drawable icon = pkg.toAppInfoWithoutState().loadIcon(mService.mContext.getPackageManager()); final Bitmap bitmap; if (icon instanceof BitmapDrawable) { diff --git a/services/core/java/com/android/server/pm/KeySetManagerService.java b/services/core/java/com/android/server/pm/KeySetManagerService.java index 98eef07a9ddc6..1b919f964b339 100644 --- a/services/core/java/com/android/server/pm/KeySetManagerService.java +++ b/services/core/java/com/android/server/pm/KeySetManagerService.java @@ -343,7 +343,7 @@ public class KeySetManagerService { return mKeySets.get(id) != null; } - public boolean shouldCheckUpgradeKeySetLocked(PackageSetting oldPs, int scanFlags) { + public boolean shouldCheckUpgradeKeySetLocked(PackageSettingBase oldPs, int scanFlags) { // Can't rotate keys during boot or if sharedUser. if (oldPs == null || (scanFlags&SCAN_INITIAL) != 0 || oldPs.isSharedUser() || !oldPs.keySetData.isUsingUpgradeKeySets()) { @@ -364,7 +364,7 @@ public class KeySetManagerService { return true; } - public boolean checkUpgradeKeySetLocked(PackageSetting oldPS, AndroidPackage pkg) { + public boolean checkUpgradeKeySetLocked(PackageSettingBase oldPS, AndroidPackage pkg) { // Upgrade keysets are being used. Determine if new package has a superset of the // required keys. long[] upgradeKeySets = oldPS.keySetData.getUpgradeKeySets(); diff --git a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java index bf1fe31143a5b..d851e6ced91bf 100644 --- a/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java +++ b/services/core/java/com/android/server/pm/PackageAbiHelperImpl.java @@ -136,9 +136,9 @@ final class PackageAbiHelperImpl implements PackageAbiHelper { boolean isUpdatedSystemApp, File appLib32InstallDir) { // Trying to derive the paths, thus need the raw ABI info from the parsed package, and the // current state in PackageSetting is irrelevant. - return deriveNativeLibraryPaths(new Abis(AndroidPackageUtils.getRawPrimaryCpuAbi(pkg), - AndroidPackageUtils.getRawSecondaryCpuAbi(pkg)), appLib32InstallDir, pkg.getPath(), - pkg.getBaseApkPath(), pkg.isSystem(), isUpdatedSystemApp); + return deriveNativeLibraryPaths(new Abis(pkg.getPrimaryCpuAbi(), pkg.getSecondaryCpuAbi()), + appLib32InstallDir, pkg.getPath(), pkg.getBaseApkPath(), pkg.isSystem(), + isUpdatedSystemApp); } private static NativeLibraryPaths deriveNativeLibraryPaths(final Abis abis, diff --git a/services/core/java/com/android/server/pm/PackageHandler.java b/services/core/java/com/android/server/pm/PackageHandler.java index a5a6caeea3b39..44a973eac05cd 100644 --- a/services/core/java/com/android/server/pm/PackageHandler.java +++ b/services/core/java/com/android/server/pm/PackageHandler.java @@ -656,8 +656,7 @@ public class PackageHandler extends Handler { StorageManager.class); VolumeInfo volume = storage.findVolumeByUuid( - StorageManager.convert( - res.mPkg.getVolumeUuid()).toString()); + res.mPkg.getStorageUuid().toString()); int packageExternalStorageType = PackageManagerService.getPackageExternalStorageType(volume, res.mPkg.isExternalStorage()); diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 098a9b68899f8..2c2884f4e76f8 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -350,10 +350,6 @@ import com.android.server.pm.permission.LegacyPermissionManagerInternal; import com.android.server.pm.permission.LegacyPermissionManagerService; import com.android.server.pm.permission.PermissionManagerService; import com.android.server.pm.permission.PermissionManagerServiceInternal; -import com.android.server.pm.pkg.AndroidPackageApi; -import com.android.server.pm.pkg.PackageState; -import com.android.server.pm.pkg.PackageStateImpl; -import com.android.server.policy.PermissionPolicyInternal; import com.android.server.pm.verify.domain.DomainVerificationManagerInternal; import com.android.server.pm.verify.domain.DomainVerificationService; import com.android.server.pm.verify.domain.DomainVerificationUtils; @@ -1856,9 +1852,6 @@ public class PackageManagerService extends IPackageManager.Stub @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE) protected interface Computer { - @Nullable - PackageState getPackageState(@NonNull String packageName); - /** * Every method must be annotated. */ @@ -3421,16 +3414,6 @@ public class PackageManagerService extends IPackageManager.Stub return mSettings.getPackageLPr(packageName); } - @Nullable - @Override - public PackageState getPackageState(@NonNull String packageName) { - int callingUid = Binder.getCallingUid(); - packageName = resolveInternalPackageNameInternalLocked( - packageName, PackageManager.VERSION_CODE_HIGHEST, callingUid); - PackageSetting pkgSetting = mSettings.getPackageLPr(packageName); - return pkgSetting == null ? null : PackageStateImpl.copy(pkgSetting); - } - public final ParceledListSlice getInstalledPackages(int flags, int userId) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { @@ -5197,14 +5180,6 @@ public class PackageManagerService extends IPackageManager.Stub return super.getPackageSettingInternal(packageName, callingUid); } } - - @Nullable - public final PackageState getPackageState(@NonNull String packageName) { - synchronized (mLock) { - return super.getPackageState(packageName); - } - } - public final ParceledListSlice getInstalledPackagesBody(int flags, int userId, int callingUid) { synchronized (mLock) { @@ -5540,17 +5515,6 @@ public class PackageManagerService extends IPackageManager.Stub current.release(); } } - - @Nullable - public final PackageState getPackageState(@NonNull String packageName) { - ThreadComputer current = live(); - try { - return current.mComputer.getPackageState(packageName); - } finally { - current.release(); - } - } - public final ParceledListSlice getInstalledPackages(int flags, int userId) { ThreadComputer current = snapshot(); try { @@ -12241,7 +12205,7 @@ public class PackageManagerService extends IPackageManager.Stub @Nullable UserHandle user, String cpuAbiOverride) throws PackageManagerException { final String renamedPkgName = mSettings.getRenamedPackageLPr( - AndroidPackageUtils.getRealPackageOrNull(parsedPackage)); + parsedPackage.getRealPackage()); final String realPkgName = getRealPackageName(parsedPackage, renamedPkgName); if (realPkgName != null) { ensurePackageRenamed(parsedPackage, renamedPkgName); @@ -12361,8 +12325,7 @@ public class PackageManagerService extends IPackageManager.Stub } else { pkgSetting = result.mPkgSetting; if (originalPkgSetting != null) { - mSettings.addRenamedPackageLPw( - AndroidPackageUtils.getRealPackageOrNull(parsedPackage), + mSettings.addRenamedPackageLPw(parsedPackage.getRealPackage(), originalPkgSetting.name); mTransferredPackages.add(originalPkgSetting.name); } else { @@ -12453,7 +12416,7 @@ public class PackageManagerService extends IPackageManager.Stub static @Nullable String getRealPackageName(@NonNull AndroidPackage pkg, @Nullable String renamedPkgName) { if (isPackageRenamed(pkg, renamedPkgName)) { - return AndroidPackageUtils.getRealPackageOrNull(pkg); + return pkg.getRealPackage(); } return null; } @@ -12723,7 +12686,7 @@ public class PackageManagerService extends IPackageManager.Stub destCodeFile, parsedPackage.getNativeLibraryRootDir(), AndroidPackageUtils.getRawPrimaryCpuAbi(parsedPackage), AndroidPackageUtils.getRawSecondaryCpuAbi(parsedPackage), - parsedPackage.getLongVersionCode(), pkgFlags, pkgPrivateFlags, user, + parsedPackage.getVersionCode(), pkgFlags, pkgPrivateFlags, user, true /*allowInstall*/, instantApp, virtualPreload, UserManagerService.getInstance(), usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups(), @@ -12775,8 +12738,11 @@ public class PackageManagerService extends IPackageManager.Stub pkgSetting.getPkgState().setUpdatedSystemApp(true); } - parsedPackage.setSeInfo(SELinuxMMAC.getSeInfo(parsedPackage, sharedUserSetting, - injector.getCompatibility())); + parsedPackage + .setSeInfo(SELinuxMMAC.getSeInfo(parsedPackage, sharedUserSetting, + injector.getCompatibility())) + .setSeInfoUser(SELinuxUtil.assignSeinfoUser(pkgSetting.readUserState( + userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId))); if (parsedPackage.isSystem()) { configurePackageComponents(parsedPackage); @@ -13074,6 +13040,7 @@ public class PackageManagerService extends IPackageManager.Stub if (!parsedPackage.isSystem()) { // Only system apps can use these features. parsedPackage.clearOriginalPackages() + .setRealPackage(null) .clearAdoptPermissions(); } @@ -13417,7 +13384,7 @@ public class PackageManagerService extends IPackageManager.Stub // If the target is already installed or 'overlay-config-signature' tag in // SystemConfig is set, check this here to augment the last line of defense // which is OMS. - if (pkg.getOverlayTargetOverlayableName() == null) { + if (pkg.getOverlayTargetName() == null) { final PackageSetting targetPkgSetting = mSettings.getPackageLPr(pkg.getOverlayTarget()); if (targetPkgSetting != null) { @@ -13593,8 +13560,11 @@ public class PackageManagerService extends IPackageManager.Stub // The instance stored in PackageManagerService is special cased to be non-user // specific, so initialize all the needed fields here. - mAndroidApplication = PackageInfoUtils.generateApplicationInfo(pkg, 0, - new PackageUserState(), UserHandle.USER_SYSTEM, pkgSetting); + mAndroidApplication = pkg.toAppInfoWithoutState(); + mAndroidApplication.flags = PackageInfoUtils.appInfoFlags(pkg, pkgSetting); + mAndroidApplication.privateFlags = + PackageInfoUtils.appInfoPrivateFlags(pkg, pkgSetting); + mAndroidApplication.initForUser(UserHandle.USER_SYSTEM); if (!mResolverReplaced) { mResolveActivity.applicationInfo = mAndroidApplication; @@ -13743,8 +13713,11 @@ public class PackageManagerService extends IPackageManager.Stub // The instance created in PackageManagerService is special cased to be non-user // specific, so initialize all the needed fields here. - ApplicationInfo appInfo = PackageInfoUtils.generateApplicationInfo(pkg, 0, - new PackageUserState(), UserHandle.USER_SYSTEM, pkgSetting); + ApplicationInfo appInfo = pkg.toAppInfoWithoutState(); + appInfo.flags = PackageInfoUtils.appInfoFlags(pkg, pkgSetting); + appInfo.privateFlags = + PackageInfoUtils.appInfoPrivateFlags(pkg, pkgSetting); + appInfo.initForUser(UserHandle.USER_SYSTEM); // Set up information for custom user intent resolution activity. mResolveActivity.applicationInfo = appInfo; @@ -20394,10 +20367,8 @@ public class PackageManagerService extends IPackageManager.Stub } final PackageSetting ps; - final String seInfoUser; synchronized (mLock) { ps = mSettings.getPackageLPr(pkg.getPackageName()); - seInfoUser = SELinuxUtil.getSeinfoUser(ps.readUserState(userId)); } final String volumeUuid = pkg.getVolumeUuid(); final String packageName = pkg.getPackageName(); @@ -20408,7 +20379,7 @@ public class PackageManagerService extends IPackageManager.Stub Preconditions.checkNotNull(pkgSeInfo); - final String seInfo = pkgSeInfo + seInfoUser; + final String seInfo = pkgSeInfo + (pkg.getSeInfoUser() != null ? pkg.getSeInfoUser() : ""); final int targetSdkVersion = pkg.getTargetSdkVersion(); return batch.createAppData(volumeUuid, packageName, userId, flags, appId, seInfo, @@ -20645,8 +20616,7 @@ public class PackageManagerService extends IPackageManager.Stub packageAbiOverride = ps.cpuAbiOverrideString; appId = UserHandle.getAppId(pkg.getUid()); seinfo = AndroidPackageUtils.getSeInfo(pkg, ps); - label = String.valueOf(pm.getApplicationLabel( - AndroidPackageUtils.generateAppInfoWithoutState(pkg))); + label = String.valueOf(pm.getApplicationLabel(pkg.toAppInfoWithoutState())); targetSdkVersion = pkg.getTargetSdkVersion(); freezer = freezePackage(packageName, "movePackageInternal"); installedUserIds = ps.queryInstalledUsers(mUserManager.getUserIds(), true); @@ -20812,9 +20782,8 @@ public class PackageManagerService extends IPackageManager.Stub return; } - final StorageManager storage = mInjector.getSystemService(StorageManager.class);; - VolumeInfo volume = storage.findVolumeByUuid( - StorageManager.convert(pkg.getVolumeUuid()).toString()); + final StorageManager storage = mInjector.getSystemService(StorageManager.class); + VolumeInfo volume = storage.findVolumeByUuid(pkg.getStorageUuid().toString()); int packageExternalStorageType = getPackageExternalStorageType(volume, pkg.isExternalStorage()); if (!isPreviousLocationExternal && pkg.isExternalStorage()) { @@ -21589,12 +21558,6 @@ public class PackageManagerService extends IPackageManager.Stub return PackageManagerService.this.getPackage(packageName); } - @Nullable - @Override - public AndroidPackageApi getAndroidPackage(@NonNull String packageName) { - return PackageManagerService.this.getPackage(packageName); - } - @Override public AndroidPackage getPackage(int uid) { return PackageManagerService.this.getPackage(uid); @@ -21606,12 +21569,6 @@ public class PackageManagerService extends IPackageManager.Stub return PackageManagerService.this.getPackageSetting(packageName); } - @Nullable - @Override - public PackageState getPackageState(@NonNull String packageName) { - return PackageManagerService.this.getPackageState(packageName); - } - @Override public PackageList getPackageList(PackageListObserver observer) { synchronized (mLock) { @@ -22324,12 +22281,11 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void forEachPackageSetting(Consumer actionLocked) { - PackageManagerService.this.forEachPackageSetting(actionLocked); - } - - @Override - public void forEachPackageState(boolean locked, Consumer action) { - PackageManagerService.this.forEachPackageState(locked, action); + synchronized (mLock) { + for (int index = 0; index < mSettings.getPackagesLocked().size(); index++) { + actionLocked.accept(mSettings.getPackagesLocked().valueAt(index)); + } + } } @Override @@ -22808,11 +22764,6 @@ public class PackageManagerService extends IPackageManager.Stub return mComputer.getPackageSettingInternal(packageName, callingUid); } - @Nullable - private PackageState getPackageState(String packageName) { - return mComputer.getPackageState(packageName); - } - void forEachPackage(Consumer actionLocked) { synchronized (mLock) { int numPackages = mPackages.size(); @@ -22822,29 +22773,6 @@ public class PackageManagerService extends IPackageManager.Stub } } - private void forEachPackageSetting(Consumer actionLocked) { - synchronized (mLock) { - int size = mSettings.getPackagesLocked().size(); - for (int index = 0; index < size; index++) { - actionLocked.accept(mSettings.getPackagesLocked().valueAt(index)); - } - } - } - - private void forEachPackageState(boolean locked, Consumer action) { - if (locked) { - forEachPackageSetting(action::accept); - } else { - List packageStates = new ArrayList<>(); - forEachPackageSetting(pkgSetting -> - packageStates.add(PackageStateImpl.copy(pkgSetting))); - int size = packageStates.size(); - for (int index = 0; index < size; index++) { - action.accept(packageStates.get(index)); - } - } - } - void forEachInstalledPackage(@NonNull Consumer actionLocked, @UserIdInt int userId) { synchronized (mLock) { diff --git a/services/core/java/com/android/server/pm/PackageSetting.java b/services/core/java/com/android/server/pm/PackageSetting.java index 249423ee91160..376326264d9c3 100644 --- a/services/core/java/com/android/server/pm/PackageSetting.java +++ b/services/core/java/com/android/server/pm/PackageSetting.java @@ -20,10 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; -import android.content.pm.SharedLibraryInfo; -import android.content.pm.SigningInfo; import android.content.pm.UserInfo; -import android.content.pm.pkg.PackageUserState; import android.service.pm.PackageProto; import android.util.ArrayMap; import android.util.ArraySet; @@ -33,7 +30,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.parsing.pkg.AndroidPackage; import com.android.server.pm.permission.LegacyPermissionDataProvider; import com.android.server.pm.permission.LegacyPermissionState; -import com.android.server.pm.pkg.AndroidPackageApi; import com.android.server.pm.pkg.PackageStateUnserialized; import com.android.server.utils.SnapshotCache; @@ -193,14 +189,7 @@ public class PackageSetting extends PackageSettingBase { return pkg; } - public Integer getSharedUserId() { - if (sharedUser != null) { - return sharedUser.userId; - } - return null; - } - - public int getSharedUserIdInt() { + public int getSharedUserId() { if (sharedUser != null) { return sharedUser.userId; } @@ -457,8 +446,4 @@ public class PackageSetting extends PackageSettingBase { mDomainSetId = domainSetId; return this; } - - public String getPackageName() { - return name; - } } diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java index 62c847746bb36..d9c4d316f948d 100644 --- a/services/core/java/com/android/server/pm/PackageSettingBase.java +++ b/services/core/java/com/android/server/pm/PackageSettingBase.java @@ -42,7 +42,6 @@ import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.pkg.PackageState; import java.io.File; import java.util.Arrays; @@ -54,7 +53,7 @@ import java.util.function.Predicate; /** * Settings base class for pending and resolved classes. */ -public abstract class PackageSettingBase extends SettingBase implements PackageState { +public abstract class PackageSettingBase extends SettingBase { private static final int[] EMPTY_INT_ARRAY = new int[0]; @@ -298,7 +297,7 @@ public abstract class PackageSettingBase extends SettingBase implements PackageS if (state == null) { return DEFAULT_USER_STATE; } -// state.categoryHint = categoryHint; + state.categoryHint = categoryHint; return state; } @@ -747,7 +746,7 @@ public abstract class PackageSettingBase extends SettingBase implements PackageS } /** @see #mPath */ - public File getPath() { + File getPath() { return mPath; } diff --git a/services/core/java/com/android/server/pm/SELinuxMMAC.java b/services/core/java/com/android/server/pm/SELinuxMMAC.java index 9f3d19005de69..a7e1a62b817a4 100644 --- a/services/core/java/com/android/server/pm/SELinuxMMAC.java +++ b/services/core/java/com/android/server/pm/SELinuxMMAC.java @@ -28,7 +28,6 @@ import android.util.Xml; import com.android.server.compat.PlatformCompat; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import libcore.io.IoUtils; @@ -364,7 +363,7 @@ public final class SELinuxMMAC { if ((sharedUserSetting != null) && (sharedUserSetting.packages.size() != 0)) { return sharedUserSetting.seInfoTargetSdkVersion; } - final ApplicationInfo appInfo = AndroidPackageUtils.generateAppInfoWithoutState(pkg); + final ApplicationInfo appInfo = pkg.toAppInfoWithoutState(); if (compatibility.isChangeEnabledInternal(SELINUX_LATEST_CHANGES, appInfo)) { return Math.max( android.os.Build.VERSION_CODES.CUR_DEVELOPMENT, pkg.getTargetSdkVersion()); diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 95e2d0aace92e..b111bbfcb80b3 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -1161,7 +1161,7 @@ public final class Settings implements Watchable, Snappable { } for (UserInfo user : allUsers) { final PackageUserState oldUserState = oldPackage == null - ? PackageSetting.DEFAULT_USER_STATE + ? PackageSettingBase.DEFAULT_USER_STATE : oldPackage.readUserState(user.id); if (!oldUserState.equals(newPackage.readUserState(user.id))) { writePackageRestrictionsLPr(user.id); @@ -2733,6 +2733,9 @@ public final class Settings implements Watchable, Snappable { } else { serializer.attributeInt(null, "sharedUserId", pkg.appId); } + if (pkg.uidError) { + serializer.attributeBoolean(null, "uidError", true); + } InstallSource installSource = pkg.installSource; if (installSource.installerPackageName != null) { serializer.attribute(null, "installer", installSource.installerPackageName); @@ -3001,7 +3004,7 @@ public final class Settings implements Watchable, Snappable { for (int i = 0; i < N; i++) { final PackageSetting p = mPendingPackages.get(i); - final int sharedUserId = p.getSharedUserIdInt(); + final int sharedUserId = p.getSharedUserId(); final Object idObj = getSettingLPr(sharedUserId); if (idObj instanceof SharedUserSetting) { final SharedUserSetting sharedUser = (SharedUserSetting) idObj; @@ -3519,6 +3522,7 @@ public final class Settings implements Watchable, Snappable { String volumeUuid = null; boolean updateAvailable = false; int categoryHint = ApplicationInfo.CATEGORY_UNDEFINED; + boolean uidError = false; int pkgFlags = 0; int pkgPrivateFlags = 0; long timeStamp = 0; @@ -3534,6 +3538,7 @@ public final class Settings implements Watchable, Snappable { name = parser.getAttributeValue(null, ATTR_NAME); realName = parser.getAttributeValue(null, "realName"); userId = parser.getAttributeInt(null, "userId", 0); + uidError = parser.getAttributeBoolean(null, "uidError", false); sharedUserId = parser.getAttributeInt(null, "sharedUserId", 0); codePathStr = parser.getAttributeValue(null, "codePath"); @@ -3690,6 +3695,7 @@ public final class Settings implements Watchable, Snappable { + userId + " at " + parser.getPositionDescription()); } if (packageSetting != null) { + packageSetting.uidError = uidError; InstallSource installSource = InstallSource.create( installInitiatingPackageName, installOriginatingPackageName, installerPackageName, installerAttributionTag, isOrphaned, @@ -3871,8 +3877,8 @@ public final class Settings implements Watchable, Snappable { } } - private void readDisabledComponentsLPw(PackageSetting packageSetting, TypedXmlPullParser parser, - int userId) throws IOException, XmlPullParserException { + private void readDisabledComponentsLPw(PackageSettingBase packageSetting, + TypedXmlPullParser parser, int userId) throws IOException, XmlPullParserException { int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT @@ -3899,8 +3905,8 @@ public final class Settings implements Watchable, Snappable { } } - private void readEnabledComponentsLPw(PackageSetting packageSetting, TypedXmlPullParser parser, - int userId) throws IOException, XmlPullParserException { + private void readEnabledComponentsLPw(PackageSettingBase packageSetting, + TypedXmlPullParser parser, int userId) throws IOException, XmlPullParserException { int outerDepth = parser.getDepth(); int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT @@ -4506,6 +4512,8 @@ public final class Settings implements Watchable, Snappable { pw.print(prefix); pw.print(" splits="); dumpSplitNames(pw, pkg); pw.println(); final int apkSigningVersion = pkg.getSigningDetails().getSignatureSchemeVersion(); pw.print(prefix); pw.print(" apkSigningVersion="); pw.println(apkSigningVersion); + pw.print(prefix); pw.print(" applicationInfo="); + pw.println(pkg.toAppInfoToString()); pw.print(prefix); pw.print(" flags="); printFlags(pw, PackageInfoUtils.appInfoFlags(pkg, ps), FLAG_DUMP_SPEC); pw.println(); int privateFlags = PackageInfoUtils.appInfoPrivateFlags(pkg, ps); diff --git a/services/core/java/com/android/server/pm/parsing/PackageCacher.java b/services/core/java/com/android/server/pm/parsing/PackageCacher.java index 59b7cbd5d94ec..74ec16140c945 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageCacher.java +++ b/services/core/java/com/android/server/pm/parsing/PackageCacher.java @@ -76,8 +76,7 @@ public class PackageCacher { p.unmarshall(bytes, 0, bytes.length); p.setDataPosition(0); - final PackageParserCacheHelper.ReadHelper helper = - new PackageParserCacheHelper.ReadHelper(p); + final PackageParserCacheHelper.ReadHelper helper = new PackageParserCacheHelper.ReadHelper(p); helper.startAndInstall(); ParsedPackage pkg = new PackageImpl(p); @@ -99,10 +98,9 @@ public class PackageCacher { @VisibleForTesting public static byte[] toCacheEntryStatic(ParsedPackage pkg) { final Parcel p = Parcel.obtain(); - final PackageParserCacheHelper.WriteHelper helper = - new PackageParserCacheHelper.WriteHelper(p); + final PackageParserCacheHelper.WriteHelper helper = new PackageParserCacheHelper.WriteHelper(p); - ((PackageImpl) pkg).writeToParcel(p, 0 /* flags */); + pkg.writeToParcel(p, 0 /* flags */); helper.finishAndUninstall(); diff --git a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java index 876c534099a1b..fa9ed66dd457f 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java @@ -208,8 +208,8 @@ public class PackageInfoUtils { */ @Nullable public static ApplicationInfo generateApplicationInfo(AndroidPackage pkg, - @PackageManager.ApplicationInfoFlags int flags, @NonNull PackageUserState state, - int userId, @Nullable PackageSetting pkgSetting) { + @PackageManager.ApplicationInfoFlags int flags, PackageUserState state, int userId, + @Nullable PackageSetting pkgSetting) { if (pkg == null) { return null; } @@ -233,9 +233,6 @@ public class PackageInfoUtils { info.sharedLibraryFiles = usesLibraryFiles.isEmpty() ? null : usesLibraryFiles.toArray(new String[0]); info.sharedLibraryInfos = usesLibraryInfos.isEmpty() ? null : usesLibraryInfos; - if (info.category == ApplicationInfo.CATEGORY_UNDEFINED) { - info.category = pkgSetting.getCategoryOverride(); - } } info.seInfo = AndroidPackageUtils.getSeInfo(pkg, pkgSetting); diff --git a/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java b/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java index c67d0d2233553..432394a651a89 100644 --- a/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java +++ b/services/core/java/com/android/server/pm/parsing/library/AndroidTestBaseUpdater.java @@ -29,7 +29,6 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.compat.IPlatformCompat; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.parsing.pkg.ParsedPackage; /** @@ -64,7 +63,7 @@ public class AndroidTestBaseUpdater extends PackageSharedLibraryUpdater { ServiceManager.getService(Context.PLATFORM_COMPAT_SERVICE)); try { return platformCompat.isChangeEnabled(REMOVE_ANDROID_TEST_BASE, - AndroidPackageUtils.generateAppInfoWithoutState(pkg)); + pkg.toAppInfoWithoutState()); } catch (RemoteException | NullPointerException e) { Log.e(TAG, "Failed to get a response from PLATFORM_COMPAT_SERVICE", e); } diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.aidl b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.aidl new file mode 100644 index 0000000000000..ab3cf7cb8c654 --- /dev/null +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.aidl @@ -0,0 +1,21 @@ +/* +** +** Copyright 2019, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License") +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.content.pm.parsing; + +/* @hide */ +parcelable AndroidPackage; diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java index bf7d897ac3e6b..0d2bcec42667c 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackage.java @@ -17,22 +17,87 @@ package com.android.server.pm.parsing.pkg; import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.Intent; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PermissionGroupInfo; +import android.content.pm.SigningDetails; import android.content.pm.parsing.ParsingPackageRead; +import android.content.pm.parsing.ParsingPackageUtils; +import android.content.pm.parsing.component.ParsedAttribution; +import android.content.pm.parsing.component.ParsedIntentInfo; +import android.content.pm.parsing.component.ParsedPermissionGroup; +import android.os.Bundle; +import android.os.Parcelable; +import android.util.ArraySet; +import android.util.Pair; -import com.android.server.pm.pkg.AndroidPackageApi; +import com.android.internal.R; + +import java.security.PublicKey; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; /** - * The last state of a package during parsing/install before it is available in {@link - * com.android.server.pm.PackageManagerService#mPackages}. - *

+ * The last state of a package during parsing/install before it is available in + * {@link com.android.server.pm.PackageManagerService#mPackages}. + * * It is the responsibility of the caller to understand what data is available at what step of the * parsing or install process. - *

+ * + * TODO(b/135203078): Nullability annotations + * TODO(b/135203078): Remove get/setAppInfo differences * * @hide */ -public interface AndroidPackage extends ParsingPackageRead, AndroidPackageApi { +public interface AndroidPackage extends PkgAppInfo, PkgPackageInfo, ParsingPackageRead, Parcelable { + /** + * The names of packages to adopt ownership of permissions from, parsed under + * {@link ParsingPackageUtils#TAG_ADOPT_PERMISSIONS}. + * @see R.styleable#AndroidManifestOriginalPackage_name + */ + @NonNull + List getAdoptPermissions(); + + /** Path of base APK */ + @NonNull + String getBaseApkPath(); + + /** Revision code of base APK */ + int getBaseRevisionCode(); + + /** + * The path to the folder containing the base APK and any installed splits. + */ + @NonNull + String getPath(); + + /** + * Permissions requested but not in the manifest. These may have been split or migrated from + * previous versions/definitions. + */ + @NonNull + List getImplicitPermissions(); + + /** + * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in + * {@link ParsingPackageUtils#TAG_KEY_SETS}. + * @see R.styleable#AndroidManifestKeySet + * @see R.styleable#AndroidManifestPublicKey + */ + @NonNull + Map> getKeySetMapping(); + + /** + * Library names this package is declared as, for use by other packages with "uses-library". + * @see R.styleable#AndroidManifestLibrary + */ + @NonNull + List getLibraryNames(); /** * The package name as declared in the manifest, since the package can be renamed. For example, @@ -40,4 +105,224 @@ public interface AndroidPackage extends ParsingPackageRead, AndroidPackageApi { */ @NonNull String getManifestPackageName(); + + /** + * We store the application meta-data independently to avoid multiple unwanted references + * TODO(b/135203078): What does this comment mean? + * TODO(b/135203078): Make all the Bundles immutable (and non-null by shared empty reference?) + */ + @Nullable + Bundle getMetaData(); + + /** + * For system use to migrate from an old package name to a new one, moving over data + * if available. + * @see R.styleable#AndroidManifestOriginalPackage} + */ + @NonNull + List getOriginalPackages(); + + /** + * Map of overlayable name to actor name. + */ + @NonNull + Map getOverlayables(); + + /** + * The name of the package as used to identify it in the system. This may be adjusted by the + * system from the value declared in the manifest, and may not correspond to a Java code + * package. + * @see ApplicationInfo#packageName + * @see PackageInfo#packageName + */ + @NonNull + String getPackageName(); + + /** + * @see PermissionGroupInfo + */ + @NonNull + List getPermissionGroups(); + + @NonNull + List getAttributions(); + + /** + * Used to determine the default preferred handler of an {@link Intent}. + * + * Map of component className to intent info inside that component. + * TODO(b/135203078): Is this actually used/working? + */ + @NonNull + List> getPreferredActivityFilters(); + + /** + * System protected broadcasts. + * @see R.styleable#AndroidManifestProtectedBroadcast + */ + @NonNull + List getProtectedBroadcasts(); + + /** + * Intents that this package may query or require and thus requires visibility into. + * @see R.styleable#AndroidManifestQueriesIntent + */ + @NonNull + List getQueriesIntents(); + + /** + * Other packages that this package may query or require and thus requires visibility into. + * @see R.styleable#AndroidManifestQueriesPackage + */ + @NonNull + List getQueriesPackages(); + + /** + * If a system app declares {@link #getOriginalPackages()}, and the app was previously installed + * under one of those original package names, the {@link #getPackageName()} system identifier + * will be changed to that previously installed name. This will then be non-null, set to the + * manifest package name, for tracking the package under its true name. + * + * TODO(b/135203078): Remove this in favor of checking originalPackages.isEmpty and + * getManifestPackageName + */ + @Nullable + String getRealPackage(); + + /** + * SHA-512 hash of the only APK that can be used to update a system package. + * @see R.styleable#AndroidManifestRestrictUpdate + */ + @Nullable + byte[] getRestrictUpdateHash(); + + /** + * The signature data of all APKs in this package, which must be exactly the same across the + * base and splits. + */ + SigningDetails getSigningDetails(); + + /** + * TODO(b/135203078): Move split stuff to an inner data class + * @see ApplicationInfo#splitNames + * @see PackageInfo#splitNames + */ + @Nullable + String[] getSplitNames(); + + /** Flags of any split APKs; ordered by parsed splitName */ + @Nullable + int[] getSplitFlags(); + + /** @see R.styleable#AndroidManifestStaticLibrary_name */ + @Nullable + String getStaticSharedLibName(); + + /** @see R.styleable#AndroidManifestStaticLibrary_version */ + long getStaticSharedLibVersion(); + + /** + * {@link android.os.storage.StorageManager#convert(String)} version of + * {@link #getVolumeUuid()}. + * TODO(b/135203078): All usages call toString() on this. Can the string be returned directly, + * or does the parsing logic in StorageManager have to run? + */ + UUID getStorageUuid(); + + /** + * For use with {@link com.android.server.pm.KeySetManagerService}. Parsed in + * {@link ParsingPackageUtils#TAG_KEY_SETS}. + * @see R.styleable#AndroidManifestUpgradeKeySet + */ + @NonNull + Set getUpgradeKeySets(); + + /** @see R.styleable#AndroidManifestUsesLibrary */ + @NonNull + List getUsesLibraries(); + + /** + * Like {@link #getUsesLibraries()}, but marked optional by setting + * {@link R.styleable#AndroidManifestUsesLibrary_required} to false . Application is expected + * to handle absence manually. + * @see R.styleable#AndroidManifestUsesLibrary + */ + @NonNull + List getUsesOptionalLibraries(); + + /** @see R.styleabele#AndroidManifestUsesNativeLibrary */ + @NonNull + List getUsesNativeLibraries(); + + /** + * Like {@link #getUsesNativeLibraries()}, but marked optional by setting + * {@link R.styleable#AndroidManifestUsesNativeLibrary_required} to false . Application is + * expected to handle absence manually. + * @see R.styleable#AndroidManifestUsesNativeLibrary + */ + @NonNull + List getUsesOptionalNativeLibraries(); + + /** + * TODO(b/135203078): Move static library stuff to an inner data class + * @see R.styleable#AndroidManifestUsesStaticLibrary + */ + @NonNull + List getUsesStaticLibraries(); + + /** @see R.styleable#AndroidManifestUsesStaticLibrary_certDigest */ + @Nullable + String[][] getUsesStaticLibrariesCertDigests(); + + /** @see R.styleable#AndroidManifestUsesStaticLibrary_version */ + @Nullable + long[] getUsesStaticLibrariesVersions(); + + /** @see R.styleable#AndroidManifestApplication_forceQueryable */ + boolean isForceQueryable(); + + boolean isCrossProfile(); + + /** + * The install time abi override to choose 32bit abi's when multiple abi's + * are present. This is only meaningfull for multiarch applications. + */ + boolean isUse32BitAbi(); + + /** + * Set if the any of components are visible to instant applications. + * @see R.styleable#AndroidManifestActivity_visibleToInstantApps + * @see R.styleable#AndroidManifestProvider_visibleToInstantApps + * @see R.styleable#AndroidManifestService_visibleToInstantApps + */ + boolean isVisibleToInstantApps(); + + /** + * Generates an {@link ApplicationInfo} object with only the data available in this object. + * + * TODO(b/135203078): Actually add this + * This does not contain any system or user state data, and should be avoided. Prefer + * com.android.server.pm.parsing.PackageInfoUtils#generateApplicationInfo( + * AndroidPackage, int, PackageUserState, int, com.android.server.pm.PackageSetting) + * + * @deprecated Access AndroidPackage fields directly. + */ + @Deprecated + @NonNull + ApplicationInfo toAppInfoWithoutState(); + + /** + * Same as toAppInfoWithoutState except it does not compute any flags. + */ + @NonNull + ApplicationInfo toAppInfoWithoutStateWithoutFlags(); + + /** + * TODO(b/135203078): Remove usages? + * @return a mock of what the previous package.applicationInfo would've returned for logging + * @deprecated don't use this in any new code, just print package name directly + */ + @Deprecated + @NonNull + String toAppInfoToString(); } diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageHidden.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageHidden.java deleted file mode 100644 index 944e4ad6eb69e..0000000000000 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageHidden.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.parsing.pkg; - -import android.annotation.Nullable; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; - -/** - * Methods that normal consumers should not have access to. This usually means the field is stateful - * or deprecated and should be access through {@link AndroidPackageUtils} or a system manager - * class. - *

- * This is a separate interface, not implemented by the base {@link AndroidPackage} because Java - * doesn't support non-public interface methods. The class must be cast to this interface. - *

- * Because they exist in different packages, some methods are duplicated from - * android.content.pm.parsing.ParsingPackageHidden. - */ -interface AndroidPackageHidden { - - /** - * @see ApplicationInfo#primaryCpuAbi - */ - @Nullable - String getPrimaryCpuAbi(); - - /** - * @see ApplicationInfo#seInfo - * TODO: This field is deriveable and might not have to be cached here. - */ - @Nullable - String getSeInfo(); - - /** - * @see ApplicationInfo#secondaryCpuAbi - */ - @Nullable - String getSecondaryCpuAbi(); - - /** - * @see PackageInfo#versionCode - * @see ApplicationInfo#versionCode - */ - @Deprecated - int getVersionCode(); - - /** - * @see PackageInfo#versionCodeMajor - */ - int getVersionCodeMajor(); - - // TODO(b/135203078): Hide and enforce going through PackageInfoUtils - ApplicationInfo toAppInfoWithoutState(); -} diff --git a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java index 5a8e7934cc8fa..d40aada1e9c11 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/AndroidPackageUtils.java @@ -19,6 +19,7 @@ package com.android.server.pm.parsing.pkg; import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.SharedLibraryInfo; import android.content.pm.VersionedPackage; @@ -127,7 +128,7 @@ public class AndroidPackageUtils { throws PackageManagerException { Collection apkToDexMetadataList = getPackageDexMetadata(pkg).values(); String packageName = pkg.getPackageName(); - long versionCode = pkg.getLongVersionCode(); + long versionCode = pkg.toAppInfoWithoutState().longVersionCode; final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing(); for (String dexMetadata : apkToDexMetadataList) { final ParseResult result = DexMetadataHelper.validateDexMetadataFile( @@ -252,6 +253,10 @@ public class AndroidPackageUtils { ? pkg.getRoundIconRes() : pkg.getIconRes(); } + public static long getLongVersionCode(AndroidPackage pkg) { + return PackageInfo.composeLongVersionCode(pkg.getVersionCodeMajor(), pkg.getVersionCode()); + } + /** * Returns false iff the provided flags include the {@link PackageManager#MATCH_SYSTEM_ONLY} * flag and the provided package is not a system package. Otherwise returns {@code true}. @@ -265,7 +270,7 @@ public class AndroidPackageUtils { public static String getPrimaryCpuAbi(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) { if (pkgSetting == null || TextUtils.isEmpty(pkgSetting.primaryCpuAbiString)) { - return getRawPrimaryCpuAbi(pkg); + return pkg.getPrimaryCpuAbi(); } return pkgSetting.primaryCpuAbiString; @@ -274,7 +279,7 @@ public class AndroidPackageUtils { public static String getSecondaryCpuAbi(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) { if (pkgSetting == null || TextUtils.isEmpty(pkgSetting.secondaryCpuAbiString)) { - return getRawSecondaryCpuAbi(pkg); + return pkg.getSecondaryCpuAbi(); } return pkgSetting.secondaryCpuAbiString; @@ -283,17 +288,23 @@ public class AndroidPackageUtils { /** * Returns the primary ABI as parsed from the package. Used only during parsing and derivation. * Otherwise prefer {@link #getPrimaryCpuAbi(AndroidPackage, PackageSetting)}. + * + * TODO(b/135203078): Actually hide the method + * Placed in the utility to hide the method on the interface. */ public static String getRawPrimaryCpuAbi(AndroidPackage pkg) { - return ((AndroidPackageHidden) pkg).getPrimaryCpuAbi(); + return pkg.getPrimaryCpuAbi(); } /** * Returns the secondary ABI as parsed from the package. Used only during parsing and * derivation. Otherwise prefer {@link #getSecondaryCpuAbi(AndroidPackage, PackageSetting)}. + * + * TODO(b/135203078): Actually hide the method + * Placed in the utility to hide the method on the interface. */ public static String getRawSecondaryCpuAbi(AndroidPackage pkg) { - return ((AndroidPackageHidden) pkg).getSecondaryCpuAbi(); + return pkg.getSecondaryCpuAbi(); } public static String getSeInfo(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) { @@ -303,25 +314,6 @@ public class AndroidPackageUtils { return overrideSeInfo; } } - return ((AndroidPackageHidden) pkg).getSeInfo(); - } - - @Deprecated - @NonNull - public static ApplicationInfo generateAppInfoWithoutState(AndroidPackage pkg) { - return ((AndroidPackageHidden) pkg).toAppInfoWithoutState(); - } - - /** - * Replacement of unnecessary legacy getRealPackage. Only returns a value if the package was - * actually renamed. - */ - @Nullable - public static String getRealPackageOrNull(AndroidPackage pkg) { - if (pkg.getOriginalPackages().isEmpty() || !pkg.isSystem()) { - return null; - } - - return pkg.getManifestPackageName(); + return pkg.getSeInfo(); } } diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java index 61f7daf3078cb..2fcc4b2fae59e 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PackageImpl.java @@ -22,7 +22,6 @@ import android.annotation.Nullable; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; -import android.content.pm.SELinuxUtil; import android.content.pm.SigningDetails; import android.content.pm.parsing.ParsingPackage; import android.content.pm.parsing.ParsingPackageImpl; @@ -33,6 +32,7 @@ import android.content.res.TypedArray; import android.os.Environment; import android.os.Parcel; import android.os.UserHandle; +import android.os.storage.StorageManager; import android.text.TextUtils; import com.android.internal.annotations.VisibleForTesting; @@ -42,6 +42,7 @@ import com.android.internal.util.Parcelling.BuiltIn.ForInternedString; import com.android.server.pm.parsing.PackageInfoUtils; import java.io.File; +import java.util.UUID; /** * Extensions to {@link ParsingPackageImpl} including fields/state contained in the system server @@ -52,8 +53,7 @@ import java.io.File; * * @hide */ -public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, AndroidPackage, - AndroidPackageHidden { +public final class PackageImpl extends ParsingPackageImpl implements ParsedPackage, AndroidPackage { @NonNull public static PackageImpl forParsing(@NonNull String packageName, @NonNull String baseCodePath, @@ -116,6 +116,9 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An @Nullable @DataClass.ParcelWith(ForInternedString.class) protected String seInfo; + @Nullable + @DataClass.ParcelWith(ForInternedString.class) + protected String seInfoUser; /** * This is an appId, the uid if the userId is == USER_SYSTEM @@ -264,6 +267,12 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An return this; } + @Override + public PackageImpl setRealPackage(@Nullable String realPackage) { + super.setRealPackage(realPackage); + return this; + } + @Override public PackageImpl setPersistent(boolean value) { super.setPersistent(value); @@ -417,6 +426,12 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An return this; } + @Override + public PackageImpl setSeInfoUser(@Nullable String seInfoUser) { + this.seInfoUser = TextUtils.safeIntern(seInfoUser); + return this; + } + @Override public PackageImpl setSplitCodePaths(@Nullable String[] splitCodePaths) { this.splitCodePaths = splitCodePaths; @@ -471,6 +486,19 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An return this; } + @Override + public UUID getStorageUuid() { + return StorageManager.convert(volumeUuid); + } + + @Deprecated + @Override + public String toAppInfoToString() { + return "PackageImpl{" + + Integer.toHexString(System.identityHashCode(this)) + + " " + getPackageName() + "}"; + } + @Override public ParsedPackage setCoreApp(boolean coreApp) { return setBoolean(Booleans.CORE_APP, coreApp); @@ -501,7 +529,7 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An appInfo.secondaryCpuAbi = secondaryCpuAbi; appInfo.secondaryNativeLibraryDir = secondaryNativeLibraryDir; appInfo.seInfo = seInfo; - appInfo.seInfoUser = SELinuxUtil.COMPLETE_STR; + appInfo.seInfoUser = seInfoUser; appInfo.uid = uid; return appInfo; } @@ -522,6 +550,7 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An sForInternedString.parcel(this.secondaryCpuAbi, dest, flags); dest.writeString(this.secondaryNativeLibraryDir); dest.writeString(this.seInfo); + dest.writeString(this.seInfoUser); dest.writeInt(this.uid); dest.writeInt(this.mBooleans); } @@ -536,6 +565,7 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An this.secondaryCpuAbi = sForInternedString.unparcel(in); this.secondaryNativeLibraryDir = in.readString(); this.seInfo = in.readString(); + this.seInfoUser = in.readString(); this.uid = in.readInt(); this.mBooleans = in.readInt(); @@ -606,6 +636,12 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An return seInfo; } + @Nullable + @Override + public String getSeInfoUser() { + return seInfoUser; + } + @Override public boolean isCoreApp() { return getBoolean(Booleans.CORE_APP); @@ -664,7 +700,7 @@ public class PackageImpl extends ParsingPackageImpl implements ParsedPackage, An return uid; } - @Override + @DataClass.Generated.Member public PackageImpl setStub(boolean value) { setBoolean(Booleans.STUB, value); return this; diff --git a/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java b/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java index bb08f09d5ab8b..0051bab5e0595 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/ParsedPackage.java @@ -16,6 +16,7 @@ package com.android.server.pm.parsing.pkg; +import android.annotation.Nullable; import android.content.pm.SigningDetails; /** @@ -54,6 +55,8 @@ public interface ParsedPackage extends AndroidPackage { ParsedPackage setPrimaryCpuAbi(String primaryCpuAbi); + ParsedPackage setRealPackage(@Nullable String realPackage); + ParsedPackage setSecondaryCpuAbi(String secondaryCpuAbi); ParsedPackage setSigningDetails(SigningDetails signingDetails); @@ -98,6 +101,8 @@ public interface ParsedPackage extends AndroidPackage { ParsedPackage setSeInfo(String seInfo); + ParsedPackage setSeInfoUser(String seInfoUser); + ParsedPackage setSecondaryNativeLibraryDir(String secondaryNativeLibraryDir); /** diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java b/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java index c7dc26762e4ab..728e1bc652c06 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PkgAppInfo.java @@ -16,91 +16,484 @@ package com.android.server.pm.parsing.pkg; +import android.annotation.NonNull; import android.annotation.Nullable; import android.content.pm.ApplicationInfo; -import android.content.pm.parsing.PkgWithoutStateAppInfo; +import android.util.SparseArray; -import com.android.server.pm.PackageManagerService; +import com.android.internal.R; /** - * Equivalent of {@link PkgWithoutStateAppInfo} but contains fields that are set inside {@link - * PackageManagerService} and thus are not available to the core SDK. - *

- * Everything in this interface is @SystemApi(client = SYSTEM_SERVER), but the interface itself is - * not. + * Container for fields that are eventually exposed through {@link ApplicationInfo}. + * + * Done to separate the meaningless, re-directed JavaDoc for methods and to separate what's + * exposed vs not exposed to core. + * + * @hide */ -public interface PkgAppInfo extends PkgWithoutStateAppInfo { +interface PkgAppInfo { + + /** @see ApplicationInfo#PRIVATE_FLAG_CANT_SAVE_STATE */ + boolean isCantSaveState(); /** - * @see ApplicationInfo#nativeLibraryDir + * @see ApplicationInfo#appComponentFactory + * @see R.styleable#AndroidManifestApplication_appComponentFactory */ @Nullable + String getAppComponentFactory(); + + /** + * @see ApplicationInfo#backupAgentName + * @see R.styleable#AndroidManifestApplication_backupAgent + */ + @Nullable + String getBackupAgentName(); + + /** + * @see ApplicationInfo#banner + * @see R.styleable#AndroidManifestApplication_banner + */ + int getBanner(); + + /** + * @see ApplicationInfo#category + * @see R.styleable#AndroidManifestApplication_appCategory + */ + int getCategory(); + + /** + * @see ApplicationInfo#classLoaderName + * @see R.styleable#AndroidManifestApplication_classLoader + */ + @Nullable + String getClassLoaderName(); + + /** + * @see ApplicationInfo#className + * @see R.styleable#AndroidManifestApplication_name + */ + @Nullable + String getClassName(); + + /** + * @see ApplicationInfo#compatibleWidthLimitDp + * @see R.styleable#AndroidManifestSupportsScreens_compatibleWidthLimitDp + */ + int getCompatibleWidthLimitDp(); + + /** + * @see ApplicationInfo#compileSdkVersion + * @see R.styleable#AndroidManifest_compileSdkVersion + */ + int getCompileSdkVersion(); + + /** + * @see ApplicationInfo#compileSdkVersionCodename + * @see R.styleable#AndroidManifest_compileSdkVersionCodename + */ + @Nullable + String getCompileSdkVersionCodeName(); + + /** + * @see ApplicationInfo#descriptionRes + * @see R.styleable#AndroidManifestApplication_description + */ + int getDescriptionRes(); + + /** + * @see ApplicationInfo#fullBackupContent + * @see R.styleable#AndroidManifestApplication_fullBackupContent + */ + int getFullBackupContent(); + + /** + * @see ApplicationInfo#iconRes + * @see R.styleable#AndroidManifestApplication_icon + */ + int getIconRes(); + + /** + * @see ApplicationInfo#labelRes + * @see R.styleable#AndroidManifestApplication_label + */ + int getLabelRes(); + + /** + * @see ApplicationInfo#largestWidthLimitDp + * @see R.styleable#AndroidManifestSupportsScreens_largestWidthLimitDp + */ + int getLargestWidthLimitDp(); + + /** + * @see ApplicationInfo#logo + * @see R.styleable#AndroidManifestApplication_logo + */ + int getLogo(); + + /** + * @see ApplicationInfo#manageSpaceActivityName + * @see R.styleable#AndroidManifestApplication_manageSpaceActivity + */ + @Nullable + String getManageSpaceActivityName(); + + /** + * @see ApplicationInfo#maxAspectRatio + * @see R.styleable#AndroidManifestApplication_maxAspectRatio + */ + float getMaxAspectRatio(); + + /** + * @see ApplicationInfo#minAspectRatio + * @see R.styleable#AndroidManifestApplication_minAspectRatio + */ + float getMinAspectRatio(); + + /** + * @see ApplicationInfo#minSdkVersion + * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion + */ + int getMinSdkVersion(); + + /** @see ApplicationInfo#nativeLibraryDir */ + @Nullable String getNativeLibraryDir(); - /** - * @see ApplicationInfo#nativeLibraryRootDir - */ + /** @see ApplicationInfo#nativeLibraryRootDir */ @Nullable String getNativeLibraryRootDir(); /** - * @see ApplicationInfo#secondaryNativeLibraryDir + * @see ApplicationInfo#networkSecurityConfigRes + * @see R.styleable#AndroidManifestApplication_networkSecurityConfig */ + int getNetworkSecurityConfigRes(); + + /** + * If {@link R.styleable#AndroidManifestApplication_label} is a string literal, this is it. + * Otherwise, it's stored as {@link #getLabelRes()}. + * @see ApplicationInfo#nonLocalizedLabel + * @see R.styleable#AndroidManifestApplication_label + */ + @Nullable + CharSequence getNonLocalizedLabel(); + + /** + * @see ApplicationInfo#permission + * @see R.styleable#AndroidManifestApplication_permission + */ + @Nullable + String getPermission(); + + /** + * TODO(b/135203078): Hide this in the utility, should never be accessed directly + * @see ApplicationInfo#primaryCpuAbi + */ + @Nullable + String getPrimaryCpuAbi(); + + /** + * @see ApplicationInfo#processName + * @see R.styleable#AndroidManifestApplication_process + */ + @NonNull + String getProcessName(); + + /** + * @see ApplicationInfo#requiresSmallestWidthDp + * @see R.styleable#AndroidManifestSupportsScreens_requiresSmallestWidthDp + */ + int getRequiresSmallestWidthDp(); + + /** + * @see ApplicationInfo#roundIconRes + * @see R.styleable#AndroidManifestApplication_roundIcon + */ + int getRoundIconRes(); + + /** + * @see ApplicationInfo#areAttributionsUserVisible() + * @see R.styleable#AndroidManifestApplication_attributionsAreUserVisible + */ + boolean areAttributionsUserVisible(); + + /** @see ApplicationInfo#seInfo */ + @Nullable + String getSeInfo(); + + /** @see ApplicationInfo#seInfoUser */ + @Nullable + String getSeInfoUser(); + + /** @see ApplicationInfo#secondaryCpuAbi */ + @Nullable + String getSecondaryCpuAbi(); + + /** @see ApplicationInfo#secondaryNativeLibraryDir */ @Nullable String getSecondaryNativeLibraryDir(); /** - * @see ApplicationInfo#uid + * @see ApplicationInfo#installLocation + * @see R.styleable#AndroidManifest_installLocation */ - int getUid(); + int getInstallLocation(); /** - * @see ApplicationInfo#FLAG_FACTORY_TEST + * @see ApplicationInfo#splitClassLoaderNames + * @see R.styleable#AndroidManifestApplication_classLoader */ + @Nullable + String[] getSplitClassLoaderNames(); + + /** @see ApplicationInfo#splitSourceDirs */ + @Nullable + String[] getSplitCodePaths(); + + /** @see ApplicationInfo#splitDependencies */ + @Nullable + SparseArray getSplitDependencies(); + + /** + * @see ApplicationInfo#targetSandboxVersion + * @see R.styleable#AndroidManifest_targetSandboxVersion + */ + @Deprecated + int getTargetSandboxVersion(); + + /** + * @see ApplicationInfo#targetSdkVersion + * @see R.styleable#AndroidManifestUsesSdk_targetSdkVersion + */ + int getTargetSdkVersion(); + + /** + * @see ApplicationInfo#taskAffinity + * @see R.styleable#AndroidManifestApplication_taskAffinity + */ + @Nullable + String getTaskAffinity(); + + /** + * @see ApplicationInfo#theme + * @see R.styleable#AndroidManifestApplication_theme + */ + int getTheme(); + + /** + * @see ApplicationInfo#uiOptions + * @see R.styleable#AndroidManifestApplication_uiOptions + */ + int getUiOptions(); + + /** @see ApplicationInfo#uid */ + int getUid(); + + /** @see ApplicationInfo#longVersionCode */ + long getLongVersionCode(); + + /** @see ApplicationInfo#versionCode */ + @Deprecated + int getVersionCode(); + + /** @see ApplicationInfo#volumeUuid */ + @Nullable + String getVolumeUuid(); + + /** @see ApplicationInfo#zygotePreloadName */ + @Nullable + String getZygotePreloadName(); + + /** @see ApplicationInfo#FLAG_HAS_CODE */ + boolean isHasCode(); + + /** @see ApplicationInfo#FLAG_ALLOW_TASK_REPARENTING */ + boolean isAllowTaskReparenting(); + + /** @see ApplicationInfo#FLAG_MULTIARCH */ + boolean isMultiArch(); + + /** @see ApplicationInfo#FLAG_EXTRACT_NATIVE_LIBS */ + boolean isExtractNativeLibs(); + + /** @see ApplicationInfo#FLAG_DEBUGGABLE */ + boolean isDebuggable(); + + /** @see ApplicationInfo#FLAG_VM_SAFE_MODE */ + boolean isVmSafeMode(); + + /** @see ApplicationInfo#FLAG_PERSISTENT */ + boolean isPersistent(); + + /** @see ApplicationInfo#FLAG_ALLOW_BACKUP */ + boolean isAllowBackup(); + + /** @see ApplicationInfo#FLAG_TEST_ONLY */ + boolean isTestOnly(); + + /** @see ApplicationInfo#PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION */ + boolean isResizeableActivityViaSdkVersion(); + + /** @see ApplicationInfo#PRIVATE_FLAG_HAS_DOMAIN_URLS */ + boolean isHasDomainUrls(); + + /** @see ApplicationInfo#PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE */ + boolean isRequestLegacyExternalStorage(); + + /** @see ApplicationInfo#FLAG_HARDWARE_ACCELERATED */ + boolean isBaseHardwareAccelerated(); + + /** @see ApplicationInfo#PRIVATE_FLAG_DEFAULT_TO_DEVICE_PROTECTED_STORAGE */ + boolean isDefaultToDeviceProtectedStorage(); + + /** @see ApplicationInfo#PRIVATE_FLAG_DIRECT_BOOT_AWARE */ + boolean isDirectBootAware(); + + /** @see ApplicationInfo#PRIVATE_FLAG_PARTIALLY_DIRECT_BOOT_AWARE */ + boolean isPartiallyDirectBootAware(); + + /** @see ApplicationInfo#PRIVATE_FLAG_USE_EMBEDDED_DEX */ + boolean isUseEmbeddedDex(); + + /** @see ApplicationInfo#FLAG_EXTERNAL_STORAGE */ + boolean isExternalStorage(); + + /** @see ApplicationInfo#nativeLibraryRootRequiresIsa */ + boolean isNativeLibraryRootRequiresIsa(); + + /** @see ApplicationInfo#PRIVATE_FLAG_ODM */ + boolean isOdm(); + + /** @see ApplicationInfo#PRIVATE_FLAG_OEM */ + boolean isOem(); + + /** @see ApplicationInfo#PRIVATE_FLAG_PRIVILEGED */ + boolean isPrivileged(); + + /** @see ApplicationInfo#PRIVATE_FLAG_PRODUCT */ + boolean isProduct(); + + /** @see ApplicationInfo#PRIVATE_FLAG_PROFILEABLE_BY_SHELL */ + boolean isProfileableByShell(); + + /** @see ApplicationInfo#PRIVATE_FLAG_STATIC_SHARED_LIBRARY */ + boolean isStaticSharedLibrary(); + + /** @see ApplicationInfo#FLAG_SYSTEM */ + boolean isSystem(); + + /** @see ApplicationInfo#PRIVATE_FLAG_SYSTEM_EXT */ + boolean isSystemExt(); + + /** @see ApplicationInfo#PRIVATE_FLAG_VENDOR */ + boolean isVendor(); + + /** @see ApplicationInfo#PRIVATE_FLAG_ISOLATED_SPLIT_LOADING */ + boolean isIsolatedSplitLoading(); + + /** + * @see ApplicationInfo#enabled + * @see R.styleable#AndroidManifestApplication_enabled + */ + boolean isEnabled(); + + /** + * @see ApplicationInfo#PRIVATE_FLAG_IS_RESOURCE_OVERLAY + * @see ApplicationInfo#isResourceOverlay() + */ + boolean isOverlay(); + + /** @see ApplicationInfo#PRIVATE_FLAG_USES_NON_SDK_API */ + boolean isUsesNonSdkApi(); + + /** @see ApplicationInfo#PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY */ + boolean isSignedWithPlatformKey(); + + /** @see ApplicationInfo#FLAG_KILL_AFTER_RESTORE */ + boolean isKillAfterRestore(); + + /** @see ApplicationInfo#FLAG_RESTORE_ANY_VERSION */ + boolean isRestoreAnyVersion(); + + /** @see ApplicationInfo#FLAG_FULL_BACKUP_ONLY */ + boolean isFullBackupOnly(); + + /** @see ApplicationInfo#FLAG_ALLOW_CLEAR_USER_DATA */ + boolean isAllowClearUserData(); + + /** @see ApplicationInfo#FLAG_LARGE_HEAP */ + boolean isLargeHeap(); + + /** @see ApplicationInfo#FLAG_USES_CLEARTEXT_TRAFFIC */ + boolean isUsesCleartextTraffic(); + + /** @see ApplicationInfo#FLAG_SUPPORTS_RTL */ + boolean isSupportsRtl(); + + /** @see ApplicationInfo#FLAG_IS_GAME */ + @Deprecated + boolean isGame(); + + /** @see ApplicationInfo#FLAG_FACTORY_TEST */ boolean isFactoryTest(); /** - * @see ApplicationInfo#nativeLibraryRootRequiresIsa + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_smallScreens + * @see ApplicationInfo#FLAG_SUPPORTS_SMALL_SCREENS */ - boolean isNativeLibraryRootRequiresIsa(); + boolean isSupportsSmallScreens(); /** - * @see ApplicationInfo#PRIVATE_FLAG_ODM + * If omitted from manifest, returns true. + * @see R.styleable#AndroidManifestSupportsScreens_normalScreens + * @see ApplicationInfo#FLAG_SUPPORTS_NORMAL_SCREENS */ - boolean isOdm(); + boolean isSupportsNormalScreens(); /** - * @see ApplicationInfo#PRIVATE_FLAG_OEM + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_largeScreens + * @see ApplicationInfo#FLAG_SUPPORTS_LARGE_SCREENS */ - boolean isOem(); + boolean isSupportsLargeScreens(); /** - * @see ApplicationInfo#PRIVATE_FLAG_PRIVILEGED + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#GINGERBREAD}. + * @see R.styleable#AndroidManifestSupportsScreens_xlargeScreens + * @see ApplicationInfo#FLAG_SUPPORTS_XLARGE_SCREENS */ - boolean isPrivileged(); + boolean isSupportsExtraLargeScreens(); /** - * @see ApplicationInfo#PRIVATE_FLAG_PRODUCT + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_resizeable + * @see ApplicationInfo#FLAG_RESIZEABLE_FOR_SCREENS */ - boolean isProduct(); + boolean isResizeable(); /** - * @see ApplicationInfo#PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY + * If omitted from manifest, returns true if {@link #getTargetSdkVersion()} >= + * {@link android.os.Build.VERSION_CODES#DONUT}. + * @see R.styleable#AndroidManifestSupportsScreens_anyDensity + * @see ApplicationInfo#FLAG_SUPPORTS_SCREEN_DENSITIES */ - boolean isSignedWithPlatformKey(); + boolean isAnyDensity(); - /** - * @see ApplicationInfo#FLAG_SYSTEM - */ - boolean isSystem(); + /** @see ApplicationInfo#PRIVATE_FLAG_BACKUP_IN_FOREGROUND */ + boolean isBackupInForeground(); - /** - * @see ApplicationInfo#PRIVATE_FLAG_SYSTEM_EXT - */ - boolean isSystemExt(); + /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_CLEAR_USER_DATA_ON_FAILED_RESTORE */ + boolean isAllowClearUserDataOnFailedRestore(); - /** - * @see ApplicationInfo#PRIVATE_FLAG_VENDOR - */ - boolean isVendor(); + /** @see ApplicationInfo#PRIVATE_FLAG_ALLOW_AUDIO_PLAYBACK_CAPTURE */ + boolean isAllowAudioPlaybackCapture(); + + /** @see ApplicationInfo#PRIVATE_FLAG_HAS_FRAGILE_USER_DATA */ + boolean isHasFragileUserData(); } diff --git a/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java b/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java index b3b3910b35126..89330a9894d65 100644 --- a/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java +++ b/services/core/java/com/android/server/pm/parsing/pkg/PkgPackageInfo.java @@ -16,27 +16,143 @@ package com.android.server.pm.parsing.pkg; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.content.pm.ActivityInfo; +import android.content.pm.ConfigurationInfo; +import android.content.pm.FeatureGroupInfo; +import android.content.pm.FeatureInfo; +import android.content.pm.InstrumentationInfo; import android.content.pm.PackageInfo; -import android.content.pm.parsing.PkgWithoutStatePackageInfo; +import android.content.pm.PermissionInfo; +import android.content.pm.ProviderInfo; +import android.content.pm.ServiceInfo; +import android.content.pm.parsing.component.ParsedActivity; +import android.content.pm.parsing.component.ParsedInstrumentation; +import android.content.pm.parsing.component.ParsedPermission; +import android.content.pm.parsing.component.ParsedProvider; +import android.content.pm.parsing.component.ParsedService; -import com.android.server.pm.PackageManagerService; +import com.android.internal.R; + +import java.util.List; /** - * Equivalent of {@link PkgWithoutStatePackageInfo} but contains fields that are set inside {@link - * PackageManagerService} and thus are not available to the core SDK. - *

- * Everything in this interface is @SystemApi(client = SYSTEM_SERVER), but the interface itself is - * not. + * Container for fields that are eventually exposed through {@link PackageInfo}. + * + * Done to separate the meaningless, re-directed JavaDoc for methods and to separate what's + * exposed vs not exposed to core. + * + * @hide */ -public interface PkgPackageInfo extends PkgWithoutStatePackageInfo { +interface PkgPackageInfo { /** - * For marking packages required for a minimal boot state, through the "coreApp" manifest - * attribute. - * - * @see PackageInfo#coreApp + * @see PackageInfo#overlayCategory + * @see R.styleable#AndroidManifestResourceOverlay_category */ - boolean isCoreApp(); + @Nullable + String getOverlayCategory(); + + /** + * @see PackageInfo#overlayPriority + * @see R.styleable#AndroidManifestResourceOverlay_priority + */ + int getOverlayPriority(); + + /** + * @see PackageInfo#overlayTarget + * @see R.styleable#AndroidManifestResourceOverlay_targetPackage + */ + @Nullable + String getOverlayTarget(); + + /** + * @see PackageInfo#targetOverlayableName + * @see R.styleable#AndroidManifestResourceOverlay_targetName + */ + @Nullable + String getOverlayTargetName(); + + /** + * @see PackageInfo#sharedUserId + * @see R.styleable#AndroidManifest_sharedUserId + */ + @Deprecated + @Nullable + String getSharedUserId(); + + /** + * @see PackageInfo#sharedUserLabel + * @see R.styleable#AndroidManifest_sharedUserLabel + */ + @Deprecated + int getSharedUserLabel(); + + /** + * The required account type without which this application will not function. + * + * @see PackageInfo#requiredAccountType + * @see R.styleable#AndroidManifestApplication_requiredAccountType + */ + @Nullable + String getRequiredAccountType(); + + /** + * The restricted account authenticator type that is used by this application + * + * @see PackageInfo#restrictedAccountType + * @see R.styleable#AndroidManifestApplication_restrictedAccountType + */ + @Nullable + String getRestrictedAccountType(); + + /** @see PackageInfo#splitRevisionCodes */ + int[] getSplitRevisionCodes(); + + /** @see PackageInfo#getLongVersionCode() */ + long getLongVersionCode(); + + /** @see PackageInfo#versionCode */ + @Deprecated + int getVersionCode(); + + /** @see PackageInfo#versionCodeMajor */ + int getVersionCodeMajor(); + + /** @see PackageInfo#versionName */ + @Nullable + String getVersionName(); + + /** @see PackageInfo#mOverlayIsStatic */ + boolean isOverlayIsStatic(); + + /** + * @see PackageInfo#requiredForAllUsers + * @see R.styleable#AndroidManifestApplication_requiredForAllUsers + */ + boolean isRequiredForAllUsers(); + + /** + * @see PackageInfo#reqFeatures + * @see R.styleable#AndroidManifestUsesFeature + */ + @NonNull + List getReqFeatures(); + + /** + * @see PackageInfo#configPreferences + * @see R.styleable#AndroidManifestUsesConfiguration + */ + @NonNull + List getConfigPreferences(); + + /** + * @see PackageInfo#featureGroups + * @see R.styleable#AndroidManifestUsesFeature + */ + @NonNull + List getFeatureGroups(); /** * Whether or not the package is a stub and must be replaced by the full version. @@ -44,4 +160,66 @@ public interface PkgPackageInfo extends PkgWithoutStatePackageInfo { * @see PackageInfo#isStub */ boolean isStub(); + + /** + * For marking packages required for a minimal boot state, through the "coreApp" manifest + * attribute. + * @see PackageInfo#coreApp + */ + boolean isCoreApp(); + + /** + * All the permissions declared. This is an effective set, and may include permissions + * transformed from split/migrated permissions from previous versions, so may not be exactly + * what the package declares in its manifest. + * @see PackageInfo#requestedPermissions + * @see R.styleable#AndroidManifestUsesPermission + */ + @NonNull + List getRequestedPermissions(); + + /** + * @see ActivityInfo + * @see PackageInfo#activities + */ + @NonNull + List getActivities(); + + /** + * @see InstrumentationInfo + * @see PackageInfo#instrumentation + */ + @NonNull + List getInstrumentations(); + + /** + * @see PermissionInfo + * @see PackageInfo#permissions + */ + @NonNull + List getPermissions(); + + /** + * @see ProviderInfo + * @see PackageInfo#providers + */ + @NonNull + List getProviders(); + + /** + * Since they share several attributes, receivers are parsed as {@link ParsedActivity}, even + * though they represent different functionality. + * TODO(b/135203078): Reconsider this and maybe make ParsedReceiver so it's not so confusing + * @see ActivityInfo + * @see PackageInfo#receivers + */ + @NonNull + List getReceivers(); + + /** + * @see ServiceInfo + * @see PackageInfo#services + */ + @NonNull + List getServices(); } diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index de1e25ae48908..904e88920824c 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -154,7 +154,6 @@ import com.android.server.pm.UserManagerInternal; import com.android.server.pm.UserManagerService; import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.permission.PermissionManagerServiceInternal.HotwordDetectionServiceProvider; import com.android.server.pm.permission.PermissionManagerServiceInternal.OnRuntimePermissionStateChangedListener; import com.android.server.policy.PermissionPolicyInternal; @@ -1486,8 +1485,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { && mayManageRolePermission(callingUid); final boolean mayGrantSoftRestrictedPermission = isSoftRestrictedPermission && SoftRestrictedPermissionPolicy.forPermission(mContext, - AndroidPackageUtils.generateAppInfoWithoutState(pkg), pkg, - UserHandle.of(userId), permName) + pkg.toAppInfoWithoutState(), pkg, UserHandle.of(userId), permName) .mayGrantPermission(); final boolean isRuntimePermission; diff --git a/services/core/java/com/android/server/pm/pkg/AndroidPackageApi.java b/services/core/java/com/android/server/pm/pkg/AndroidPackageApi.java deleted file mode 100644 index 3fde41a257ac0..0000000000000 --- a/services/core/java/com/android/server/pm/pkg/AndroidPackageApi.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.pkg; - -import android.annotation.SystemApi; - -import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.PkgAppInfo; -import com.android.server.pm.parsing.pkg.PkgPackageInfo; - -/** - * Explicit interface used for consumers like mainline who need a {@link SystemApi @SystemApi} form - * of {@link AndroidPackage}. - *

- * There should be no methods in this class. All of them must come from other interfaces that group - * the actual methods. This is done to ensure proper separation of the (legacy?) Info object APIs. - */ -// TODO(b/173807334): Expose API -//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) -public interface AndroidPackageApi extends PkgPackageInfo, PkgAppInfo { - -} diff --git a/services/core/java/com/android/server/pm/pkg/PackageState.java b/services/core/java/com/android/server/pm/pkg/PackageState.java deleted file mode 100644 index 0d29babb2af20..0000000000000 --- a/services/core/java/com/android/server/pm/pkg/PackageState.java +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.pkg; - -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.annotation.SystemApi; -import android.annotation.UserIdInt; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.SharedLibraryInfo; -import android.content.pm.SigningInfo; -import android.content.pm.pkg.PackageUserState; - -import com.android.internal.R; -import com.android.server.pm.PackageSetting; -import com.android.server.pm.Settings; - -import java.io.File; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * The API surface for a {@link PackageSetting}. Methods are expected to return immutable objects. - * This may mean copying data on each invocation until related classes are refactored to be - * immutable. - *

- * Note that until immutability or read-only caching is enabled, {@link PackageSetting} cannot be - * returned directly, so {@link PackageStateImpl} is used to temporarily copy the data. This is a - * relatively expensive operation since it has to create an object for every package, but it's much - * lighter than the alternative of generating {@link PackageInfo} objects. - *

- * TODO: Documentation TODO: Currently missing, should be exposed as API? - *

    - *
  • keySetData
  • - *
  • installSource
  • - *
  • incrementalStates
  • - *
- * - * @hide - * - * TODO(chiuwinson): Delete all of the method defaults - */ -// TODO(b/173807334): Expose API -//@SystemApi(client = SystemApi.Client.SYSTEM_SERVER) -public interface PackageState { - - /** - * This can be null whenever a physical APK on device is missing. This can be the result of - * removing an external storage device where the APK resides. - *

- * This will result in the system reading the {@link PackageSetting} from disk, but without - * being able to parse the base APK's AndroidManifest.xml to read all of its metadata. The data - * that is written and read in {@link Settings} includes a minimal set of metadata needed to - * perform other checks in the system. - *

- * This is important in order to enforce uniqueness within the system, as the package, even if - * on a removed storage device, is still considered installed. Another package of the same - * application ID or declaring the same permissions or similar cannot be installed. - *

- * Re-attaching the storage device to make the APK available should allow the user to use the - * app once the device reboots or otherwise re-scans it. - */ - @Nullable - default AndroidPackageApi getAndroidPackage() { return null; } - - /** - * The non-user-specific UID - */ - default int getAppId() { return -1; } - - /** - * Value set through {@link PackageManager#setApplicationCategoryHint(String, int)}. Only - * applied if the application itself does not declare a category. - * - * @see AndroidPackageApi#getCategory() - */ - default int getCategoryOverride() { return -1; } - - @Nullable - default String getCpuAbiOverride() { return null; } - - /** - * In epoch milliseconds. - */ - default long getFirstInstallTime() { return -1; } - - /** - * In epoch milliseconds. - */ - default long getLastModifiedTime() { return -1; } - - @NonNull - default long[] getLastPackageUsageTime() { return null; } - - /** - * In epoch milliseconds. - */ - default long getLastUpdateTime() { return -1; } - - /** - * @see AndroidPackageApi#getLongVersionCode() - */ - default long getLongVersionCode() { return -1; } - - /** - * Maps mime group name to the set of Mime types in a group. Mime groups declared by app are - * populated with empty sets at construction. Mime groups can not be created/removed at runtime, - * thus keys in this map should not change - */ - @NonNull - default Map> getMimeGroups() { return null; } - - /** - * @see AndroidPackageApi#getPackageName() - */ - @NonNull - default String getPackageName() { return null; } - - /** - * @see AndroidPackageApi#getPath() - */ - @NonNull - default File getPath() { return null; } - - @Nullable - default String getPrimaryCpuAbi() { return null; } - - @Nullable - default String getSeInfoOverride() { return null; } - - @Nullable - default String getSecondaryCpuAbi() { return null; } - - /** - * Retrieves the shared user ID. Note that the actual shared user data is not available here and - * must be queried separately. - * - * @return the shared user this package is a part of, or null if it's not part of a shared user. - */ - @Nullable - default Integer getSharedUserId() { return null; } - - @NonNull - default SigningInfo getSigningInfo() { return null; } - - /** - * Valid users for this package, for use with {@link #getUserState(int)}. - */ - default int[] getUserIds() { return null; } - - /** - * Retrieves per-user state for this package. Acceptable user IDs are in {@link #getUserIds()}. - */ - @Nullable - default PackageUserState getUserState(@UserIdInt int userId) { return null; } - - /** - * The actual files resolved for each shared library. - * - * @see R.styleable#AndroidManifestUsesLibrary - */ - @NonNull - default List getUsesLibraryFiles() { return null; } - - /** - * @see R.styleable#AndroidManifestUsesLibrary - */ - @NonNull - default List getUsesLibraryInfos() { return null; } - - /** - * @see R.styleable#AndroidManifestUsesStaticLibrary - */ - @NonNull - default String[] getUsesStaticLibraries() { return null; } - - /** - * @see R.styleable#AndroidManifestUsesStaticLibrary_version - */ - @NonNull - default long[] getUsesStaticLibrariesVersions() { return null; } - - /** - * @see AndroidPackageApi#getVolumeUuid() - */ - @Nullable - default String getVolumeUuid() { return null; } - - /** - * @see AndroidPackageApi#isExternalStorage() - */ - default boolean isExternalStorage() { return false; } - - /** - * Whether a package was installed --force-queryable such that it is always queryable by any - * package, regardless of their manifest content. - */ - default boolean isForceQueryableOverride() { return false; } - - /** - * Whether a package is treated as hidden until it is installed for a user. - * - * @see PackageManager#MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS - * @see PackageManager#setSystemAppState - */ - default boolean isHiddenUntilInstalled() { return false; } - - default boolean isInstallPermissionsFixed() { return false; } - - /** - * @see AndroidPackageApi#isOdm() - */ - default boolean isOdm() { return false; } - - /** - * @see AndroidPackageApi#isOem() - */ - default boolean isOem() { return false; } - - /** - * @see AndroidPackageApi#isPrivileged() - */ - default boolean isPrivileged() { return false; } - - /** - * @see AndroidPackageApi#isProduct() - */ - default boolean isProduct() { return false; } - - /** - * @see ApplicationInfo#PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER - */ - default boolean isRequiredForSystemUser() { return false; } - - /** - * @see AndroidPackageApi#isSystem() - */ - default boolean isSystem() { return false; } - - /** - * @see AndroidPackageApi#isSystemExt() - */ - default boolean isSystemExt() { return false; } - - /** - * Whether or not an update is available. Ostensibly only for instant apps. - */ - default boolean isUpdateAvailable() { return false; } - - /** - * Whether this app is on the /data partition having been upgraded from a preinstalled app on a - * system partition. - */ - default boolean isUpdatedSystemApp() { return false; } - - /** - * @see AndroidPackageApi#isVendor() - */ - default boolean isVendor() { return false; } -} diff --git a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java b/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java deleted file mode 100644 index 6cd55c1bd662e..0000000000000 --- a/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java +++ /dev/null @@ -1,651 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.pm.pkg; - -import android.annotation.IntDef; -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.content.pm.PackageManager; -import android.content.pm.PackageManagerInternal; -import android.content.pm.SharedLibraryInfo; -import android.content.pm.SigningInfo; -import android.content.pm.overlay.OverlayPaths; -import android.content.pm.pkg.PackageUserState; -import android.util.SparseArray; - -import com.android.internal.util.DataClass; -import com.android.server.pm.PackageManagerService; -import com.android.server.pm.PackageSetting; -import com.android.server.pm.Settings; -import com.android.server.pm.parsing.pkg.AndroidPackage; - -import java.io.File; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Consumer; - -/** - * Because a {@link PackageSetting} cannot be returned from {@link Settings} without holding the - * {@link PackageManagerService#mLock}, this class serves as a memory snapshot of the state of a - * single package, for use with {@link PackageManagerInternal#getPackageState(String)} and {@link - * PackageManagerInternal#forEachPackageState(boolean, Consumer)}. - * - * @hide - */ -@DataClass(genConstructor = false) -@DataClass.Suppress({"mUserStates"}) -public class PackageStateImpl implements PackageState { - - public static PackageState copy(@NonNull PackageSetting pkgSetting) { - return new PackageStateImpl(pkgSetting, pkgSetting.getPkg()); - } - - private static class Booleans { - @IntDef({ - SYSTEM, - EXTERNAL_STORAGE, - PRIVILEGED, - OEM, - VENDOR, - PRODUCT, - SYSTEM_EXT, - REQUIRED_FOR_SYSTEM_USER, - ODM, - FORCE_QUERYABLE_OVERRIDE, - HIDDEN_UNTIL_INSTALLED, - INSTALL_PERMISSIONS_FIXED, - UPDATE_AVAILABLE, - UPDATED_SYSTEM_APP, - }) - public @interface Flags { - } - - private static final int SYSTEM = 1; - private static final int EXTERNAL_STORAGE = 1 << 1; - private static final int PRIVILEGED = 1 << 2; - private static final int OEM = 1 << 3; - private static final int VENDOR = 1 << 4; - private static final int PRODUCT = 1 << 5; - private static final int SYSTEM_EXT = 1 << 6; - private static final int REQUIRED_FOR_SYSTEM_USER = 1 << 7; - private static final int ODM = 1 << 8; - private static final int FORCE_QUERYABLE_OVERRIDE = 1 << 9; - private static final int HIDDEN_UNTIL_INSTALLED = 1 << 10; - private static final int INSTALL_PERMISSIONS_FIXED = 1 << 11; - private static final int UPDATE_AVAILABLE = 1 << 12; - private static final int UPDATED_SYSTEM_APP = 1 << 13; - } - - private int mBooleans; - - private void setBoolean(@Booleans.Flags int flag, boolean value) { - if (value) { - mBooleans |= flag; - } else { - mBooleans &= ~flag; - } - } - - private boolean getBoolean(@Booleans.Flags int flag) { - return (mBooleans & flag) != 0; - } - - @Nullable - private final AndroidPackageApi mAndroidPackage; - - @NonNull - private final String mPackageName; - @Nullable - private final String mVolumeUuid; - private final int mAppId; - private final int mCategoryOverride; - @Nullable - private final String mCpuAbiOverride; - private final long mFirstInstallTime; - private final long mLastModifiedTime; - private final long mLastUpdateTime; - private final long mLongVersionCode; - @NonNull - private final Map> mMimeGroups; - @NonNull - private final File mPath; - @Nullable - private final String mPrimaryCpuAbi; - @Nullable - private final String mSecondaryCpuAbi; - @Nullable - private final Integer mSharedUserId; - @NonNull - private final String[] mUsesStaticLibraries; - @NonNull - private final long[] mUsesStaticLibrariesVersions; - @NonNull - private final List mUsesLibraryInfos; - @NonNull - private final List mUsesLibraryFiles; - @Nullable - private final String mSeInfoOverride; - @NonNull - private final long[] mLastPackageUsageTime; - @NonNull - private final SigningInfo mSigningInfo; - @NonNull - private final int[] mUserIds; - @NonNull - private final SparseArray mUserStates; - - private PackageStateImpl(@NonNull PackageState pkgState, @Nullable AndroidPackage pkg) { - mAndroidPackage = pkg; - - setBoolean(Booleans.SYSTEM, pkgState.isSystem()); - setBoolean(Booleans.EXTERNAL_STORAGE, pkgState.isExternalStorage()); - setBoolean(Booleans.PRIVILEGED, pkgState.isPrivileged()); - setBoolean(Booleans.OEM, pkgState.isOem()); - setBoolean(Booleans.VENDOR, pkgState.isVendor()); - setBoolean(Booleans.PRODUCT, pkgState.isProduct()); - setBoolean(Booleans.SYSTEM_EXT, pkgState.isSystemExt()); - setBoolean(Booleans.REQUIRED_FOR_SYSTEM_USER, pkgState.isRequiredForSystemUser()); - setBoolean(Booleans.ODM, pkgState.isOdm()); - - mPackageName = pkgState.getPackageName(); - mVolumeUuid = pkgState.getVolumeUuid(); - mAppId = pkgState.getAppId(); - mCategoryOverride = pkgState.getCategoryOverride(); - mCpuAbiOverride = pkgState.getCpuAbiOverride(); - mFirstInstallTime = pkgState.getFirstInstallTime(); - mLastModifiedTime = pkgState.getLastModifiedTime(); - mLastUpdateTime = pkgState.getLastUpdateTime(); - mLongVersionCode = pkgState.getLongVersionCode(); - mMimeGroups = pkgState.getMimeGroups(); - mPath = pkgState.getPath(); - mPrimaryCpuAbi = pkgState.getPrimaryCpuAbi(); - mSecondaryCpuAbi = pkgState.getSecondaryCpuAbi(); - mSharedUserId = pkgState.getSharedUserId(); - mUsesStaticLibraries = pkgState.getUsesStaticLibraries(); - mUsesStaticLibrariesVersions = pkgState.getUsesStaticLibrariesVersions(); - mUsesLibraryInfos = pkgState.getUsesLibraryInfos(); - mUsesLibraryFiles = pkgState.getUsesLibraryFiles(); - setBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE, pkgState.isForceQueryableOverride()); - setBoolean(Booleans.HIDDEN_UNTIL_INSTALLED, pkgState.isHiddenUntilInstalled()); - setBoolean(Booleans.INSTALL_PERMISSIONS_FIXED, pkgState.isInstallPermissionsFixed()); - setBoolean(Booleans.UPDATE_AVAILABLE, pkgState.isUpdateAvailable()); - mSeInfoOverride = pkgState.getSeInfoOverride(); - mLastPackageUsageTime = pkgState.getLastPackageUsageTime(); - setBoolean(Booleans.UPDATED_SYSTEM_APP, pkgState.isUpdatedSystemApp()); - mSigningInfo = pkgState.getSigningInfo(); - - mUserIds = pkgState.getUserIds(); - mUserStates = new SparseArray<>(mUserIds.length); - for (int userId : mUserIds) { - mUserStates.put(userId, UserStateImpl.copy(pkgState.getUserState(userId))); - } - } - - @Nullable - @Override - public PackageUserState getUserState(int userId) { - return mUserStates.get(userId); - } - - @Override - public boolean isExternalStorage() { - return getBoolean(Booleans.EXTERNAL_STORAGE); - } - - @Override - public boolean isForceQueryableOverride() { - return getBoolean(Booleans.FORCE_QUERYABLE_OVERRIDE); - } - - @Override - public boolean isHiddenUntilInstalled() { - return getBoolean(Booleans.HIDDEN_UNTIL_INSTALLED); - } - - @Override - public boolean isInstallPermissionsFixed() { - return getBoolean(Booleans.INSTALL_PERMISSIONS_FIXED); - } - - @Override - public boolean isOdm() { - return getBoolean(Booleans.ODM); - } - - @Override - public boolean isOem() { - return getBoolean(Booleans.OEM); - } - - @Override - public boolean isPrivileged() { - return getBoolean(Booleans.PRIVILEGED); - } - - @Override - public boolean isProduct() { - return getBoolean(Booleans.PRODUCT); - } - - @Override - public boolean isRequiredForSystemUser() { - return getBoolean(Booleans.REQUIRED_FOR_SYSTEM_USER); - } - - @Override - public boolean isSystem() { - return getBoolean(Booleans.SYSTEM); - } - - @Override - public boolean isSystemExt() { - return getBoolean(Booleans.SYSTEM_EXT); - } - - @Override - public boolean isUpdateAvailable() { - return getBoolean(Booleans.UPDATE_AVAILABLE); - } - - @Override - public boolean isUpdatedSystemApp() { - return getBoolean(Booleans.UPDATED_SYSTEM_APP); - } - - @Override - public boolean isVendor() { - return getBoolean(Booleans.VENDOR); - } - - /** - * @hide - */ - @DataClass(genConstructor = false) - public static class UserStateImpl implements PackageUserState { - - public static PackageUserState copy(@NonNull PackageUserState state) { - return new UserStateImpl(state); - } - - private static class Booleans { - @IntDef({ - HIDDEN, - INSTALLED, - INSTANT_APP, - NOT_LAUNCHED, - STOPPED, - SUSPENDED, - VIRTUAL_PRELOAD, - }) - public @interface Flags { - } - - private static final int HIDDEN = 1; - private static final int INSTALLED = 1 << 1; - private static final int INSTANT_APP = 1 << 2; - private static final int NOT_LAUNCHED = 1 << 3; - private static final int STOPPED = 1 << 4; - private static final int SUSPENDED = 1 << 5; - private static final int VIRTUAL_PRELOAD = 1 << 6; - } - - private int mBooleans; - - private void setBoolean(@Booleans.Flags int flag, boolean value) { - if (value) { - mBooleans |= flag; - } else { - mBooleans &= ~flag; - } - } - - private boolean getBoolean(@Booleans.Flags int flag) { - return (mBooleans & flag) != 0; - } - - private final long mCeDataInode; - @NonNull - private final Set mDisabledComponents; - @PackageManager.DistractionRestriction - private final int mDistractionFlags; - @NonNull - private final Set mEnabledComponents; - private final int mEnabledState; - @Nullable - private final String mHarmfulAppWarning; - @PackageManager.InstallReason - private final int mInstallReason; - @Nullable - private final String mLastDisableAppCaller; - @NonNull - private final OverlayPaths mOverlayPaths; - @NonNull - private final Map mSharedLibraryOverlayPaths; - @PackageManager.UninstallReason - private final int mUninstallReason; - - private UserStateImpl(@NonNull PackageUserState userState) { - mCeDataInode = userState.getCeDataInode(); - mDisabledComponents = userState.getDisabledComponents(); - mDistractionFlags = userState.getDistractionFlags(); - mEnabledComponents = userState.getEnabledComponents(); - mEnabledState = userState.getEnabledState(); - mHarmfulAppWarning = userState.getHarmfulAppWarning(); - mInstallReason = userState.getInstallReason(); - mLastDisableAppCaller = userState.getLastDisableAppCaller(); - mOverlayPaths = userState.getOverlayPaths(); - mSharedLibraryOverlayPaths = userState.getSharedLibraryOverlayPaths(); - mUninstallReason = userState.getUninstallReason(); - setBoolean(Booleans.HIDDEN, userState.isHidden()); - setBoolean(Booleans.INSTALLED, userState.isInstalled()); - setBoolean(Booleans.INSTANT_APP, userState.isInstantApp()); - setBoolean(Booleans.NOT_LAUNCHED, userState.isNotLaunched()); - setBoolean(Booleans.STOPPED, userState.isStopped()); - setBoolean(Booleans.SUSPENDED, userState.isSuspended()); - setBoolean(Booleans.VIRTUAL_PRELOAD, userState.isVirtualPreload()); - } - - @Override - public boolean isHidden() { - return getBoolean(Booleans.HIDDEN); - } - - @Override - public boolean isInstalled() { - return getBoolean(Booleans.INSTALLED); - } - - @Override - public boolean isInstantApp() { - return getBoolean(Booleans.INSTANT_APP); - } - - @Override - public boolean isNotLaunched() { - return getBoolean(Booleans.NOT_LAUNCHED); - } - - @Override - public boolean isStopped() { - return getBoolean(Booleans.STOPPED); - } - - @Override - public boolean isSuspended() { - return getBoolean(Booleans.SUSPENDED); - } - - @Override - public boolean isVirtualPreload() { - return getBoolean(Booleans.VIRTUAL_PRELOAD); - } - - - - // Code below generated by codegen v1.0.23. - // - // DO NOT MODIFY! - // CHECKSTYLE:OFF Generated code - // - // To regenerate run: - // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java - // - // To exclude the generated code from IntelliJ auto-formatting enable (one-time): - // Settings > Editor > Code Style > Formatter Control - //@formatter:off - - - @DataClass.Generated.Member - public int getBooleans() { - return mBooleans; - } - - @DataClass.Generated.Member - public long getCeDataInode() { - return mCeDataInode; - } - - @DataClass.Generated.Member - public @NonNull Set getDisabledComponents() { - return mDisabledComponents; - } - - @DataClass.Generated.Member - public @PackageManager.DistractionRestriction int getDistractionFlags() { - return mDistractionFlags; - } - - @DataClass.Generated.Member - public @NonNull Set getEnabledComponents() { - return mEnabledComponents; - } - - @DataClass.Generated.Member - public int getEnabledState() { - return mEnabledState; - } - - @DataClass.Generated.Member - public @Nullable String getHarmfulAppWarning() { - return mHarmfulAppWarning; - } - - @DataClass.Generated.Member - public @PackageManager.InstallReason int getInstallReason() { - return mInstallReason; - } - - @DataClass.Generated.Member - public @Nullable String getLastDisableAppCaller() { - return mLastDisableAppCaller; - } - - @DataClass.Generated.Member - public @NonNull OverlayPaths getOverlayPaths() { - return mOverlayPaths; - } - - @DataClass.Generated.Member - public @NonNull Map getSharedLibraryOverlayPaths() { - return mSharedLibraryOverlayPaths; - } - - @DataClass.Generated.Member - public @PackageManager.UninstallReason int getUninstallReason() { - return mUninstallReason; - } - - @DataClass.Generated.Member - public @NonNull UserStateImpl setBooleans( int value) { - mBooleans = value; - return this; - } - - @DataClass.Generated( - time = 1630602933994L, - codegenVersion = "1.0.23", - sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java", - inputSignatures = "private int mBooleans\nprivate final long mCeDataInode\nprivate final @android.annotation.NonNull java.util.Set mDisabledComponents\nprivate final @android.content.pm.PackageManager.DistractionRestriction int mDistractionFlags\nprivate final @android.annotation.NonNull java.util.Set mEnabledComponents\nprivate final int mEnabledState\nprivate final @android.annotation.Nullable java.lang.String mHarmfulAppWarning\nprivate final @android.content.pm.PackageManager.InstallReason int mInstallReason\nprivate final @android.annotation.Nullable java.lang.String mLastDisableAppCaller\nprivate final @android.annotation.NonNull android.content.pm.overlay.OverlayPaths mOverlayPaths\nprivate final @android.annotation.NonNull java.util.Map mSharedLibraryOverlayPaths\nprivate final @android.content.pm.PackageManager.UninstallReason int mUninstallReason\npublic static android.content.pm.pkg.PackageUserState copy(android.content.pm.pkg.PackageUserState)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @java.lang.Override boolean isHidden()\npublic @java.lang.Override boolean isInstalled()\npublic @java.lang.Override boolean isInstantApp()\npublic @java.lang.Override boolean isNotLaunched()\npublic @java.lang.Override boolean isStopped()\npublic @java.lang.Override boolean isSuspended()\npublic @java.lang.Override boolean isVirtualPreload()\nclass UserStateImpl extends java.lang.Object implements [android.content.pm.pkg.PackageUserState]\nprivate static final int HIDDEN\nprivate static final int INSTALLED\nprivate static final int INSTANT_APP\nprivate static final int NOT_LAUNCHED\nprivate static final int STOPPED\nprivate static final int SUSPENDED\nprivate static final int VIRTUAL_PRELOAD\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)") - @Deprecated - private void __metadata() {} - - - //@formatter:on - // End of generated code - - } - - - - // Code below generated by codegen v1.0.23. - // - // DO NOT MODIFY! - // CHECKSTYLE:OFF Generated code - // - // To regenerate run: - // $ codegen $ANDROID_BUILD_TOP/frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java - // - // To exclude the generated code from IntelliJ auto-formatting enable (one-time): - // Settings > Editor > Code Style > Formatter Control - //@formatter:off - - - @DataClass.Generated.Member - public int getBooleans() { - return mBooleans; - } - - @DataClass.Generated.Member - public @Nullable AndroidPackageApi getAndroidPackage() { - return mAndroidPackage; - } - - @DataClass.Generated.Member - public @NonNull String getPackageName() { - return mPackageName; - } - - @DataClass.Generated.Member - public @Nullable String getVolumeUuid() { - return mVolumeUuid; - } - - @DataClass.Generated.Member - public int getAppId() { - return mAppId; - } - - @DataClass.Generated.Member - public int getCategoryOverride() { - return mCategoryOverride; - } - - @DataClass.Generated.Member - public @Nullable String getCpuAbiOverride() { - return mCpuAbiOverride; - } - - @DataClass.Generated.Member - public long getFirstInstallTime() { - return mFirstInstallTime; - } - - @DataClass.Generated.Member - public long getLastModifiedTime() { - return mLastModifiedTime; - } - - @DataClass.Generated.Member - public long getLastUpdateTime() { - return mLastUpdateTime; - } - - @DataClass.Generated.Member - public long getLongVersionCode() { - return mLongVersionCode; - } - - @DataClass.Generated.Member - public @NonNull Map> getMimeGroups() { - return mMimeGroups; - } - - @DataClass.Generated.Member - public @NonNull File getPath() { - return mPath; - } - - @DataClass.Generated.Member - public @Nullable String getPrimaryCpuAbi() { - return mPrimaryCpuAbi; - } - - @DataClass.Generated.Member - public @Nullable String getSecondaryCpuAbi() { - return mSecondaryCpuAbi; - } - - @DataClass.Generated.Member - public @Nullable Integer getSharedUserId() { - return mSharedUserId; - } - - @DataClass.Generated.Member - public @NonNull String[] getUsesStaticLibraries() { - return mUsesStaticLibraries; - } - - @DataClass.Generated.Member - public @NonNull long[] getUsesStaticLibrariesVersions() { - return mUsesStaticLibrariesVersions; - } - - @DataClass.Generated.Member - public @NonNull List getUsesLibraryInfos() { - return mUsesLibraryInfos; - } - - @DataClass.Generated.Member - public @NonNull List getUsesLibraryFiles() { - return mUsesLibraryFiles; - } - - @DataClass.Generated.Member - public @Nullable String getSeInfoOverride() { - return mSeInfoOverride; - } - - @DataClass.Generated.Member - public @NonNull long[] getLastPackageUsageTime() { - return mLastPackageUsageTime; - } - - @DataClass.Generated.Member - public @NonNull SigningInfo getSigningInfo() { - return mSigningInfo; - } - - @DataClass.Generated.Member - public @NonNull int[] getUserIds() { - return mUserIds; - } - - @DataClass.Generated.Member - public @NonNull SparseArray getUserStates() { - return mUserStates; - } - - @DataClass.Generated.Member - public @NonNull PackageStateImpl setBooleans( int value) { - mBooleans = value; - return this; - } - - @DataClass.Generated( - time = 1630602934025L, - codegenVersion = "1.0.23", - sourceFile = "frameworks/base/services/core/java/com/android/server/pm/pkg/PackageStateImpl.java", - inputSignatures = "private int mBooleans\nprivate final @android.annotation.Nullable com.android.server.pm.pkg.AndroidPackageApi mAndroidPackage\nprivate final @android.annotation.NonNull java.lang.String mPackageName\nprivate final @android.annotation.Nullable java.lang.String mVolumeUuid\nprivate final int mAppId\nprivate final int mCategoryOverride\nprivate final @android.annotation.Nullable java.lang.String mCpuAbiOverride\nprivate final long mFirstInstallTime\nprivate final long mLastModifiedTime\nprivate final long mLastUpdateTime\nprivate final long mLongVersionCode\nprivate final @android.annotation.NonNull java.util.Map> mMimeGroups\nprivate final @android.annotation.NonNull java.io.File mPath\nprivate final @android.annotation.Nullable java.lang.String mPrimaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.String mSecondaryCpuAbi\nprivate final @android.annotation.Nullable java.lang.Integer mSharedUserId\nprivate final @android.annotation.NonNull java.lang.String[] mUsesStaticLibraries\nprivate final @android.annotation.NonNull long[] mUsesStaticLibrariesVersions\nprivate final @android.annotation.NonNull java.util.List mUsesLibraryInfos\nprivate final @android.annotation.NonNull java.util.List mUsesLibraryFiles\nprivate final @android.annotation.Nullable java.lang.String mSeInfoOverride\nprivate final @android.annotation.NonNull long[] mLastPackageUsageTime\nprivate final @android.annotation.NonNull android.content.pm.SigningInfo mSigningInfo\nprivate final @android.annotation.NonNull int[] mUserIds\nprivate final @android.annotation.NonNull android.util.SparseArray mUserStates\npublic static com.android.server.pm.pkg.PackageState copy(com.android.server.pm.PackageSetting)\nprivate void setBoolean(int,boolean)\nprivate boolean getBoolean(int)\npublic @android.annotation.Nullable @java.lang.Override android.content.pm.pkg.PackageUserState getUserState(int)\npublic @java.lang.Override boolean isExternalStorage()\npublic @java.lang.Override boolean isForceQueryableOverride()\npublic @java.lang.Override boolean isHiddenUntilInstalled()\npublic @java.lang.Override boolean isInstallPermissionsFixed()\npublic @java.lang.Override boolean isOdm()\npublic @java.lang.Override boolean isOem()\npublic @java.lang.Override boolean isPrivileged()\npublic @java.lang.Override boolean isProduct()\npublic @java.lang.Override boolean isRequiredForSystemUser()\npublic @java.lang.Override boolean isSystem()\npublic @java.lang.Override boolean isSystemExt()\npublic @java.lang.Override boolean isUpdateAvailable()\npublic @java.lang.Override boolean isUpdatedSystemApp()\npublic @java.lang.Override boolean isVendor()\nclass PackageStateImpl extends java.lang.Object implements [com.android.server.pm.pkg.PackageState]\nprivate static final int SYSTEM\nprivate static final int EXTERNAL_STORAGE\nprivate static final int PRIVILEGED\nprivate static final int OEM\nprivate static final int VENDOR\nprivate static final int PRODUCT\nprivate static final int SYSTEM_EXT\nprivate static final int REQUIRED_FOR_SYSTEM_USER\nprivate static final int ODM\nprivate static final int FORCE_QUERYABLE_OVERRIDE\nprivate static final int HIDDEN_UNTIL_INSTALLED\nprivate static final int INSTALL_PERMISSIONS_FIXED\nprivate static final int UPDATE_AVAILABLE\nprivate static final int UPDATED_SYSTEM_APP\nclass Booleans extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genConstructor=false)") - @Deprecated - private void __metadata() {} - - - //@formatter:on - // End of generated code - -} diff --git a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java index 8dc02b75f9758..ba64d25178e76 100644 --- a/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java +++ b/services/core/java/com/android/server/pm/verify/domain/DomainVerificationService.java @@ -843,7 +843,7 @@ public class DomainVerificationService extends SystemService @Override public void migrateState(@NonNull PackageSetting oldPkgSetting, @NonNull PackageSetting newPkgSetting) { - String pkgName = newPkgSetting.getPackageName(); + String pkgName = newPkgSetting.getName(); boolean sendBroadcast; synchronized (mLock) { @@ -936,7 +936,7 @@ public class DomainVerificationService extends SystemService // gains or loses all domains. UUID domainSetId = newPkgSetting.getDomainSetId(); - String pkgName = newPkgSetting.getPackageName(); + String pkgName = newPkgSetting.getName(); boolean sendBroadcast = true; @@ -1032,7 +1032,7 @@ public class DomainVerificationService extends SystemService @NonNull ArrayMap stateMap, @NonNull ArraySet autoVerifyDomains) { if (pkgSetting.isSystem() - && mSystemConfig.getLinkedApps().contains(pkgSetting.getPackageName())) { + && mSystemConfig.getLinkedApps().contains(pkgSetting.getName())) { int domainsSize = autoVerifyDomains.size(); for (int index = 0; index < domainsSize; index++) { stateMap.put(autoVerifyDomains.valueAt(index), @@ -1718,7 +1718,7 @@ public class DomainVerificationService extends SystemService @Override public int approvalLevelForDomain(@NonNull PackageSetting pkgSetting, @NonNull Intent intent, @PackageManager.ResolveInfoFlags int resolveInfoFlags, @UserIdInt int userId) { - String packageName = pkgSetting.getPackageName(); + String packageName = pkgSetting.getName(); if (!DomainVerificationUtils.isDomainVerificationIntent(intent, resolveInfoFlags)) { if (DEBUG_APPROVAL) { debugApproval(packageName, intent, userId, false, "not valid intent"); @@ -1762,7 +1762,7 @@ public class DomainVerificationService extends SystemService private int approvalLevelForDomainInternal(@NonNull PackageSetting pkgSetting, @NonNull String host, boolean includeNegative, @UserIdInt int userId, @NonNull Object debugObject) { - String packageName = pkgSetting.getPackageName(); + String packageName = pkgSetting.getName(); final AndroidPackage pkg = pkgSetting.getPkg(); if (pkg != null && includeNegative && !mCollector.containsWebDomain(pkg, host)) { diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt index 64c426bfb3dff..a7644ec439da5 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/parsing/parcelling/AndroidPackageTest.kt @@ -43,14 +43,12 @@ import android.util.SparseArray import android.util.SparseIntArray import com.android.internal.R import com.android.server.pm.parsing.pkg.AndroidPackage -import com.android.server.pm.parsing.pkg.AndroidPackageUtils import com.android.server.pm.parsing.pkg.PackageImpl import com.android.server.testutils.mockThrowOnUnmocked import com.android.server.testutils.whenever import java.security.KeyPairGenerator import java.security.PublicKey import kotlin.contracts.ExperimentalContracts -import kotlin.reflect.KFunction1 @ExperimentalContracts class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, PackageImpl::class) { @@ -84,6 +82,7 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag "getLongVersionCode", // Tested through constructor "getManifestPackageName", + "setManifestPackageName", // Utility methods "getStorageUuid", // Removal not tested, irrelevant for parcelling concerns @@ -143,19 +142,21 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag AndroidPackage::getOverlayCategory, AndroidPackage::getOverlayPriority, AndroidPackage::getOverlayTarget, - AndroidPackage::getOverlayTargetOverlayableName, + AndroidPackage::getOverlayTargetName, AndroidPackage::getPackageName, AndroidPackage::getPath, AndroidPackage::getPermission, - PackageImpl::getPrimaryCpuAbi, + AndroidPackage::getPrimaryCpuAbi, AndroidPackage::getProcessName, + AndroidPackage::getRealPackage, AndroidPackage::getRequiredAccountType, AndroidPackage::getRequiresSmallestWidthDp, AndroidPackage::getResizeableActivity, AndroidPackage::getRestrictedAccountType, AndroidPackage::getRoundIconRes, - PackageImpl::getSeInfo, - PackageImpl::getSecondaryCpuAbi, + AndroidPackage::getSeInfo, + AndroidPackage::getSeInfoUser, + AndroidPackage::getSecondaryCpuAbi, AndroidPackage::getSecondaryNativeLibraryDir, AndroidPackage::getSharedUserId, AndroidPackage::getSharedUserLabel, @@ -235,8 +236,8 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag override fun extraParams() = listOf( getter(AndroidPackage::getVolumeUuid, "57554103-df3e-4475-ae7a-8feba49353ac"), getter(AndroidPackage::isProfileable, true), - getter(PackageImpl::getVersionCode, 3), - getter(PackageImpl::getVersionCodeMajor, 9), + getter(AndroidPackage::getVersionCode, 3), + getter(AndroidPackage::getVersionCodeMajor, 9), getter(AndroidPackage::getUpgradeKeySets, setOf("testUpgradeKeySet")), getter(AndroidPackage::isAnyDensity, false, 0), getter(AndroidPackage::isResizeable, false, 0), @@ -423,7 +424,7 @@ class AndroidPackageTest : ParcelableComponentTest(AndroidPackage::class, Packag transformSet = { ParsedUsesPermission(it, 0) } ), getSetByValue( - AndroidPackage::getRequestedFeatures, + AndroidPackage::getReqFeatures, PackageImpl::addReqFeature, "test.feature.INFO", transformGet = { it.singleOrNull()?.name.orEmpty() }, diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt index d6d5e628b8ec8..886b2e03a1042 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationEnforcerTest.kt @@ -27,6 +27,7 @@ import android.content.pm.verify.domain.DomainVerificationState import android.os.Build import android.os.Process import android.util.ArraySet +import android.util.SparseArray import androidx.test.platform.app.InstrumentationRegistry import com.android.server.pm.PackageSetting import com.android.server.pm.parsing.pkg.AndroidPackage @@ -331,7 +332,7 @@ class DomainVerificationEnforcerTest { domainSetId ) ) { - whenever(getPackageName()) { packageName } + whenever(getName()) { packageName } whenever(getPkg()) { mockPkg(packageName) } whenever(this.domainSetId) { domainSetId } whenever(readUserState(0)) { PackageUserState() } diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt index d67b26a8e4204..0fe39132f865d 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationManagerApiTest.kt @@ -77,7 +77,7 @@ class DomainVerificationManagerApiTest { } assertThat(service.queryValidVerificationPackageNames()) - .containsExactly(pkgWithDomains.getPackageName()) + .containsExactly(pkgWithDomains.getName()) } @Test @@ -104,16 +104,16 @@ class DomainVerificationManagerApiTest { addPackages(pkgWithDomains, pkgWithoutDomains) } - val infoOne = service.getDomainVerificationInfo(pkgWithDomains.getPackageName()) + val infoOne = service.getDomainVerificationInfo(pkgWithDomains.getName()) assertThat(infoOne).isNotNull() assertThat(infoOne!!.identifier).isEqualTo(pkgWithDomains.domainSetId) - assertThat(infoOne.packageName).isEqualTo(pkgWithDomains.getPackageName()) + assertThat(infoOne.packageName).isEqualTo(pkgWithDomains.getName()) assertThat(infoOne.hostToStateMap).containsExactlyEntriesIn(mapOf( DOMAIN_1 to DomainVerificationInfo.STATE_NO_RESPONSE, DOMAIN_2 to DomainVerificationInfo.STATE_NO_RESPONSE )) - assertThat(service.getDomainVerificationInfo(pkgWithoutDomains.getPackageName())).isNull() + assertThat(service.getDomainVerificationInfo(pkgWithoutDomains.getName())).isNull() assertFailsWith(PackageManager.NameNotFoundException::class) { service.getDomainVerificationInfo("invalid.pkg.name") @@ -125,7 +125,7 @@ class DomainVerificationManagerApiTest { val pkg1 = mockPkgSetting(PKG_ONE, UUID_ONE, listOf(DOMAIN_1, DOMAIN_2)) val pkg2 = mockPkgSetting(PKG_TWO, UUID_TWO, listOf(DOMAIN_3, DOMAIN_4)) - val map = mutableMapOf(pkg1.getPackageName() to pkg1, pkg2.getPackageName() to pkg2) + val map = mutableMapOf(pkg1.getName() to pkg1, pkg2.getName() to pkg2) val service = makeService(map::get).apply { addPackages(pkg1, pkg2) } assertThat(service.setStatus(UUID_ONE, setOf(DOMAIN_2), 1100)) @@ -167,7 +167,7 @@ class DomainVerificationManagerApiTest { val pkg1 = mockPkgSetting(PKG_ONE, UUID_ONE, listOf(DOMAIN_1, DOMAIN_2)) val pkg2 = mockPkgSetting(PKG_TWO, UUID_TWO, listOf(DOMAIN_3, DOMAIN_4)) - val map = mutableMapOf(pkg1.getPackageName() to pkg1, pkg2.getPackageName() to pkg2) + val map = mutableMapOf(pkg1.getName() to pkg1, pkg2.getName() to pkg2) val service = makeService(map::get).apply { addPackages(pkg1, pkg2) } service.setDomainVerificationLinkHandlingAllowed(PKG_ONE, false, 0) @@ -196,9 +196,9 @@ class DomainVerificationManagerApiTest { val pkg3 = mockPkgSetting(PKG_THREE, UUID_THREE, listOf(DOMAIN_1, DOMAIN_2)) val map = mutableMapOf( - pkg1.getPackageName() to pkg1, - pkg2.getPackageName() to pkg2, - pkg3.getPackageName() to pkg3 + pkg1.getName() to pkg1, + pkg2.getName() to pkg2, + pkg3.getName() to pkg3 ) val service = makeService(map::get).apply { addPackages(pkg1, pkg2, pkg3) } @@ -248,20 +248,20 @@ class DomainVerificationManagerApiTest { addPackages(pkgWithDomains, pkgWithoutDomains) } - val infoOne = service.getDomainVerificationUserState(pkgWithDomains.getPackageName(), 0) + val infoOne = service.getDomainVerificationUserState(pkgWithDomains.getName(), 0) assertThat(infoOne).isNotNull() assertThat(infoOne!!.identifier).isEqualTo(pkgWithDomains.domainSetId) - assertThat(infoOne.packageName).isEqualTo(pkgWithDomains.getPackageName()) + assertThat(infoOne.packageName).isEqualTo(pkgWithDomains.getName()) assertThat(infoOne.isLinkHandlingAllowed).isTrue() assertThat(infoOne.hostToStateMap).containsExactlyEntriesIn(mapOf( DOMAIN_1 to DomainVerificationUserState.DOMAIN_STATE_NONE, DOMAIN_2 to DomainVerificationUserState.DOMAIN_STATE_NONE )) - val infoTwo = service.getDomainVerificationUserState(pkgWithoutDomains.getPackageName(), 0) + val infoTwo = service.getDomainVerificationUserState(pkgWithoutDomains.getName(), 0) assertThat(infoTwo).isNotNull() assertThat(infoTwo!!.identifier).isEqualTo(pkgWithoutDomains.domainSetId) - assertThat(infoTwo.packageName).isEqualTo(pkgWithoutDomains.getPackageName()) + assertThat(infoTwo.packageName).isEqualTo(pkgWithoutDomains.getName()) assertThat(infoOne.isLinkHandlingAllowed).isTrue() assertThat(infoTwo.hostToStateMap).isEmpty() @@ -323,43 +323,43 @@ class DomainVerificationManagerApiTest { service.getOwnersForDomain(DOMAIN_1, 0).let { assertThat(it).containsExactly( - DomainOwner(pkg1.getPackageName(), false), - DomainOwner(pkg2.getPackageName(), false) + DomainOwner(pkg1.getName(), false), + DomainOwner(pkg2.getName(), false) ).inOrder() } manager0.getOwnersForDomain(DOMAIN_1).let { assertThat(it).containsExactly( - DomainOwner(pkg1.getPackageName(), false), - DomainOwner(pkg2.getPackageName(), false) + DomainOwner(pkg1.getName(), false), + DomainOwner(pkg2.getName(), false) ).inOrder() } service.getOwnersForDomain(DOMAIN_2, 0).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } manager0.getOwnersForDomain(DOMAIN_2).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } assertThat(service.getOwnersForDomain(DOMAIN_2, 1)).isEmpty() assertThat(manager1.getOwnersForDomain(DOMAIN_2)).isEmpty() service.setUserSelection(pkg1.domainSetId, setOf(DOMAIN_2), true, 1) service.getOwnersForDomain(DOMAIN_2, 1).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } manager1.getOwnersForDomain(DOMAIN_2).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } // "Uninstall" the package from user 0 and ensure it's stripped from the results pkg1User0Enabled.set(false) - service.clearPackageForUser(pkg1.getPackageName(), 0) + service.clearPackageForUser(pkg1.getName(), 0) service.getOwnersForDomain(DOMAIN_1, 0).let { - assertThat(it).containsExactly(DomainOwner(pkg2.getPackageName(), false)) + assertThat(it).containsExactly(DomainOwner(pkg2.getName(), false)) } manager0.getOwnersForDomain(DOMAIN_1).let { - assertThat(it).containsExactly(DomainOwner(pkg2.getPackageName(), false)) + assertThat(it).containsExactly(DomainOwner(pkg2.getName(), false)) } // Domain 2 user selection gone for user 0 @@ -367,33 +367,33 @@ class DomainVerificationManagerApiTest { // Domain 2 user selection still around for user 1 service.getOwnersForDomain(DOMAIN_2, 1).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } manager1.getOwnersForDomain(DOMAIN_2).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } // Now assert for user 1 that it was unaffected by the change to user 0 service.getOwnersForDomain(DOMAIN_1, 1).let { assertThat(it).containsExactly( - DomainOwner(pkg1.getPackageName(), false), - DomainOwner(pkg2.getPackageName(), false) + DomainOwner(pkg1.getName(), false), + DomainOwner(pkg2.getName(), false) ).inOrder() } manager1.getOwnersForDomain(DOMAIN_1).let { assertThat(it).containsExactly( - DomainOwner(pkg1.getPackageName(), false), - DomainOwner(pkg2.getPackageName(), false) + DomainOwner(pkg1.getName(), false), + DomainOwner(pkg2.getName(), false) ).inOrder() } service.setUserSelection(pkg1.domainSetId, setOf(DOMAIN_2), true, 0) service.getOwnersForDomain(DOMAIN_2, 1).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } manager1.getOwnersForDomain(DOMAIN_2).let { - assertThat(it).containsExactly(DomainOwner(pkg1.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg1.getName(), true)) } // "Reinstall" the package to user 0 @@ -406,10 +406,10 @@ class DomainVerificationManagerApiTest { // Other package unaffected service.setUserSelection(pkg2.domainSetId, setOf(DOMAIN_2), true, 0) service.getOwnersForDomain(DOMAIN_2, 0).let { - assertThat(it).containsExactly(DomainOwner(pkg2.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg2.getName(), true)) } manager0.getOwnersForDomain(DOMAIN_2).let { - assertThat(it).containsExactly(DomainOwner(pkg2.getPackageName(), true)) + assertThat(it).containsExactly(DomainOwner(pkg2.getName(), true)) } } @@ -456,7 +456,7 @@ class DomainVerificationManagerApiTest { } private fun makeService(vararg pkgSettings: PackageSetting) = - makeService { pkgName -> pkgSettings.find { pkgName == it.getPackageName() } } + makeService { pkgName -> pkgSettings.find { pkgName == it.getName() } } private fun makeService(pkgSettingFunction: (String) -> PackageSetting? = { null }) = DomainVerificationService(mockThrowOnUnmocked { @@ -521,7 +521,7 @@ class DomainVerificationManagerApiTest { } whenever(getPkg()) { pkg } - whenever(getPackageName()) { pkgName } + whenever(getName()) { pkgName } whenever(this.domainSetId) { domainSetId } whenever(getInstantApp(anyInt())) { false } whenever(firstInstallTime) { 0L } diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt index 03f1124aa6361..6c2a8916617b2 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationPackageTest.kt @@ -81,16 +81,16 @@ class DomainVerificationPackageTest { fun addPackageFirstTime() { val service = makeService(pkg1, pkg2) service.addPackage(pkg1) - val info = service.getInfo(pkg1.getPackageName()) - assertThat(info.packageName).isEqualTo(pkg1.getPackageName()) + val info = service.getInfo(pkg1.getName()) + assertThat(info.packageName).isEqualTo(pkg1.getName()) assertThat(info.identifier).isEqualTo(pkg1.domainSetId) assertThat(info.hostToStateMap).containsExactlyEntriesIn(mapOf( DOMAIN_1 to STATE_NO_RESPONSE, DOMAIN_2 to STATE_NO_RESPONSE, )) - val userState = service.getUserState(pkg1.getPackageName()) - assertThat(userState.packageName).isEqualTo(pkg1.getPackageName()) + val userState = service.getUserState(pkg1.getName()) + assertThat(userState.packageName).isEqualTo(pkg1.getName()) assertThat(userState.identifier).isEqualTo(pkg1.domainSetId) assertThat(userState.isLinkHandlingAllowed).isEqualTo(true) assertThat(userState.user.identifier).isEqualTo(USER_ID) @@ -100,7 +100,7 @@ class DomainVerificationPackageTest { )) assertThat(service.queryValidVerificationPackageNames()) - .containsExactly(pkg1.getPackageName()) + .containsExactly(pkg1.getName()) } @Test @@ -109,14 +109,14 @@ class DomainVerificationPackageTest { val pkg2 = mockPkgSetting(PKG_TWO, UUID_TWO, SIGNATURE_TWO, isSystemApp = true) val service = makeService( - systemConfiguredPackageNames = ArraySet(setOf(pkg1.getPackageName(), pkg2.getPackageName())), + systemConfiguredPackageNames = ArraySet(setOf(pkg1.getName(), pkg2.getName())), pkg1, pkg2 ) service.addPackage(pkg1) service.addPackage(pkg2) - service.getInfo(pkg1.getPackageName()).apply { - assertThat(packageName).isEqualTo(pkg1.getPackageName()) + service.getInfo(pkg1.getName()).apply { + assertThat(packageName).isEqualTo(pkg1.getName()) assertThat(identifier).isEqualTo(pkg1.domainSetId) assertThat(hostToStateMap).containsExactlyEntriesIn( mapOf( @@ -126,8 +126,8 @@ class DomainVerificationPackageTest { ) } - service.getUserState(pkg1.getPackageName()).apply { - assertThat(packageName).isEqualTo(pkg1.getPackageName()) + service.getUserState(pkg1.getName()).apply { + assertThat(packageName).isEqualTo(pkg1.getName()) assertThat(identifier).isEqualTo(pkg1.domainSetId) assertThat(isLinkHandlingAllowed).isEqualTo(true) assertThat(user.identifier).isEqualTo(USER_ID) @@ -139,8 +139,8 @@ class DomainVerificationPackageTest { ) } - service.getInfo(pkg2.getPackageName()).apply { - assertThat(packageName).isEqualTo(pkg2.getPackageName()) + service.getInfo(pkg2.getName()).apply { + assertThat(packageName).isEqualTo(pkg2.getName()) assertThat(identifier).isEqualTo(pkg2.domainSetId) assertThat(hostToStateMap).containsExactlyEntriesIn( mapOf( @@ -150,8 +150,8 @@ class DomainVerificationPackageTest { ) } - service.getUserState(pkg2.getPackageName()).apply { - assertThat(packageName).isEqualTo(pkg2.getPackageName()) + service.getUserState(pkg2.getName()).apply { + assertThat(packageName).isEqualTo(pkg2.getName()) assertThat(identifier).isEqualTo(pkg2.domainSetId) assertThat(isLinkHandlingAllowed).isEqualTo(true) assertThat(user.identifier).isEqualTo(USER_ID) @@ -164,7 +164,7 @@ class DomainVerificationPackageTest { } assertThat(service.queryValidVerificationPackageNames()) - .containsExactly(pkg1.getPackageName(), pkg2.getPackageName()) + .containsExactly(pkg1.getName(), pkg2.getName()) } @Test @@ -175,7 +175,7 @@ class DomainVerificationPackageTest { @@ -190,8 +190,8 @@ class DomainVerificationPackageTest { val service = makeService(pkg1, pkg2) service.restoreSettings(Xml.resolvePullParser(xml.byteInputStream())) service.addPackage(pkg1) - val info = service.getInfo(pkg1.getPackageName()) - assertThat(info.packageName).isEqualTo(pkg1.getPackageName()) + val info = service.getInfo(pkg1.getName()) + assertThat(info.packageName).isEqualTo(pkg1.getName()) assertThat(info.identifier).isEqualTo(pkg1.domainSetId) assertThat(info.hostToStateMap).containsExactlyEntriesIn( mapOf( @@ -200,8 +200,8 @@ class DomainVerificationPackageTest { ) ) - val userState = service.getUserState(pkg1.getPackageName()) - assertThat(userState.packageName).isEqualTo(pkg1.getPackageName()) + val userState = service.getUserState(pkg1.getName()) + assertThat(userState.packageName).isEqualTo(pkg1.getName()) assertThat(userState.identifier).isEqualTo(pkg1.domainSetId) assertThat(userState.isLinkHandlingAllowed).isEqualTo(true) assertThat(userState.user.identifier).isEqualTo(USER_ID) @@ -213,7 +213,7 @@ class DomainVerificationPackageTest { ) assertThat(service.queryValidVerificationPackageNames()) - .containsExactly(pkg1.getPackageName()) + .containsExactly(pkg1.getName()) } @Test @@ -224,7 +224,7 @@ class DomainVerificationPackageTest { @@ -239,8 +239,8 @@ class DomainVerificationPackageTest { val service = makeService(pkg1, pkg2) service.restoreSettings(Xml.resolvePullParser(xml.byteInputStream())) service.addPackage(pkg1) - val info = service.getInfo(pkg1.getPackageName()) - assertThat(info.packageName).isEqualTo(pkg1.getPackageName()) + val info = service.getInfo(pkg1.getName()) + assertThat(info.packageName).isEqualTo(pkg1.getName()) assertThat(info.identifier).isEqualTo(pkg1.domainSetId) assertThat(info.hostToStateMap).containsExactlyEntriesIn( mapOf( @@ -249,8 +249,8 @@ class DomainVerificationPackageTest { ) ) - val userState = service.getUserState(pkg1.getPackageName()) - assertThat(userState.packageName).isEqualTo(pkg1.getPackageName()) + val userState = service.getUserState(pkg1.getName()) + assertThat(userState.packageName).isEqualTo(pkg1.getName()) assertThat(userState.identifier).isEqualTo(pkg1.domainSetId) assertThat(userState.isLinkHandlingAllowed).isEqualTo(true) assertThat(userState.user.identifier).isEqualTo(USER_ID) @@ -262,7 +262,7 @@ class DomainVerificationPackageTest { ) assertThat(service.queryValidVerificationPackageNames()) - .containsExactly(pkg1.getPackageName()) + .containsExactly(pkg1.getName()) } @Test @@ -273,7 +273,7 @@ class DomainVerificationPackageTest { @@ -311,8 +311,8 @@ class DomainVerificationPackageTest { service.addPackage(pkg1) - val userState = service.getUserState(pkg1.getPackageName()) - assertThat(userState.packageName).isEqualTo(pkg1.getPackageName()) + val userState = service.getUserState(pkg1.getName()) + assertThat(userState.packageName).isEqualTo(pkg1.getName()) assertThat(userState.identifier).isEqualTo(pkg1.domainSetId) assertThat(userState.isLinkHandlingAllowed).isEqualTo(false) assertThat(userState.user.identifier).isEqualTo(USER_ID) @@ -348,7 +348,7 @@ class DomainVerificationPackageTest { @@ -381,8 +381,8 @@ class DomainVerificationPackageTest { service: DomainVerificationService, expectRestore: Boolean = false ) { - val info = service.getInfo(pkg1.getPackageName()) - assertThat(info.packageName).isEqualTo(pkg1.getPackageName()) + val info = service.getInfo(pkg1.getName()) + assertThat(info.packageName).isEqualTo(pkg1.getName()) assertThat(info.identifier).isEqualTo(pkg1.domainSetId) assertThat(info.hostToStateMap).containsExactlyEntriesIn(mapOf( // To share the majority of code, special case restoration to check a different int @@ -390,8 +390,8 @@ class DomainVerificationPackageTest { DOMAIN_2 to STATE_NO_RESPONSE, )) - val userState = service.getUserState(pkg1.getPackageName()) - assertThat(userState.packageName).isEqualTo(pkg1.getPackageName()) + val userState = service.getUserState(pkg1.getName()) + assertThat(userState.packageName).isEqualTo(pkg1.getName()) assertThat(userState.identifier).isEqualTo(pkg1.domainSetId) assertThat(userState.isLinkHandlingAllowed).isEqualTo(false) assertThat(userState.user.identifier).isEqualTo(USER_ID) @@ -401,10 +401,10 @@ class DomainVerificationPackageTest { )) assertThat(service.queryValidVerificationPackageNames()) - .containsExactly(pkg1.getPackageName()) + .containsExactly(pkg1.getName()) // Re-enable link handling to check that the 3/4 domains were stripped - service.setDomainVerificationLinkHandlingAllowed(pkg1.getPackageName(), true, USER_ID) + service.setDomainVerificationLinkHandlingAllowed(pkg1.getName(), true, USER_ID) assertThat(service.getOwnersForDomain(DOMAIN_1, USER_ID)) .containsExactly(DomainOwner(PKG_ONE, false)) @@ -630,7 +630,7 @@ class DomainVerificationPackageTest { serviceBefore.addPackage(pkg2) serviceBefore.setStatus(pkg1.domainSetId, setOf(DOMAIN_1), STATE_SUCCESS) - serviceBefore.setDomainVerificationLinkHandlingAllowed(pkg1.getPackageName(), false, 10) + serviceBefore.setDomainVerificationLinkHandlingAllowed(pkg1.getName(), false, 10) serviceBefore.setUserSelection(pkg2.domainSetId, setOf(DOMAIN_2), true, 0) serviceBefore.setUserSelection(pkg2.domainSetId, setOf(DOMAIN_3), true, 10) @@ -758,11 +758,11 @@ class DomainVerificationPackageTest { systemConfiguredPackageNames: ArraySet = ArraySet(), vararg pkgSettings: PackageSetting ) = makeService(systemConfiguredPackageNames = systemConfiguredPackageNames) { - pkgName -> pkgSettings.find { pkgName == it.getPackageName() } + pkgName -> pkgSettings.find { pkgName == it.getName() } } private fun makeService(vararg pkgSettings: PackageSetting) = - makeService { pkgName -> pkgSettings.find { pkgName == it.getPackageName() } } + makeService { pkgName -> pkgSettings.find { pkgName == it.getName() } } private fun makeService( systemConfiguredPackageNames: ArraySet = ArraySet(), @@ -829,7 +829,7 @@ class DomainVerificationPackageTest { } whenever(getPkg()) { pkg } - whenever(getPackageName()) { pkgName } + whenever(getName()) { pkgName } whenever(this.domainSetId) { domainSetId } whenever(getInstantApp(anyInt())) { false } whenever(firstInstallTime) { 0L } @@ -845,8 +845,8 @@ class DomainVerificationPackageTest { linkHandingAllowed: Boolean = true, hostToStateMap: Map ) { - getUserState(pkg.getPackageName(), userId).apply { - assertThat(this.packageName).isEqualTo(pkg.getPackageName()) + getUserState(pkg.getName(), userId).apply { + assertThat(this.packageName).isEqualTo(pkg.getName()) assertThat(this.identifier).isEqualTo(pkg.domainSetId) assertThat(this.isLinkHandlingAllowed).isEqualTo(linkHandingAllowed) assertThat(this.user.identifier).isEqualTo(userId) diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt index 32866ea1e5c3c..6a75795a0a885 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationSettingsMutationTest.kt @@ -26,6 +26,7 @@ import android.content.pm.verify.domain.DomainVerificationState import android.os.Build import android.os.Process import android.util.ArraySet +import android.util.SparseArray import com.android.server.pm.PackageSetting import com.android.server.pm.parsing.pkg.AndroidPackage import com.android.server.pm.test.verify.domain.DomainVerificationTestUtils.mockPackageSettings @@ -231,7 +232,7 @@ class DomainVerificationSettingsMutationTest { TEST_UUID ) ) { - whenever(getPackageName()) { TEST_PKG } + whenever(getName()) { TEST_PKG } whenever(getPkg()) { mockPkg() } whenever(domainSetId) { TEST_UUID } whenever(readUserState(0)) { PackageUserState() } diff --git a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt index 1d5e280226116..3e2853cf24a10 100644 --- a/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt +++ b/services/tests/PackageManagerServiceTests/unit/src/com/android/server/pm/test/verify/domain/DomainVerificationUserSelectionOverrideTest.kt @@ -139,7 +139,7 @@ class DomainVerificationUserStateOverrideTest { } whenever(getPkg()) { pkg } - whenever(getPackageName()) { pkgName } + whenever(getName()) { pkgName } whenever(this.domainSetId) { domainSetId } whenever(getInstantApp(anyInt())) { false } whenever(firstInstallTime) { 0L } diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java index b793482b078fa..29ff9f4c282c1 100644 --- a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTestsBase.java @@ -338,7 +338,7 @@ class OverlayManagerServiceImplTestsBase { when(pkg.getBaseApkPath()).thenReturn(apkPath); when(pkg.getLongVersionCode()).thenReturn((long) versionCode); when(pkg.getOverlayTarget()).thenReturn(targetPackageName); - when(pkg.getOverlayTargetOverlayableName()).thenReturn(targetOverlayableName); + when(pkg.getOverlayTargetName()).thenReturn(targetOverlayableName); when(pkg.getOverlayCategory()).thenReturn("Fake-category-" + targetPackageName); return pkg; } diff --git a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java index 9f12438be846c..9bc20a7ba4e61 100644 --- a/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/AppsFilterTest.java @@ -762,7 +762,7 @@ public class AppsFilterTest { ParsingPackage overlay = pkg("com.some.package.overlay") .setOverlay(true) .setOverlayTarget(target.getPackageName()) - .setOverlayTargetOverlayableName("overlayableName"); + .setOverlayTargetName("overlayableName"); ParsingPackage actor = pkg("com.some.package.actor"); final AppsFilter appsFilter = new AppsFilter( @@ -787,7 +787,7 @@ public class AppsFilterTest { if (overlay.getPackageName().equals(pkg.getPackageName())) { Map> map = new ArrayMap<>(); Set set = new ArraySet<>(); - set.add(overlay.getOverlayTargetOverlayableName()); + set.add(overlay.getOverlayTargetName()); map.put(overlay.getOverlayTarget(), set); return map; } @@ -847,7 +847,7 @@ public class AppsFilterTest { ParsingPackage overlay = pkg("com.some.package.overlay") .setOverlay(true) .setOverlayTarget(target.getPackageName()) - .setOverlayTargetOverlayableName("overlayableName"); + .setOverlayTargetName("overlayableName"); ParsingPackage actorOne = pkg("com.some.package.actor.one"); ParsingPackage actorTwo = pkg("com.some.package.actor.two"); @@ -874,7 +874,7 @@ public class AppsFilterTest { if (overlay.getPackageName().equals(pkg.getPackageName())) { Map> map = new ArrayMap<>(); Set set = new ArraySet<>(); - set.add(overlay.getOverlayTargetOverlayableName()); + set.add(overlay.getOverlayTargetName()); map.put(overlay.getOverlayTarget(), set); return map; } diff --git a/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java b/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java index 0247590aeca91..0f1b14b7fe891 100644 --- a/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/CompatibilityModeTest.java @@ -35,7 +35,7 @@ import android.content.pm.parsing.PackageInfoWithoutStateUtils; import android.content.pm.parsing.ParsingPackageUtils; import android.os.Build; -import com.android.server.pm.parsing.pkg.PackageImpl; +import com.android.server.pm.parsing.pkg.AndroidPackage; import org.junit.After; import org.junit.Before; @@ -44,13 +44,13 @@ import org.junit.Test; public class CompatibilityModeTest { private boolean mCompatibilityModeEnabled;; - private PackageImpl mMockAndroidPackage; + private AndroidPackage mMockAndroidPackage; private PackageUserState mMockUserState; @Before public void setUp() { mCompatibilityModeEnabled = ParsingPackageUtils.sCompatibilityModeEnabled; - mMockAndroidPackage = mock(PackageImpl.class); + mMockAndroidPackage = mock(AndroidPackage.class); mMockUserState = mock(PackageUserState.class); mMockUserState.installed = true; when(mMockUserState.isAvailable(anyInt())).thenReturn(true); diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java index 76741c4adfc73..45e2ab478c392 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageManagerSettingsTests.java @@ -955,6 +955,7 @@ public class PackageManagerSettingsTests { assertSame(origPkgSetting.signatures, testPkgSetting.signatures); assertThat(origPkgSetting.signatures, is(testPkgSetting.signatures)); assertThat(origPkgSetting.timeStamp, is(testPkgSetting.timeStamp)); + assertThat(origPkgSetting.uidError, is(testPkgSetting.uidError)); assertNotSame(origPkgSetting.getUserState(), is(testPkgSetting.getUserState())); // No equals() method for SparseArray object // assertThat(origPkgSetting.getUserState(), is(testPkgSetting.getUserState())); diff --git a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java index 0cbac872a061e..38b98ca7a9c58 100644 --- a/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/PackageParserTest.java @@ -56,7 +56,6 @@ import android.content.pm.parsing.component.ParsedService; import android.content.pm.parsing.component.ParsedUsesPermission; import android.os.Bundle; import android.os.Parcel; -import android.os.Parcelable; import android.platform.test.annotations.Presubmit; import android.util.ArraySet; @@ -72,7 +71,6 @@ import com.android.server.pm.parsing.PackageInfoUtils; import com.android.server.pm.parsing.PackageParser2; import com.android.server.pm.parsing.TestPackageParser2; import com.android.server.pm.parsing.pkg.AndroidPackage; -import com.android.server.pm.parsing.pkg.AndroidPackageUtils; import com.android.server.pm.parsing.pkg.PackageImpl; import com.android.server.pm.parsing.pkg.ParsedPackage; @@ -176,7 +174,7 @@ public class PackageParserTest { true /* useCaches */).hideAsFinal(); Parcel p = Parcel.obtain(); - ((Parcelable) pkg).writeToParcel(p, 0 /* flags */); + pkg.writeToParcel(p, 0 /* flags */); p.setDataPosition(0); ParsedPackage deserialized = new PackageImpl(p); @@ -193,7 +191,7 @@ public class PackageParserTest { setKnownFields(pkg); Parcel p = Parcel.obtain(); - ((Parcelable) pkg).writeToParcel(p, 0 /* flags */); + pkg.writeToParcel(p, 0 /* flags */); p.setDataPosition(0); ParsedPackage deserialized = new PackageImpl(p); @@ -206,7 +204,7 @@ public class PackageParserTest { setKnownFields(pkg); Parcel p = Parcel.obtain(); - ((Parcelable) pkg).writeToParcel(p, 0 /* flags */); + pkg.writeToParcel(p, 0 /* flags */); p.setDataPosition(0); ParsingPackage deserialized = new PackageImpl(p); @@ -611,10 +609,10 @@ public class PackageParserTest { private static PackageSetting mockPkgSetting(AndroidPackage pkg) { return new PackageSettingBuilder() .setName(pkg.getPackageName()) - .setRealName(pkg.getManifestPackageName()) + .setRealName(pkg.getRealPackage()) .setCodePath(pkg.getPath()) - .setPrimaryCpuAbiString(AndroidPackageUtils.getRawPrimaryCpuAbi(pkg)) - .setSecondaryCpuAbiString(AndroidPackageUtils.getRawSecondaryCpuAbi(pkg)) + .setPrimaryCpuAbiString(pkg.getPrimaryCpuAbi()) + .setSecondaryCpuAbiString(pkg.getSecondaryCpuAbi()) .setPVersionCode(pkg.getLongVersionCode()) .setPkgFlags(PackageInfoUtils.appInfoFlags(pkg, null)) .setPrivateFlags(PackageInfoUtils.appInfoPrivateFlags(pkg, null)) @@ -627,7 +625,7 @@ public class PackageParserTest { public static void assertPackagesEqual(AndroidPackage a, AndroidPackage b) { assertEquals(a.getBaseRevisionCode(), b.getBaseRevisionCode()); assertEquals(a.isBaseHardwareAccelerated(), b.isBaseHardwareAccelerated()); - assertEquals(a.getLongVersionCode(), b.getLongVersionCode()); + assertEquals(a.getVersionCode(), b.getVersionCode()); assertEquals(a.getSharedUserLabel(), b.getSharedUserLabel()); assertEquals(a.getInstallLocation(), b.getInstallLocation()); assertEquals(a.isCoreApp(), b.isCoreApp()); @@ -702,7 +700,7 @@ public class PackageParserTest { assertEquals(a.getUsesLibraries(), b.getUsesLibraries()); assertEquals(a.getUsesOptionalLibraries(), b.getUsesOptionalLibraries()); assertEquals(a.getOriginalPackages(), b.getOriginalPackages()); - assertEquals(a.getManifestPackageName(), b.getManifestPackageName()); + assertEquals(a.getRealPackage(), b.getRealPackage()); assertEquals(a.getAdoptPermissions(), b.getAdoptPermissions()); assertBundleApproximateEquals(a.getMetaData(), b.getMetaData()); assertEquals(a.getVersionName(), b.getVersionName()); @@ -712,7 +710,7 @@ public class PackageParserTest { assertEquals(a.getRestrictedAccountType(), b.getRestrictedAccountType()); assertEquals(a.getRequiredAccountType(), b.getRequiredAccountType()); assertEquals(a.getOverlayTarget(), b.getOverlayTarget()); - assertEquals(a.getOverlayTargetOverlayableName(), b.getOverlayTargetOverlayableName()); + assertEquals(a.getOverlayTargetName(), b.getOverlayTargetName()); assertEquals(a.getOverlayCategory(), b.getOverlayCategory()); assertEquals(a.getOverlayPriority(), b.getOverlayPriority()); assertEquals(a.isOverlayIsStatic(), b.isOverlayIsStatic()); @@ -930,6 +928,7 @@ public class PackageParserTest { .addUsesLibrary("foo11") .addUsesOptionalLibrary("foo12") .addOriginalPackage("foo14") + .setRealPackage("foo15") .addAdoptPermission("foo16") .setMetaData(bundle) .setVersionName("foo17") @@ -954,7 +953,7 @@ public class PackageParserTest { .setCompileSdkVersion(100) .setOverlayCategory("foo24") .setOverlayIsStatic(true) - .setOverlayTargetOverlayableName("foo26") + .setOverlayTargetName("foo26") .setVisibleToInstantApps(true) .setSplitHasCode(0, true) .hideAsParsed()) diff --git a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java index 5de0c2bbd5ff8..77b9fd30f71be 100644 --- a/services/tests/servicestests/src/com/android/server/pm/ScanTests.java +++ b/services/tests/servicestests/src/com/android/server/pm/ScanTests.java @@ -176,7 +176,7 @@ public class ScanTests { final ScanRequest scanRequestNoRealPkg = createBasicScanRequestBuilder( createBasicPackage(DUMMY_PACKAGE_NAME) - .addOriginalPackage("com.package.real")) + .setRealPackage("com.package.real")) .build(); final ScanResult scanResultNoReal = executeScan(scanRequestNoRealPkg); diff --git a/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java b/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java index 2a7a2ffa7dbf0..e021d2ab40787 100644 --- a/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java +++ b/services/tests/servicestests/src/com/android/server/pm/dex/DexMetadataHelperTest.java @@ -140,7 +140,7 @@ public class DexMetadataHelperTest { Collection apkToDexMetadataList = AndroidPackageUtils.getPackageDexMetadata(pkg).values(); String packageName = pkg.getPackageName(); - long versionCode = pkg.getLongVersionCode(); + long versionCode = pkg.toAppInfoWithoutState().longVersionCode; final ParseTypeImpl input = ParseTypeImpl.forDefaultParsing(); for (String dexMetadata : apkToDexMetadataList) { final ParseResult result = DexMetadataHelper.validateDexMetadataFile( diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt index 51c268e6e53e0..fb82b1d3d3f63 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageInfoFlagBehaviorTest.kt @@ -105,6 +105,7 @@ class AndroidPackageInfoFlagBehaviorTest : AndroidPackageParsingTestBase() { lateinit var param: Param @Test + @Ignore("b/155935153") fun fieldPresence() { oldPackages.asSequence().zip(newPackages.asSequence()) .forEach { (old, new) -> @@ -127,6 +128,7 @@ class AndroidPackageInfoFlagBehaviorTest : AndroidPackageParsingTestBase() { } @Test + @Ignore("b/155935153") fun fieldAbsence() { newPackages.forEach { val newWithoutFlag = param.newPkgFunction(it, 0) diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt index ae07f8ecca10a..b7eddb3365e47 100644 --- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt +++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt @@ -183,7 +183,6 @@ open class AndroidPackageParsingTestBase { this.appId = aPkg.uid whenever(pkgState) { PackageStateUnserialized() } whenever(readUserState(anyInt())) { dummyUserState } - whenever(categoryOverride) { ApplicationInfo.CATEGORY_UNDEFINED } } }