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

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

Merge "Add ActivityWindowInfo into ActivityRelaunchItem" into main

parents 076de20c 9851d328
Loading
Loading
Loading
Loading
+19 −11
Original line number Diff line number Diff line
@@ -5998,9 +5998,11 @@ public final class ActivityThread extends ClientTransactionHandler
    }

    @Override
    public ActivityClientRecord prepareRelaunchActivity(IBinder token,
            List<ResultInfo> pendingResults, List<ReferrerIntent> pendingNewIntents,
            int configChanges, MergedConfiguration config, boolean preserveWindow) {
    public ActivityClientRecord prepareRelaunchActivity(@NonNull IBinder token,
            @Nullable List<ResultInfo> pendingResults,
            @Nullable List<ReferrerIntent> pendingNewIntents, int configChanges,
            @NonNull MergedConfiguration config, boolean preserveWindow,
            @NonNull ActivityWindowInfo activityWindowInfo) {
        ActivityClientRecord target = null;
        boolean scheduleRelaunch = false;

@@ -6041,14 +6043,15 @@ public final class ActivityThread extends ClientTransactionHandler
            target.createdConfig = config.getGlobalConfiguration();
            target.overrideConfig = config.getOverrideConfiguration();
            target.pendingConfigChanges |= configChanges;
            target.mActivityWindowInfo = activityWindowInfo;
        }

        return scheduleRelaunch ? target : null;
    }

    @Override
    public void handleRelaunchActivity(ActivityClientRecord tmp,
            PendingTransactionActions pendingActions) {
    public void handleRelaunchActivity(@NonNull ActivityClientRecord tmp,
            @NonNull PendingTransactionActions pendingActions) {
        // If we are getting ready to gc after going to the background, well
        // we are back active so skip it.
        unscheduleGcIdler();
@@ -6128,7 +6131,8 @@ public final class ActivityThread extends ClientTransactionHandler
        r.activity.mChangingConfigurations = true;

        handleRelaunchActivityInner(r, configChanges, tmp.pendingResults, tmp.pendingIntents,
                pendingActions, tmp.startsNotResumed, tmp.overrideConfig, "handleRelaunchActivity");
                pendingActions, tmp.startsNotResumed, tmp.overrideConfig, tmp.mActivityWindowInfo,
                "handleRelaunchActivity");
    }

    void scheduleRelaunchActivity(IBinder token) {
@@ -6183,7 +6187,8 @@ public final class ActivityThread extends ClientTransactionHandler
                r.overrideConfig);
        final ActivityRelaunchItem activityRelaunchItem = ActivityRelaunchItem.obtain(
                r.token, null /* pendingResults */, null /* pendingIntents */,
                0 /* configChanges */, mergedConfiguration, r.mPreserveWindow);
                0 /* configChanges */, mergedConfiguration, r.mPreserveWindow,
                r.getActivityWindowInfo());
        // Make sure to match the existing lifecycle state in the end of the transaction.
        final ActivityLifecycleItem lifecycleRequest =
                TransactionExecutorHelper.getLifecycleRequestForCurrentState(r);
@@ -6194,10 +6199,12 @@ public final class ActivityThread extends ClientTransactionHandler
        executeTransaction(transaction);
    }

    private void handleRelaunchActivityInner(ActivityClientRecord r, int configChanges,
            List<ResultInfo> pendingResults, List<ReferrerIntent> pendingIntents,
            PendingTransactionActions pendingActions, boolean startsNotResumed,
            Configuration overrideConfig, String reason) {
    private void handleRelaunchActivityInner(@NonNull ActivityClientRecord r, int configChanges,
            @Nullable List<ResultInfo> pendingResults,
            @Nullable List<ReferrerIntent> pendingIntents,
            @NonNull PendingTransactionActions pendingActions, boolean startsNotResumed,
            @NonNull Configuration overrideConfig, @NonNull ActivityWindowInfo activityWindowInfo,
            @NonNull String reason) {
        // Preserve last used intent, it may be set from Activity#setIntent().
        final Intent customIntent = r.activity.mIntent;
        // Need to ensure state is saved.
@@ -6230,6 +6237,7 @@ public final class ActivityThread extends ClientTransactionHandler
        }
        r.startsNotResumed = startsNotResumed;
        r.overrideConfig = overrideConfig;
        r.mActivityWindowInfo = activityWindowInfo;

        handleLaunchActivity(r, pendingActions, mLastReportedDeviceId, customIntent);
    }
+8 −4
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.content.res.Configuration;
import android.os.IBinder;
import android.util.MergedConfiguration;
import android.view.SurfaceControl;
import android.window.ActivityWindowInfo;
import android.window.SplashScreenView.SplashScreenViewParcelable;
import android.window.WindowContext;
import android.window.WindowContextInfo;
@@ -232,12 +233,15 @@ public abstract class ClientTransactionHandler {
     * @param config New configuration applied to the activity.
     * @param preserveWindow Whether the activity should try to reuse the window it created,
     *                        including the decor view after the relaunch.
     * @param activityWindowInfo Window information about the relaunched Activity.
     * @return An initialized instance of {@link ActivityThread.ActivityClientRecord} to use during
     *         relaunch, or {@code null} if relaunch cancelled.
     */
    public abstract ActivityClientRecord prepareRelaunchActivity(IBinder token,
            List<ResultInfo> pendingResults, List<ReferrerIntent> pendingNewIntents,
            int configChanges, MergedConfiguration config, boolean preserveWindow);
    public abstract ActivityClientRecord prepareRelaunchActivity(@NonNull IBinder token,
            @Nullable List<ResultInfo> pendingResults,
            @Nullable List<ReferrerIntent> pendingNewIntents, int configChanges,
            @NonNull MergedConfiguration config, boolean preserveWindow,
            @NonNull ActivityWindowInfo activityWindowInfo);

    /**
     * Perform activity relaunch.
@@ -245,7 +249,7 @@ public abstract class ClientTransactionHandler {
     * @param pendingActions Pending actions to be used on later stages of activity transaction.
     * */
    public abstract void handleRelaunchActivity(@NonNull ActivityClientRecord r,
            PendingTransactionActions pendingActions);
            @NonNull PendingTransactionActions pendingActions);

    /**
     * Report that relaunch request was handled.
+14 −4
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.os.Parcel;
import android.os.Trace;
import android.util.MergedConfiguration;
import android.util.Slog;
import android.window.ActivityWindowInfo;

import com.android.internal.content.ReferrerIntent;

@@ -50,6 +51,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    private int mConfigChanges;
    private MergedConfiguration mConfig;
    private boolean mPreserveWindow;
    private ActivityWindowInfo mActivityWindowInfo;

    /**
     * A record that was properly configured for relaunch. Execution will be cancelled if not
@@ -64,7 +66,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
            CompatibilityInfo.applyOverrideScaleIfNeeded(mConfig);
        }
        mActivityClientRecord = client.prepareRelaunchActivity(getActivityToken(), mPendingResults,
                mPendingNewIntents, mConfigChanges, mConfig, mPreserveWindow);
                mPendingNewIntents, mConfigChanges, mConfig, mPreserveWindow, mActivityWindowInfo);
    }

    @Override
@@ -101,7 +103,8 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
    public static ActivityRelaunchItem obtain(@NonNull IBinder activityToken,
            @Nullable List<ResultInfo> pendingResults,
            @Nullable List<ReferrerIntent> pendingNewIntents, int configChanges,
            @NonNull MergedConfiguration config, boolean preserveWindow) {
            @NonNull MergedConfiguration config, boolean preserveWindow,
            @NonNull ActivityWindowInfo activityWindowInfo) {
        ActivityRelaunchItem instance = ObjectPool.obtain(ActivityRelaunchItem.class);
        if (instance == null) {
            instance = new ActivityRelaunchItem();
@@ -113,6 +116,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        instance.mConfigChanges = configChanges;
        instance.mConfig = new MergedConfiguration(config);
        instance.mPreserveWindow = preserveWindow;
        instance.mActivityWindowInfo = new ActivityWindowInfo(activityWindowInfo);

        return instance;
    }
@@ -126,6 +130,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        mConfig = null;
        mPreserveWindow = false;
        mActivityClientRecord = null;
        mActivityWindowInfo = null;
        ObjectPool.recycle(this);
    }

@@ -141,6 +146,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        dest.writeInt(mConfigChanges);
        dest.writeTypedObject(mConfig, flags);
        dest.writeBoolean(mPreserveWindow);
        dest.writeTypedObject(mActivityWindowInfo, flags);
    }

    /** Read from Parcel. */
@@ -151,6 +157,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        mConfigChanges = in.readInt();
        mConfig = in.readTypedObject(MergedConfiguration.CREATOR);
        mPreserveWindow = in.readBoolean();
        mActivityWindowInfo = in.readTypedObject(ActivityWindowInfo.CREATOR);
    }

    public static final @NonNull Creator<ActivityRelaunchItem> CREATOR =
@@ -176,7 +183,8 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        return Objects.equals(mPendingResults, other.mPendingResults)
                && Objects.equals(mPendingNewIntents, other.mPendingNewIntents)
                && mConfigChanges == other.mConfigChanges && Objects.equals(mConfig, other.mConfig)
                && mPreserveWindow == other.mPreserveWindow;
                && mPreserveWindow == other.mPreserveWindow
                && Objects.equals(mActivityWindowInfo, other.mActivityWindowInfo);
    }

    @Override
@@ -188,6 +196,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        result = 31 * result + mConfigChanges;
        result = 31 * result + Objects.hashCode(mConfig);
        result = 31 * result + (mPreserveWindow ? 1 : 0);
        result = 31 * result + Objects.hashCode(mActivityWindowInfo);
        return result;
    }

@@ -198,6 +207,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
                + ",pendingNewIntents=" + mPendingNewIntents
                + ",configChanges="  + mConfigChanges
                + ",config=" + mConfig
                + ",preserveWindow" + mPreserveWindow + "}";
                + ",preserveWindow=" + mPreserveWindow
                + ",activityWindowInfo=" + mActivityWindowInfo + "}";
    }
}
+2 −1
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import android.util.DisplayMetrics;
import android.util.MergedConfiguration;
import android.view.Display;
import android.view.View;
import android.window.ActivityWindowInfo;
import android.window.WindowContextInfo;
import android.window.WindowTokenClientController;

@@ -839,7 +840,7 @@ public class ActivityThreadTest {
        final ClientTransactionItem callbackItem = ActivityRelaunchItem.obtain(
                activity.getActivityToken(), null, null, 0,
                new MergedConfiguration(currentConfig, currentConfig),
                false /* preserveWindow */);
                false /* preserveWindow */, new ActivityWindowInfo());
        final ResumeActivityItem resumeStateRequest =
                ResumeActivityItem.obtain(activity.getActivityToken(), true /* isForward */,
                        false /* shouldSendCompatFakeFocus*/);
+3 −1
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.util.ArrayMap;
import android.util.MergedConfiguration;
import android.view.IWindow;
import android.view.InsetsState;
import android.window.ActivityWindowInfo;
import android.window.ClientWindowFrames;
import android.window.WindowContext;
import android.window.WindowContextInfo;
@@ -116,7 +117,8 @@ public class ClientTransactionItemTest {
    public void testActivityRelaunchItem_getContextToUpdate() {
        final ActivityRelaunchItem item = ActivityRelaunchItem
                .obtain(mActivityToken, null /* pendingResults */, null  /* pendingNewIntents */,
                        0 /* configChange */, mMergedConfiguration, false /* preserveWindow */);
                        0 /* configChange */, mMergedConfiguration, false /* preserveWindow */,
                        new ActivityWindowInfo());
        final Context context = item.getContextToUpdate(mHandler);

        assertEquals(mActivity, context);
Loading