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

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

Merge "Synchronize window config updates (14/n)" into main

parents b017819a dc352a4c
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.Nullable;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.app.ResultInfo;
import android.content.Context;
import android.content.res.CompatibilityInfo;
import android.os.IBinder;
import android.os.Parcel;
@@ -85,6 +86,12 @@ public class ActivityRelaunchItem extends ActivityTransactionItem {
        client.reportRelaunch(r);
    }

    @Nullable
    @Override
    public Context getContextToUpdate(@NonNull ClientTransactionHandler client) {
        return client.getActivity(getActivityToken());
    }

    // ObjectPoolItem implementation

    private ActivityRelaunchItem() {}
+9 −0
Original line number Diff line number Diff line
@@ -24,12 +24,14 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityClient;
import android.app.ActivityOptions;
import android.app.ActivityThread;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.app.IActivityClientController;
import android.app.ProfilerInfo;
import android.app.ResultInfo;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.CompatibilityInfo;
@@ -115,6 +117,13 @@ public class LaunchActivityItem extends ClientTransactionItem {
        client.countLaunchingActivities(-1);
    }

    @Nullable
    @Override
    public Context getContextToUpdate(@NonNull ClientTransactionHandler client) {
        // LaunchActivityItem may update the global config with #mCurConfig.
        return ActivityThread.currentApplication();
    }

    // ObjectPoolItem implementation

    private LaunchActivityItem() {}
+7 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.content.Context;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.os.IBinder;
@@ -55,6 +56,12 @@ public class MoveToDisplayItem extends ActivityTransactionItem {
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }

    @Nullable
    @Override
    public Context getContextToUpdate(@NonNull ClientTransactionHandler client) {
        return client.getActivity(getActivityToken());
    }

    // ObjectPoolItem implementation

    private MoveToDisplayItem() {}
+46 −25
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.content.Context;
import android.content.res.Configuration;
import android.os.IBinder;
import android.os.Process;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.IntArray;
import android.util.Slog;
@@ -62,8 +63,11 @@ public class TransactionExecutor {
    private final PendingTransactionActions mPendingActions = new PendingTransactionActions();
    private final TransactionExecutorHelper mHelper = new TransactionExecutorHelper();

    /** Keeps track of display ids whose Configuration got updated within a transaction. */
    private final ArraySet<Integer> mConfigUpdatedDisplayIds = new ArraySet<>();
    /**
     * Keeps track of the Context whose Configuration got updated within a transaction, mapping to
     * the config before the transaction.
     */
    private final ArrayMap<Context, Configuration> mContextToPreChangedConfigMap = new ArrayMap<>();

    /** Initialize an instance with transaction handler, that will execute all requested actions. */
    public TransactionExecutor(@NonNull ClientTransactionHandler clientTransactionHandler) {
@@ -91,16 +95,35 @@ public class TransactionExecutor {
            executeLifecycleState(transaction);
        }

        if (!mConfigUpdatedDisplayIds.isEmpty()) {
        if (!mContextToPreChangedConfigMap.isEmpty()) {
            // Whether this transaction should trigger DisplayListener#onDisplayChanged.
            try {
                // Calculate display ids that have config changed.
                final ArraySet<Integer> configUpdatedDisplayIds = new ArraySet<>();
                final int contextCount = mContextToPreChangedConfigMap.size();
                for (int i = 0; i < contextCount; i++) {
                    final Context context = mContextToPreChangedConfigMap.keyAt(i);
                    final Configuration preTransactionConfig =
                            mContextToPreChangedConfigMap.valueAt(i);
                    final Configuration postTransactionConfig = context.getResources()
                            .getConfiguration();
                    if (!areConfigurationsEqualForDisplay(
                            postTransactionConfig, preTransactionConfig)) {
                        configUpdatedDisplayIds.add(context.getDisplayId());
                    }
                }

                // Dispatch the display changed callbacks.
                final ClientTransactionListenerController controller =
                        ClientTransactionListenerController.getInstance();
            final int displayCount = mConfigUpdatedDisplayIds.size();
                final int displayCount = configUpdatedDisplayIds.size();
                for (int i = 0; i < displayCount; i++) {
                final int displayId = mConfigUpdatedDisplayIds.valueAt(i);
                    final int displayId = configUpdatedDisplayIds.valueAt(i);
                    controller.onDisplayChanged(displayId);
                }
            mConfigUpdatedDisplayIds.clear();
            } finally {
                mContextToPreChangedConfigMap.clear();
            }
        }

        mPendingActions.clear();
@@ -182,26 +205,24 @@ public class TransactionExecutor {
            }
        }

        final boolean shouldTrackConfigUpdatedContext =
                // No configuration change for local transaction.
                !mTransactionHandler.isExecutingLocalTransaction()
                        // Can't read flag from isolated process.
        final boolean isBundleClientTransactionFlagEnabled = !Process.isIsolated()
                        && !Process.isIsolated()
                        && bundleClientTransactionFlag();
        final Context configUpdatedContext = isBundleClientTransactionFlagEnabled
        final Context configUpdatedContext = shouldTrackConfigUpdatedContext
                ? item.getContextToUpdate(mTransactionHandler)
                : null;
        final Configuration preExecutedConfig = configUpdatedContext != null
                ? new Configuration(configUpdatedContext.getResources().getConfiguration())
                : null;
        if (configUpdatedContext != null
                && !mContextToPreChangedConfigMap.containsKey(configUpdatedContext)) {
            // Keep track of the first pre-executed config of each changed Context.
            mContextToPreChangedConfigMap.put(configUpdatedContext,
                    new Configuration(configUpdatedContext.getResources().getConfiguration()));
        }

        item.execute(mTransactionHandler, mPendingActions);

        if (configUpdatedContext != null) {
            final Configuration postExecutedConfig = configUpdatedContext.getResources()
                    .getConfiguration();
            if (!areConfigurationsEqualForDisplay(postExecutedConfig, preExecutedConfig)) {
                mConfigUpdatedDisplayIds.add(configUpdatedContext.getDisplayId());
            }
        }

        item.postExecute(mTransactionHandler, mPendingActions);
        if (r == null) {
            // Launch activity request will create an activity record.
+9 −0
Original line number Diff line number Diff line
@@ -22,7 +22,9 @@ import static java.util.Objects.requireNonNull;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread;
import android.app.ClientTransactionHandler;
import android.content.Context;
import android.os.Parcel;
import android.os.RemoteException;
import android.os.Trace;
@@ -68,6 +70,13 @@ public class WindowStateResizeItem extends ClientTransactionItem {
        Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
    }

    @Nullable
    @Override
    public Context getContextToUpdate(@NonNull ClientTransactionHandler client) {
        // WindowStateResizeItem may update the global config with #mConfiguration.
        return ActivityThread.currentApplication();
    }

    // ObjectPoolItem implementation

    private WindowStateResizeItem() {}
Loading