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

Commit 37a77dfd authored by Chris Li's avatar Chris Li
Browse files

Synchronize window config updates (8/n)

1. Make sure the values stored in ClientTransactionItem are final so
   that when we queue the transactions, they won't change before
   dispatch.
2. Fix related tests that were incorrectly passed (false positive).

Bug: 260873529
Test: atest WmTests:ActivityRecordTests
Test: atest WmTests:ActivityTaskManagerServiceTests
Test: atest FrameworksCoreTests:ObjectPoolTests
Change-Id: Idb5aec3ec158307eed2f41cb7aeeefd0fcbe227f
parent 06341ecb
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -71,17 +71,13 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    @NonNull
    public static ActivityConfigurationChangeItem obtain(@NonNull IBinder activityToken,
            @NonNull Configuration config) {
        if (config == null) {
            throw new IllegalArgumentException("Config must not be null.");
        }

        ActivityConfigurationChangeItem instance =
                ObjectPool.obtain(ActivityConfigurationChangeItem.class);
        if (instance == null) {
            instance = new ActivityConfigurationChangeItem();
        }
        instance.setActivityToken(activityToken);
        instance.mConfiguration = config;
        instance.mConfiguration = new Configuration(config);

        return instance;
    }
@@ -89,7 +85,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    @Override
    public void recycle() {
        super.recycle();
        mConfiguration = Configuration.EMPTY;
        mConfiguration = null;
        ObjectPool.recycle(this);
    }

+6 −4
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.util.Slog;

import com.android.internal.content.ReferrerIntent;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@@ -51,7 +52,7 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {

    /**
     * A record that was properly configured for relaunch. Execution will be cancelled if not
     * initialized after {@link #preExecute(ClientTransactionHandler, IBinder)}.
     * initialized after {@link #preExecute(ClientTransactionHandler)}.
     */
    private ActivityClientRecord mActivityClientRecord;

@@ -99,10 +100,11 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
            instance = new ActivityRelaunchItem();
        }
        instance.setActivityToken(activityToken);
        instance.mPendingResults = pendingResults;
        instance.mPendingNewIntents = pendingNewIntents;
        instance.mPendingResults = pendingResults != null ? new ArrayList<>(pendingResults) : null;
        instance.mPendingNewIntents =
                pendingNewIntents != null ? new ArrayList<>(pendingNewIntents) : null;
        instance.mConfigChanges = configChanges;
        instance.mConfig = config;
        instance.mConfig = new MergedConfiguration(config);
        instance.mPreserveWindow = preserveWindow;

        return instance;
+2 −1
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.Trace;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@@ -82,7 +83,7 @@ public class ActivityResultItem extends ActivityTransactionItem {
            instance = new ActivityResultItem();
        }
        instance.setActivityToken(activityToken);
        instance.mResultInfoList = resultInfoList;
        instance.mResultInfoList = new ArrayList<>(resultInfoList);

        return instance;
    }
+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import static android.app.servertransaction.TransactionExecutorHelper.getActivit

import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;

import static java.util.Objects.requireNonNull;

import android.annotation.CallSuper;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -93,7 +95,7 @@ public abstract class ActivityTransactionItem extends ClientTransactionItem {
    }

    void setActivityToken(@NonNull IBinder activityToken) {
        mActivityToken = activityToken;
        mActivityToken = requireNonNull(activityToken);
    }

    // To be overridden
+4 −1
Original line number Diff line number Diff line
@@ -54,12 +54,14 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem {

    /** A list of individual callbacks to a client. */
    @UnsupportedAppUsage
    @Nullable
    private List<ClientTransactionItem> mActivityCallbacks;

    /**
     * Final lifecycle state in which the client activity should be after the transaction is
     * executed.
     */
    @Nullable
    private ActivityLifecycleItem mLifecycleStateRequest;

    /** Target client. */
@@ -123,6 +125,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem {
    @VisibleForTesting(visibility = PACKAGE)
    @UnsupportedAppUsage
    @Deprecated
    @Nullable
    public ActivityLifecycleItem getLifecycleStateRequest() {
        return mLifecycleStateRequest;
    }
@@ -207,7 +210,7 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem {
            for (int i = 0; i < size; i++) {
                mActivityCallbacks.get(i).recycle();
            }
            mActivityCallbacks.clear();
            mActivityCallbacks = null;
        }
        if (mLifecycleStateRequest != null) {
            mLifecycleStateRequest.recycle();
Loading