diff options
6 files changed, 23 insertions, 28 deletions
diff --git a/core/api/system-current.txt b/core/api/system-current.txt index b1d0bc311add..2d070bc59869 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -3798,6 +3798,10 @@ package android.content.pm { field @RequiresPermission(android.Manifest.permission.ACCESS_SHORTCUTS) public static final int FLAG_GET_PERSONS_DATA = 2048; // 0x800 } + public class PackageInfo implements android.os.Parcelable { + field public boolean isArchived; + } + public class PackageInstaller { method @NonNull public android.content.pm.PackageInstaller.InstallInfo readInstallInfo(@NonNull java.io.File, int) throws android.content.pm.PackageInstaller.PackageParsingException; method @NonNull public android.content.pm.PackageInstaller.InstallInfo readInstallInfo(@NonNull android.os.ParcelFileDescriptor, @Nullable String, int) throws android.content.pm.PackageInstaller.PackageParsingException; @@ -3875,7 +3879,6 @@ package android.content.pm { method public static void forceSafeLabels(); method @Deprecated @NonNull public CharSequence loadSafeLabel(@NonNull android.content.pm.PackageManager); method @NonNull public CharSequence loadSafeLabel(@NonNull android.content.pm.PackageManager, @FloatRange(from=0) float, int); - field @FlaggedApi(Flags.FLAG_ARCHIVING) public boolean isArchived; } public abstract class PackageManager { diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java index 63c11b779641..1fe19231e4b4 100644 --- a/core/java/android/content/pm/PackageInfo.java +++ b/core/java/android/content/pm/PackageInfo.java @@ -18,7 +18,9 @@ package android.content.pm; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.SystemApi; import android.compat.annotation.UnsupportedAppUsage; +import android.content.IntentSender; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; @@ -488,6 +490,18 @@ public class PackageInfo implements Parcelable { */ public boolean isActiveApex; + /** + * Whether the package is currently in an archived state. + * + * <p>Packages can be archived through + * {@link PackageInstaller#requestArchive(String, IntentSender)} and do not have any APKs stored + * on the device, but do keep the data directory. + * @hide + */ + // TODO(b/278553670) Unhide and update @links before launch. + @SystemApi + public boolean isArchived; + public PackageInfo() { } @@ -575,6 +589,7 @@ public class PackageInfo implements Parcelable { } dest.writeBoolean(isApex); dest.writeBoolean(isActiveApex); + dest.writeBoolean(isArchived); dest.restoreAllowSquashing(prevAllowSquashing); } @@ -640,5 +655,6 @@ public class PackageInfo implements Parcelable { } isApex = source.readBoolean(); isActiveApex = source.readBoolean(); + isArchived = source.readBoolean(); } } diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index c7091ad99199..bb978e05dd16 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -21,7 +21,6 @@ import static android.text.TextUtils.SAFE_STRING_FLAG_SINGLE_LINE; import static android.text.TextUtils.SAFE_STRING_FLAG_TRIM; import static android.text.TextUtils.makeSafeForPresentation; -import android.annotation.FlaggedApi; import android.annotation.FloatRange; import android.annotation.NonNull; import android.annotation.SystemApi; @@ -174,18 +173,6 @@ public class PackageItemInfo { */ public int showUserIcon; - /** - * Whether the package is currently in an archived state. - * - * <p>Packages can be archived through {@link PackageArchiver} and do not have any APKs stored - * on the device, but do keep the data directory. - * @hide - */ - // TODO(b/278553670) Unhide and update @links before launch. - @SystemApi - @FlaggedApi(Flags.FLAG_ARCHIVING) - public boolean isArchived; - public PackageItemInfo() { showUserIcon = UserHandle.USER_NULL; } @@ -202,7 +189,6 @@ public class PackageItemInfo { logo = orig.logo; metaData = orig.metaData; showUserIcon = orig.showUserIcon; - isArchived = orig.isArchived; } /** @@ -456,7 +442,6 @@ public class PackageItemInfo { dest.writeBundle(metaData); dest.writeInt(banner); dest.writeInt(showUserIcon); - dest.writeBoolean(isArchived); } /** @@ -474,7 +459,6 @@ public class PackageItemInfo { } proto.write(PackageItemInfoProto.ICON, icon); proto.write(PackageItemInfoProto.BANNER, banner); - proto.write(PackageItemInfoProto.IS_ARCHIVED, isArchived); proto.end(token); } @@ -489,7 +473,6 @@ public class PackageItemInfo { metaData = source.readBundle(); banner = source.readInt(); showUserIcon = source.readInt(); - isArchived = source.readBoolean(); } /** diff --git a/core/proto/android/content/package_item_info.proto b/core/proto/android/content/package_item_info.proto index b9905e8cf446..279a5d0c17f8 100644 --- a/core/proto/android/content/package_item_info.proto +++ b/core/proto/android/content/package_item_info.proto @@ -30,7 +30,6 @@ message PackageItemInfoProto { optional string non_localized_label = 4; optional int32 icon = 5; optional int32 banner = 6; - optional bool is_archived = 7; } // Proto of android.content.pm.ApplicationInfo which extends PackageItemInfo diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java index 316c4aca1891..ffa2af1e2f81 100644 --- a/services/core/java/com/android/server/pm/ComputerEngine.java +++ b/services/core/java/com/android/server/pm/ComputerEngine.java @@ -1024,7 +1024,7 @@ public class ComputerEngine implements Computer { if ("android".equals(packageName) || "system".equals(packageName)) { return androidApplication(); } - if ((flags & (MATCH_KNOWN_PACKAGES | MATCH_ARCHIVED_PACKAGES)) != 0) { + if ((flags & MATCH_KNOWN_PACKAGES) != 0) { // Already generates the external package name return generateApplicationInfoFromSettings(packageName, flags, filterCallingUid, userId); @@ -1518,6 +1518,7 @@ public class ComputerEngine implements Computer { pi.sharedUserId = (sharedUser != null) ? sharedUser.getName() : null; pi.firstInstallTime = state.getFirstInstallTimeMillis(); pi.lastUpdateTime = ps.getLastUpdateTime(); + pi.isArchived = isArchived(state); ApplicationInfo ai = new ApplicationInfo(); ai.packageName = ps.getPackageName(); 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 cc8e62409597..4eceb7738836 100644 --- a/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java +++ b/services/core/java/com/android/server/pm/parsing/PackageInfoUtils.java @@ -378,6 +378,7 @@ public class PackageInfoUtils { ai.privateFlags |= flag(state.isInstantApp(), ApplicationInfo.PRIVATE_FLAG_INSTANT) | flag(state.isVirtualPreload(), ApplicationInfo.PRIVATE_FLAG_VIRTUAL_PRELOAD) | flag(state.isHidden(), ApplicationInfo.PRIVATE_FLAG_HIDDEN); + if ((flags & PackageManager.FILTER_OUT_QUARANTINED_COMPONENTS) != 0 && state.isQuarantined()) { ai.enabled = false; @@ -401,14 +402,6 @@ public class PackageInfoUtils { ai.resourceDirs = overlayPaths.getResourceDirs().toArray(new String[0]); ai.overlayPaths = overlayPaths.getOverlayPaths().toArray(new String[0]); } - ai.isArchived = isArchived(state); - } - - // TODO(b/288142708) Check for userState.isInstalled() here once this bug is fixed. - // If an app has isInstalled() == true - it should not be filtered above in any case, currently - // it is. - private static boolean isArchived(PackageUserState userState) { - return userState.getArchiveState() != null; } @Nullable |