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

Commit 90b53e1a authored by Winson's avatar Winson
Browse files

Split ParsedActivityImpl

Bug: 178218967

Change-Id: I85ccf44e66f54103e7c376a9d843085a11c837d3
parent 4f0c14dc
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.Property;
import android.content.pm.SigningDetails;
import android.content.pm.parsing.component.ParsedActivity;
import android.content.pm.parsing.component.ParsedActivityImpl;
import android.content.pm.parsing.component.ParsedAttribution;
import android.content.pm.parsing.component.ParsedComponent;
import android.content.pm.parsing.component.ParsedInstrumentation;
@@ -1283,8 +1284,8 @@ public class ParsingPackageImpl implements ParsingPackage, ParsingPackageHidden,
        this.keySetMapping = ParsingPackageUtils.readKeySetMapping(in);
        this.protectedBroadcasts = sForInternedStringList.unparcel(in);

        this.activities = in.createTypedArrayList(ParsedActivity.CREATOR);
        this.receivers = in.createTypedArrayList(ParsedActivity.CREATOR);
        this.activities = ParsingUtils.createTypedInterfaceList(in, ParsedActivityImpl.CREATOR);
        this.receivers = ParsingUtils.createTypedInterfaceList(in, ParsedActivityImpl.CREATOR);
        this.services = in.createTypedArrayList(ParsedService.CREATOR);
        this.providers = in.createTypedArrayList(ParsedProvider.CREATOR);
        this.attributions = in.createTypedArrayList(ParsedAttribution.CREATOR);
+10 −5
Original line number Diff line number Diff line
@@ -49,8 +49,10 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.Property;
import android.content.pm.Signature;
import android.content.pm.SigningDetails;
import android.content.pm.parsing.component.ComponentMutateUtils;
import android.content.pm.parsing.component.ComponentParseUtils;
import android.content.pm.parsing.component.ParsedActivity;
import android.content.pm.parsing.component.ParsedActivityImpl;
import android.content.pm.parsing.component.ParsedActivityUtils;
import android.content.pm.parsing.component.ParsedAttribution;
import android.content.pm.parsing.component.ParsedAttributionUtils;
@@ -2700,7 +2702,8 @@ public class ParsingPackageUtils {
                    ? activity.getMetaData().getFloat(METADATA_MAX_ASPECT_RATIO, maxAspectRatio)
                    : maxAspectRatio;

            activity.setMaxAspectRatio(activity.getResizeMode(), activityAspectRatio);
            ComponentMutateUtils.setMaxAspectRatio(activity, activity.getResizeMode(),
                    activityAspectRatio);
        }
    }

@@ -2717,7 +2720,8 @@ public class ParsingPackageUtils {
        for (int index = 0; index < activitiesSize; index++) {
            ParsedActivity activity = activities.get(index);
            if (activity.getMinAspectRatio() == ASPECT_RATIO_NOT_SET) {
                activity.setMinAspectRatio(activity.getResizeMode(), minAspectRatio);
                ComponentMutateUtils.setMinAspectRatio(activity, activity.getResizeMode(),
                        minAspectRatio);
            }
        }
    }
@@ -2734,7 +2738,7 @@ public class ParsingPackageUtils {
            if (supportsSizeChanges || (activity.getMetaData() != null
                    && activity.getMetaData().getBoolean(
                            METADATA_SUPPORTS_SIZE_CHANGES, false))) {
                activity.setSupportsSizeChanges(true);
                ComponentMutateUtils.setSupportsSizeChanges(activity, true);
            }
        }
    }
@@ -2913,8 +2917,9 @@ public class ParsingPackageUtils {
        int activitiesSize = activities.size();
        for (int index = 0; index < activitiesSize; index++) {
            ParsedActivity activity = activities.get(index);
            activity.setResizeMode(RESIZE_MODE_UNRESIZEABLE)
                    .setFlags(activity.getFlags() & ~FLAG_SUPPORTS_PICTURE_IN_PICTURE);
            ComponentMutateUtils.setResizeMode(activity, RESIZE_MODE_UNRESIZEABLE);
            ComponentMutateUtils.setExactFlags(activity,
                    activity.getFlags() & ~FLAG_SUPPORTS_PICTURE_IN_PICTURE);
        }
    }

+22 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ import android.annotation.Nullable;
import android.content.pm.parsing.result.ParseInput;
import android.content.pm.parsing.result.ParseResult;
import android.content.res.XmlResourceParser;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.Slog;

import com.android.internal.util.XmlUtils;
@@ -30,6 +32,8 @@ import com.android.internal.util.XmlUtils;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/** @hide **/
public class ParsingUtils {
@@ -74,4 +78,22 @@ public class ParsingUtils {
        XmlUtils.skipCurrentTag(parser);
        return input.success(null); // Type doesn't matter
    }

    /**
     * @see Parcel#createTypedArrayList(Parcelable.Creator)
     */
    @NonNull
    static <Interface, Impl extends Interface> List<Interface> createTypedInterfaceList(
            @NonNull Parcel parcel, @NonNull Parcelable.Creator<Impl> creator) {
        int size = parcel.readInt();
        if (size < 0) {
            return new ArrayList<>();
        }
        ArrayList<Interface> list = new ArrayList<Interface>(size);
        while (size > 0) {
            list.add(parcel.readTypedObject(creator));
            size--;
        }
        return list;
    }
}
+69 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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.component;

import android.annotation.NonNull;

/**
 * Contains mutation methods so that code doesn't have to cast to the Impl. Meant to eventually
 * be removed once all post-parsing mutation is moved to parsing.
 *
 * @hide
 */
public class ComponentMutateUtils {

    public static void setMaxAspectRatio(@NonNull ParsedActivity activity, int resizeMode,
            float maxAspectRatio) {
        ((ParsedActivityImpl) activity).setMaxAspectRatio(resizeMode, maxAspectRatio);
    }

    public static void setMinAspectRatio(@NonNull ParsedActivity activity, int resizeMode,
            float minAspectRatio) {
        ((ParsedActivityImpl) activity).setMinAspectRatio(resizeMode, minAspectRatio);
    }

    public static void setSupportsSizeChanges(@NonNull ParsedActivity activity,
            boolean supportsSizeChanges) {
        ((ParsedActivityImpl) activity).setSupportsSizeChanges(supportsSizeChanges);
    }

    public static void setResizeMode(@NonNull ParsedActivity activity, int resizeMode) {
        ((ParsedActivityImpl) activity).setResizeMode(resizeMode);
    }

    public static void setExactFlags(ParsedActivity activity, int exactFlags) {
        ((ParsedActivityImpl) activity).setFlags(exactFlags);
    }

    public static void setEnabled(@NonNull ParsedMainComponent component, boolean enabled) {
        ((ParsedMainComponentImpl) component).setEnabled(enabled);
    }

    public static void setPackageName(@NonNull ParsedComponent component,
            @NonNull String packageName) {
        ((ParsedComponentImpl) component).setPackageName(packageName);
    }

    public static void setDirectBootAware(@NonNull ParsedMainComponent component,
            boolean directBootAware) {
        ((ParsedMainComponentImpl) component).setDirectBootAware(directBootAware);
    }

    public static void setExported(@NonNull ParsedMainComponent component, boolean exported) {
        ((ParsedMainComponentImpl) component).setExported(exported);
    }
}
+31 −473

File changed.

Preview size limit exceeded, changes collapsed.

Loading