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

Commit 764a0895 authored by Chris Li's avatar Chris Li
Browse files

Synchronize window config updates (10/n)

Update local transaction to use addTransactionItem.

Bug: 260873529
Test: atest FrameworksCoreTests:ActivityThreadTest
Change-Id: Id9dbb98f78bb8d309f810152b27a0e540aef4da0
parent a8bb7bf3
Loading
Loading
Loading
Loading
+29 −7
Original line number Diff line number Diff line
@@ -232,6 +232,7 @@ import com.android.internal.util.Preconditions;
import com.android.internal.util.function.pooled.PooledLambda;
import com.android.org.conscrypt.TrustedCertificateStore;
import com.android.server.am.MemInfoDumpProto;
import com.android.window.flags.Flags;

import dalvik.annotation.optimization.NeverCompile;
import dalvik.system.AppSpecializationHooks;
@@ -3713,7 +3714,13 @@ public final class ActivityThread extends ClientTransactionHandler
        final ArrayList<ResultInfo> list = new ArrayList<>();
        list.add(new ResultInfo(id, requestCode, resultCode, data));
        final ClientTransaction clientTransaction = ClientTransaction.obtain(mAppThread);
        clientTransaction.addCallback(ActivityResultItem.obtain(activityToken, list));
        final ActivityResultItem activityResultItem = ActivityResultItem.obtain(
                activityToken, list);
        if (Flags.bundleClientTransactionFlag()) {
            clientTransaction.addTransactionItem(activityResultItem);
        } else {
            clientTransaction.addCallback(activityResultItem);
        }
        try {
            mAppThread.scheduleTransaction(clientTransaction);
        } catch (RemoteException e) {
@@ -4492,16 +4499,26 @@ public final class ActivityThread extends ClientTransactionHandler

    private void schedulePauseWithUserLeavingHint(ActivityClientRecord r) {
        final ClientTransaction transaction = ClientTransaction.obtain(mAppThread);
        transaction.setLifecycleStateRequest(PauseActivityItem.obtain(r.token,
        final PauseActivityItem pauseActivityItem = PauseActivityItem.obtain(r.token,
                r.activity.isFinishing(), /* userLeaving */ true, r.activity.mConfigChangeFlags,
                /* dontReport */ false, /* autoEnteringPip */ false));
                /* dontReport */ false, /* autoEnteringPip */ false);
        if (Flags.bundleClientTransactionFlag()) {
            transaction.addTransactionItem(pauseActivityItem);
        } else {
            transaction.setLifecycleStateRequest(pauseActivityItem);
        }
        executeTransaction(transaction);
    }

    private void scheduleResume(ActivityClientRecord r) {
        final ClientTransaction transaction = ClientTransaction.obtain(mAppThread);
        transaction.setLifecycleStateRequest(ResumeActivityItem.obtain(r.token,
                /* isForward */ false, /* shouldSendCompatFakeFocus */ false));
        final ResumeActivityItem resumeActivityItem = ResumeActivityItem.obtain(r.token,
                /* isForward */ false, /* shouldSendCompatFakeFocus */ false);
        if (Flags.bundleClientTransactionFlag()) {
            transaction.addTransactionItem(resumeActivityItem);
        } else {
            transaction.setLifecycleStateRequest(resumeActivityItem);
        }
        executeTransaction(transaction);
    }

@@ -6092,8 +6109,13 @@ public final class ActivityThread extends ClientTransactionHandler
                TransactionExecutorHelper.getLifecycleRequestForCurrentState(r);
        // Schedule the transaction.
        final ClientTransaction transaction = ClientTransaction.obtain(mAppThread);
        if (Flags.bundleClientTransactionFlag()) {
            transaction.addTransactionItem(activityRelaunchItem);
            transaction.addTransactionItem(lifecycleRequest);
        } else {
            transaction.addCallback(activityRelaunchItem);
            transaction.setLifecycleStateRequest(lifecycleRequest);
        }
        executeTransaction(transaction);
    }

+0 −1
Original line number Diff line number Diff line
@@ -75,7 +75,6 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem {
    /**
     * Adds a message to the end of the sequence of transaction items.
     * @param item A single message that can contain a client activity/window request/callback.
     * TODO(b/260873529): replace both {@link #addCallback} and {@link #setLifecycleStateRequest}.
     */
    public void addTransactionItem(@NonNull ClientTransactionItem item) {
        if (mTransactionItems == null) {
+2 −0
Original line number Diff line number Diff line
@@ -235,7 +235,9 @@ public class TransactionExecutorHelper {
     *   Configuration - ActivityResult - Configuration - ActivityResult
     * index 1 will be returned, because ActivityResult request on position 1 will be the last
     * request that moves activity to the RESUMED state where it will eventually end.
     * @deprecated to be removed with {@link TransactionExecutor#executeCallbacks}.
     */
    @Deprecated
    static int lastCallbackRequestingState(@NonNull ClientTransaction transaction) {
        final List<ClientTransactionItem> callbacks = transaction.getCallbacks();
        if (callbacks == null || callbacks.isEmpty()
+10 −0
Original line number Diff line number Diff line
@@ -9,6 +9,16 @@ flag {
    bug: "260873529"
}

# Using a fixed read only flag because there are ClientTransaction scheduling before
# WindowManagerService creation.
flag {
    namespace: "windowing_sdk"
    name: "bundle_client_transaction_flag"
    description: "To bundle multiple ClientTransactionItems into one ClientTransaction"
    bug: "260873529"
    is_fixed_read_only: true
}

flag {
    namespace: "windowing_sdk"
    name: "activity_embedding_overlay_presentation_flag"
+26 −12
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import android.app.IApplicationThread;
import android.app.PictureInPictureParams;
import android.app.ResourcesManager;
import android.app.servertransaction.ActivityConfigurationChangeItem;
import android.app.servertransaction.ActivityLifecycleItem;
import android.app.servertransaction.ActivityRelaunchItem;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.ClientTransactionItem;
@@ -73,6 +74,7 @@ import androidx.test.rule.ActivityTestRule;
import androidx.test.runner.AndroidJUnit4;

import com.android.internal.content.ReferrerIntent;
import com.android.window.flags.Flags;

import org.junit.After;
import org.junit.Before;
@@ -227,7 +229,8 @@ public class ActivityThreadTest {
        try {
            // Send process level config change.
            ClientTransaction transaction = newTransaction(activityThread);
            transaction.addCallback(ConfigurationChangeItem.obtain(newConfig, DEVICE_ID_INVALID));
            addClientTransactionItem(transaction, ConfigurationChangeItem.obtain(
                    newConfig, DEVICE_ID_INVALID));
            appThread.scheduleTransaction(transaction);
            InstrumentationRegistry.getInstrumentation().waitForIdleSync();

@@ -243,7 +246,7 @@ public class ActivityThreadTest {
            newConfig.seq++;
            newConfig.smallestScreenWidthDp++;
            transaction = newTransaction(activityThread);
            transaction.addCallback(ActivityConfigurationChangeItem.obtain(
            addClientTransactionItem(transaction, ActivityConfigurationChangeItem.obtain(
                    activity.getActivityToken(), newConfig));
            appThread.scheduleTransaction(transaction);
            InstrumentationRegistry.getInstrumentation().waitForIdleSync();
@@ -444,16 +447,16 @@ public class ActivityThreadTest {
        activity.mTestLatch = new CountDownLatch(1);

        ClientTransaction transaction = newTransaction(activityThread);
        transaction.addCallback(ConfigurationChangeItem.obtain(
        addClientTransactionItem(transaction, ConfigurationChangeItem.obtain(
                processConfigLandscape, DEVICE_ID_INVALID));
        appThread.scheduleTransaction(transaction);

        transaction = newTransaction(activityThread);
        transaction.addCallback(ActivityConfigurationChangeItem.obtain(
        addClientTransactionItem(transaction, ActivityConfigurationChangeItem.obtain(
                activity.getActivityToken(), activityConfigLandscape));
        transaction.addCallback(ConfigurationChangeItem.obtain(
        addClientTransactionItem(transaction, ConfigurationChangeItem.obtain(
                processConfigPortrait, DEVICE_ID_INVALID));
        transaction.addCallback(ActivityConfigurationChangeItem.obtain(
        addClientTransactionItem(transaction, ActivityConfigurationChangeItem.obtain(
                activity.getActivityToken(), activityConfigPortrait));
        appThread.scheduleTransaction(transaction);

@@ -840,8 +843,8 @@ public class ActivityThreadTest {
                        false /* shouldSendCompatFakeFocus*/);

        final ClientTransaction transaction = newTransaction(activity);
        transaction.addCallback(callbackItem);
        transaction.setLifecycleStateRequest(resumeStateRequest);
        addClientTransactionItem(transaction, callbackItem);
        addClientTransactionItem(transaction, resumeStateRequest);

        return transaction;
    }
@@ -853,7 +856,7 @@ public class ActivityThreadTest {
                        false /* shouldSendCompatFakeFocus */);

        final ClientTransaction transaction = newTransaction(activity);
        transaction.setLifecycleStateRequest(resumeStateRequest);
        addClientTransactionItem(transaction, resumeStateRequest);

        return transaction;
    }
@@ -864,7 +867,7 @@ public class ActivityThreadTest {
                activity.getActivityToken(), 0 /* configChanges */);

        final ClientTransaction transaction = newTransaction(activity);
        transaction.setLifecycleStateRequest(stopStateRequest);
        addClientTransactionItem(transaction, stopStateRequest);

        return transaction;
    }
@@ -876,7 +879,7 @@ public class ActivityThreadTest {
                activity.getActivityToken(), config);

        final ClientTransaction transaction = newTransaction(activity);
        transaction.addCallback(item);
        addClientTransactionItem(transaction, item);

        return transaction;
    }
@@ -888,7 +891,7 @@ public class ActivityThreadTest {
                resume);

        final ClientTransaction transaction = newTransaction(activity);
        transaction.addCallback(item);
        addClientTransactionItem(transaction, item);

        return transaction;
    }
@@ -903,6 +906,17 @@ public class ActivityThreadTest {
        return ClientTransaction.obtain(activityThread.getApplicationThread());
    }

    private static void addClientTransactionItem(@NonNull ClientTransaction transaction,
            @NonNull ClientTransactionItem item) {
        if (Flags.bundleClientTransactionFlag()) {
            transaction.addTransactionItem(item);
        } else if (item.isActivityLifecycleItem()) {
            transaction.setLifecycleStateRequest((ActivityLifecycleItem) item);
        } else {
            transaction.addCallback(item);
        }
    }

    // Test activity
    public static class TestActivity extends Activity {
        static final String PIP_REQUESTED_OVERRIDE_ENTER = "pip_requested_override_enter";
Loading