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

Commit 94709a90 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Add ActivityWindowInfo into MoveToDisplayItem" into main

parents e9067e5d d978414c
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -717,7 +717,7 @@ public final class ActivityThread extends ClientTransactionHandler
                    }
                    activity.mMainThread.handleActivityConfigurationChanged(
                            ActivityClientRecord.this, overrideConfig, newDisplayId,
                            false /* alwaysReportChange */);
                            mActivityWindowInfo, false /* alwaysReportChange */);
                }

                @Override
@@ -6659,11 +6659,12 @@ public final class ActivityThread extends ClientTransactionHandler
    /**
     * Sets the supplied {@code overrideConfig} as pending for the {@code token}. Calling
     * this method prevents any calls to
     * {@link #handleActivityConfigurationChanged(ActivityClientRecord, Configuration, int)} from
     * processing any configurations older than {@code overrideConfig}.
     * {@link #handleActivityConfigurationChanged(ActivityClientRecord, Configuration, int,
     * ActivityWindowInfo)} from processing any configurations older than {@code overrideConfig}.
     */
    @Override
    public void updatePendingActivityConfiguration(IBinder token, Configuration overrideConfig) {
    public void updatePendingActivityConfiguration(@NonNull IBinder token,
            @NonNull Configuration overrideConfig) {
        synchronized (mPendingOverrideConfigs) {
            final Configuration pendingOverrideConfig = mPendingOverrideConfigs.get(token);
            if (pendingOverrideConfig != null
@@ -6680,9 +6681,10 @@ public final class ActivityThread extends ClientTransactionHandler
    }

    @Override
    public void handleActivityConfigurationChanged(ActivityClientRecord r,
            @NonNull Configuration overrideConfig, int displayId) {
        handleActivityConfigurationChanged(r, overrideConfig, displayId,
    public void handleActivityConfigurationChanged(@NonNull ActivityClientRecord r,
            @NonNull Configuration overrideConfig, int displayId,
            @NonNull ActivityWindowInfo activityWindowInfo) {
        handleActivityConfigurationChanged(r, overrideConfig, displayId, activityWindowInfo,
                // This is the only place that uses alwaysReportChange=true. The entry point should
                // be from ActivityConfigurationChangeItem or MoveToDisplayItem, so the server side
                // has confirmed the activity should handle the configuration instead of relaunch.
@@ -6700,9 +6702,11 @@ public final class ActivityThread extends ClientTransactionHandler
     * @param overrideConfig Activity override config.
     * @param displayId Id of the display where activity was moved to, -1 if there was no move and
     *                  value didn't change.
     * @param activityWindowInfo the window info of the given activity.
     */
    void handleActivityConfigurationChanged(ActivityClientRecord r,
            @NonNull Configuration overrideConfig, int displayId, boolean alwaysReportChange) {
    void handleActivityConfigurationChanged(@NonNull ActivityClientRecord r,
            @NonNull Configuration overrideConfig, int displayId,
            @NonNull ActivityWindowInfo activityWindowInfo, boolean alwaysReportChange) {
        synchronized (mPendingOverrideConfigs) {
            final Configuration pendingOverrideConfig = mPendingOverrideConfigs.get(r.token);
            if (overrideConfig.isOtherSeqNewer(pendingOverrideConfig)) {
@@ -6735,6 +6739,8 @@ public final class ActivityThread extends ClientTransactionHandler

        // Perform updates.
        r.overrideConfig = overrideConfig;
        r.mActivityWindowInfo = activityWindowInfo;
        // TODO(b/287582673): notify on ActivityWindowInfo change
        final ViewRootImpl viewRoot = r.activity.mDecor != null
            ? r.activity.mDecor.getViewRootImpl() : null;

+3 −2
Original line number Diff line number Diff line
@@ -167,11 +167,12 @@ public abstract class ClientTransactionHandler {

    /** Set pending activity configuration in case it will be updated by other transaction item. */
    public abstract void updatePendingActivityConfiguration(@NonNull IBinder token,
            Configuration overrideConfig);
            @NonNull Configuration overrideConfig);

    /** Deliver activity (override) configuration change. */
    public abstract void handleActivityConfigurationChanged(@NonNull ActivityClientRecord r,
            Configuration overrideConfig, int displayId);
            @NonNull Configuration overrideConfig, int displayId,
            @NonNull ActivityWindowInfo activityWindowInfo);

    /** Deliver {@link android.window.WindowContextInfo} change. */
    public abstract void handleWindowContextInfoChanged(@NonNull IBinder clientToken,
+5 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.res.Configuration;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Trace;
import android.window.ActivityWindowInfo;

import java.util.Objects;

@@ -49,11 +50,13 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    }

    @Override
    public void execute(@NonNull ClientTransactionHandler client, @Nullable ActivityClientRecord r,
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        // TODO(lifecycler): detect if PIP or multi-window mode changed and report it here.
        Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityConfigChanged");
        client.handleActivityConfigurationChanged(r, mConfiguration, INVALID_DISPLAY);
        client.handleActivityConfigurationChanged(r, mConfiguration, INVALID_DISPLAY,
                // TODO(b/287582673): add ActivityWindowInfo
                new ActivityWindowInfo());
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }

+14 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.res.Configuration;
import android.os.IBinder;
import android.os.Parcel;
import android.os.Trace;
import android.window.ActivityWindowInfo;

import java.util.Objects;

@@ -39,6 +40,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {

    private int mTargetDisplayId;
    private Configuration mConfiguration;
    private ActivityWindowInfo mActivityWindowInfo;

    @Override
    public void preExecute(@NonNull ClientTransactionHandler client) {
@@ -52,7 +54,8 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
    public void execute(@NonNull ClientTransactionHandler client, @NonNull ActivityClientRecord r,
            @NonNull PendingTransactionActions pendingActions) {
        Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityMovedToDisplay");
        client.handleActivityConfigurationChanged(r, mConfiguration, mTargetDisplayId);
        client.handleActivityConfigurationChanged(r, mConfiguration, mTargetDisplayId,
                mActivityWindowInfo);
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }

@@ -69,7 +72,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
    /** Obtain an instance initialized with provided params. */
    @NonNull
    public static MoveToDisplayItem obtain(@NonNull IBinder activityToken, int targetDisplayId,
            @NonNull Configuration configuration) {
            @NonNull Configuration configuration, @NonNull ActivityWindowInfo activityWindowInfo) {
        MoveToDisplayItem instance = ObjectPool.obtain(MoveToDisplayItem.class);
        if (instance == null) {
            instance = new MoveToDisplayItem();
@@ -77,6 +80,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        instance.setActivityToken(activityToken);
        instance.mTargetDisplayId = targetDisplayId;
        instance.mConfiguration = new Configuration(configuration);
        instance.mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo);

        return instance;
    }
@@ -86,6 +90,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        super.recycle();
        mTargetDisplayId = 0;
        mConfiguration = null;
        mActivityWindowInfo = null;
        ObjectPool.recycle(this);
    }

@@ -97,6 +102,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        super.writeToParcel(dest, flags);
        dest.writeInt(mTargetDisplayId);
        dest.writeTypedObject(mConfiguration, flags);
        dest.writeTypedObject(mActivityWindowInfo, flags);
    }

    /** Read from Parcel. */
@@ -104,6 +110,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        super(in);
        mTargetDisplayId = in.readInt();
        mConfiguration = in.readTypedObject(Configuration.CREATOR);
        mActivityWindowInfo = in.readTypedObject(ActivityWindowInfo.CREATOR);
    }

    public static final @NonNull Creator<MoveToDisplayItem> CREATOR = new Creator<>() {
@@ -126,7 +133,8 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        }
        final MoveToDisplayItem other = (MoveToDisplayItem) o;
        return mTargetDisplayId == other.mTargetDisplayId
                && Objects.equals(mConfiguration, other.mConfiguration);
                && Objects.equals(mConfiguration, other.mConfiguration)
                && Objects.equals(mActivityWindowInfo, other.mActivityWindowInfo);
    }

    @Override
@@ -135,6 +143,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        result = 31 * result + super.hashCode();
        result = 31 * result + mTargetDisplayId;
        result = 31 * result + mConfiguration.hashCode();
        result = 31 * result + Objects.hashCode(mActivityWindowInfo);
        return result;
    }

@@ -142,6 +151,7 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
    public String toString() {
        return "MoveToDisplayItem{" + super.toString()
                + ",targetDisplayId=" + mTargetDisplayId
                + ",configuration=" + mConfiguration + "}";
                + ",configuration=" + mConfiguration
                + ",activityWindowInfo=" + mActivityWindowInfo + "}";
    }
}
+13 −9
Original line number Diff line number Diff line
@@ -395,11 +395,13 @@ public class ActivityThreadTest {
            olderConfig.seq = seq + 1;

            final ActivityClientRecord r = getActivityClientRecord(activity);
            activityThread.handleActivityConfigurationChanged(r, olderConfig, INVALID_DISPLAY);
            activityThread.handleActivityConfigurationChanged(r, olderConfig, INVALID_DISPLAY,
                    new ActivityWindowInfo());
            assertEquals(numOfConfig, activity.mNumOfConfigChanges);
            assertEquals(olderConfig.orientation, activity.mConfig.orientation);

            activityThread.handleActivityConfigurationChanged(r, newerConfig, INVALID_DISPLAY);
            activityThread.handleActivityConfigurationChanged(r, newerConfig, INVALID_DISPLAY,
                    new ActivityWindowInfo());
            assertEquals(numOfConfig + 1, activity.mNumOfConfigChanges);
            assertEquals(newerConfig.orientation, activity.mConfig.orientation);
        });
@@ -417,7 +419,7 @@ public class ActivityThreadTest {
            config.orientation = ORIENTATION_PORTRAIT;

            activityThread.handleActivityConfigurationChanged(getActivityClientRecord(activity),
                    config, INVALID_DISPLAY);
                    config, INVALID_DISPLAY, new ActivityWindowInfo());
        });

        final IApplicationThread appThread = activityThread.getApplicationThread();
@@ -488,7 +490,7 @@ public class ActivityThreadTest {
            config.orientation = ORIENTATION_PORTRAIT;

            activityThread.handleActivityConfigurationChanged(getActivityClientRecord(activity),
                    config, INVALID_DISPLAY);
                    config, INVALID_DISPLAY, new ActivityWindowInfo());
        });

        final int numOfConfig = activity.mNumOfConfigChanges;
@@ -618,7 +620,7 @@ public class ActivityThreadTest {
            activityThread.updatePendingActivityConfiguration(activity.getActivityToken(),
                    newActivityConfig);
            activityThread.handleActivityConfigurationChanged(r, newActivityConfig,
                    INVALID_DISPLAY);
                    INVALID_DISPLAY, new ActivityWindowInfo());

            assertEquals("Virtual display orientation must not change when activity"
                            + " configuration orientation changes.",
@@ -783,8 +785,8 @@ public class ActivityThreadTest {

    /**
     * Calls {@link ActivityThread#handleActivityConfigurationChanged(ActivityClientRecord,
     * Configuration, int)} to try to push activity configuration to the activity for the given
     * sequence number.
     * Configuration, int, ActivityWindowInfo)} to try to push activity configuration to the
     * activity for the given sequence number.
     * <p>
     * It uses orientation to push the configuration and it tries a different orientation if the
     * first attempt doesn't make through, to rule out the possibility that the previous
@@ -803,7 +805,8 @@ public class ActivityThreadTest {
        Configuration config = new Configuration();
        config.orientation = ORIENTATION_PORTRAIT;
        config.seq = seq;
        activityThread.handleActivityConfigurationChanged(r, config, INVALID_DISPLAY);
        activityThread.handleActivityConfigurationChanged(r, config, INVALID_DISPLAY,
                new ActivityWindowInfo());

        if (activity.mNumOfConfigChanges > numOfConfig) {
            return config.seq;
@@ -812,7 +815,8 @@ public class ActivityThreadTest {
        config = new Configuration();
        config.orientation = ORIENTATION_LANDSCAPE;
        config.seq = seq + 1;
        activityThread.handleActivityConfigurationChanged(r, config, INVALID_DISPLAY);
        activityThread.handleActivityConfigurationChanged(r, config, INVALID_DISPLAY,
                new ActivityWindowInfo());

        return config.seq;
    }
Loading