Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a4db19fa authored by Rohit Goyal's avatar Rohit Goyal Committed by Android (Google) Code Review
Browse files

Merge "Integrate storage of originalComponentName field for ArchiveActivityInfo" into main

parents 0fdbddb6 e8efd54f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@

package android.content.pm;

import android.content.ComponentName;

/** @hide */
parcelable ArchivedActivityParcel {
    String title;
    ComponentName originalComponentName;
    // PNG compressed bitmaps.
    byte[] iconBitmap;
    byte[] monochromeIconBitmap;
+3 −0
Original line number Diff line number Diff line
@@ -115,6 +115,9 @@ message PackageProto {

                // Only set if the app defined a monochrome icon.
                optional string monochrome_icon_bitmap_path = 3;

                // The component name of the original activity (pre-archival).
                optional string original_component_name = 4;
            }

            /** Information about main activities. */
+14 −4
Original line number Diff line number Diff line
@@ -196,8 +196,12 @@ public class PackageArchiver {
            for (int i = 0, size = mainActivities.length; i < size; ++i) {
                var mainActivity = mainActivities[i];
                Path iconPath = storeIconForParcel(packageName, mainActivity, userId, i);
                ArchiveActivityInfo activityInfo = new ArchiveActivityInfo(
                        mainActivity.title, iconPath, null);
                ArchiveActivityInfo activityInfo =
                        new ArchiveActivityInfo(
                                mainActivity.title,
                                mainActivity.originalComponentName,
                                iconPath,
                                null);
                archiveActivityInfos.add(activityInfo);
            }

@@ -215,8 +219,12 @@ public class PackageArchiver {
        for (int i = 0, size = mainActivities.size(); i < size; i++) {
            LauncherActivityInfo mainActivity = mainActivities.get(i);
            Path iconPath = storeIcon(packageName, mainActivity, userId, i);
            ArchiveActivityInfo activityInfo = new ArchiveActivityInfo(
                    mainActivity.getLabel().toString(), iconPath, null);
            ArchiveActivityInfo activityInfo =
                    new ArchiveActivityInfo(
                            mainActivity.getLabel().toString(),
                            mainActivity.getComponentName(),
                            iconPath,
                            null);
            archiveActivityInfos.add(activityInfo);
        }

@@ -593,6 +601,7 @@ public class PackageArchiver {
            }
            var archivedActivity = new ArchivedActivityParcel();
            archivedActivity.title = info.getTitle();
            archivedActivity.originalComponentName = info.getOriginalComponentName();
            archivedActivity.iconBitmap = bytesFromBitmapFile(info.getIconBitmap());
            archivedActivity.monochromeIconBitmap = bytesFromBitmapFile(
                    info.getMonochromeIconBitmap());
@@ -624,6 +633,7 @@ public class PackageArchiver {
            }
            var archivedActivity = new ArchivedActivityParcel();
            archivedActivity.title = info.getLabel().toString();
            archivedActivity.originalComponentName = info.getComponentName();
            archivedActivity.iconBitmap =
                    info.getActivityInfo().getIconResource() == 0 ? null : bytesFromBitmap(
                            drawableToBitmap(info.getIcon(/* density= */ 0)));
+3 −0
Original line number Diff line number Diff line
@@ -1228,6 +1228,9 @@ public class PackageSetting extends SettingBase implements PackageStateInternal
            long activityInfoToken = proto.start(
                    PackageProto.UserInfoProto.ArchiveState.ACTIVITY_INFOS);
            proto.write(ArchiveActivityInfo.TITLE, activityInfo.getTitle());
            proto.write(
                    ArchiveActivityInfo.ORIGINAL_COMPONENT_NAME,
                    activityInfo.getOriginalComponentName().flattenToString());
            if (activityInfo.getIconBitmap() != null) {
                proto.write(ArchiveActivityInfo.ICON_BITMAP_PATH,
                        activityInfo.getIconBitmap().toAbsolutePath().toString());
+22 −5
Original line number Diff line number Diff line
@@ -368,6 +368,7 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
    private static final String ATTR_VALUE = "value";
    private static final String ATTR_FIRST_INSTALL_TIME = "first-install-time";
    private static final String ATTR_ARCHIVE_ACTIVITY_TITLE = "activity-title";
    private static final String ATTR_ARCHIVE_ORIGINAL_COMPONENT_NAME = "original-component-name";
    private static final String ATTR_ARCHIVE_INSTALLER_TITLE = "installer-title";
    private static final String ATTR_ARCHIVE_ICON_PATH = "icon-path";
    private static final String ATTR_ARCHIVE_MONOCHROME_ICON_PATH = "monochrome-icon-path";
@@ -2079,6 +2080,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
            if (tagName.equals(TAG_ARCHIVE_ACTIVITY_INFO)) {
                String title = parser.getAttributeValue(null,
                        ATTR_ARCHIVE_ACTIVITY_TITLE);
                String originalComponentName =
                        parser.getAttributeValue(null, ATTR_ARCHIVE_ORIGINAL_COMPONENT_NAME);
                String iconAttribute = parser.getAttributeValue(null,
                        ATTR_ARCHIVE_ICON_PATH);
                Path iconPath = iconAttribute == null ? null : Path.of(iconAttribute);
@@ -2087,17 +2090,27 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
                Path monochromeIconPath = monochromeAttribute == null ? null : Path.of(
                        monochromeAttribute);

                if (title == null || iconPath == null) {
                    Slog.wtf(TAG,
                            TextUtils.formatSimple("Missing attributes in tag %s. %s: %s, %s: %s",
                                    TAG_ARCHIVE_ACTIVITY_INFO, ATTR_ARCHIVE_ACTIVITY_TITLE, title,
                if (title == null || originalComponentName == null || iconPath == null) {
                    Slog.wtf(
                            TAG,
                            TextUtils.formatSimple(
                                    "Missing attributes in tag %s. %s: %s, %s: %s, %s: %s",
                                    TAG_ARCHIVE_ACTIVITY_INFO,
                                    ATTR_ARCHIVE_ACTIVITY_TITLE,
                                    title,
                                    ATTR_ARCHIVE_ORIGINAL_COMPONENT_NAME,
                                    originalComponentName,
                                    ATTR_ARCHIVE_ICON_PATH,
                                    iconPath));
                    continue;
                }

                activityInfos.add(
                        new ArchiveState.ArchiveActivityInfo(title, iconPath, monochromeIconPath));
                        new ArchiveState.ArchiveActivityInfo(
                                title,
                                ComponentName.unflattenFromString(originalComponentName),
                                iconPath,
                                monochromeIconPath));
            }
        }
        return activityInfos;
@@ -2469,6 +2482,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile
        for (ArchiveState.ArchiveActivityInfo activityInfo : archiveState.getActivityInfos()) {
            serializer.startTag(null, TAG_ARCHIVE_ACTIVITY_INFO);
            serializer.attribute(null, ATTR_ARCHIVE_ACTIVITY_TITLE, activityInfo.getTitle());
            serializer.attribute(
                    null,
                    ATTR_ARCHIVE_ORIGINAL_COMPONENT_NAME,
                    activityInfo.getOriginalComponentName().flattenToString());
            if (activityInfo.getIconBitmap() != null) {
                serializer.attribute(null, ATTR_ARCHIVE_ICON_PATH,
                        activityInfo.getIconBitmap().toAbsolutePath().toString());
Loading