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

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

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

parents d0437491 579d9cd8
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -496,15 +496,15 @@ package android.app {
    method public int compareTo(android.app.WindowConfiguration);
    method public int describeContents();
    method public int getActivityType();
    method public android.graphics.Rect getAppBounds();
    method public android.graphics.Rect getBounds();
    method @Nullable public android.graphics.Rect getAppBounds();
    method @NonNull public android.graphics.Rect getBounds();
    method @NonNull public android.graphics.Rect getMaxBounds();
    method public int getRotation();
    method public int getWindowingMode();
    method public static boolean isFloating(int);
    method public void setActivityType(int);
    method public void setAppBounds(android.graphics.Rect);
    method public void setBounds(android.graphics.Rect);
    method public void setAppBounds(@Nullable android.graphics.Rect);
    method public void setBounds(@Nullable android.graphics.Rect);
    method public void setMaxBounds(@Nullable android.graphics.Rect);
    method public void setRotation(int);
    method public void setTo(android.app.WindowConfiguration);
+6 −0
Original line number Diff line number Diff line
@@ -3580,6 +3580,12 @@ public final class ActivityThread extends ClientTransactionHandler
        return mActivities.get(token);
    }

    @Nullable
    @Override
    public Context getWindowContext(@NonNull IBinder clientToken) {
        return WindowTokenClientController.getInstance().getWindowContext(clientToken);
    }

    @VisibleForTesting(visibility = PACKAGE)
    public Configuration getConfiguration() {
        return mConfigurationController.getConfiguration();
+7 −0
Original line number Diff line number Diff line
@@ -16,11 +16,13 @@
package android.app;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityThread.ActivityClientRecord;
import android.app.servertransaction.ClientTransaction;
import android.app.servertransaction.ClientTransactionItem;
import android.app.servertransaction.PendingTransactionActions;
import android.app.servertransaction.TransactionExecutor;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
@@ -28,6 +30,7 @@ import android.os.IBinder;
import android.util.MergedConfiguration;
import android.view.SurfaceControl;
import android.window.SplashScreenView.SplashScreenViewParcelable;
import android.window.WindowContext;
import android.window.WindowContextInfo;

import com.android.internal.annotations.VisibleForTesting;
@@ -85,6 +88,10 @@ public abstract class ClientTransactionHandler {
    /** Get activity instance for the token. */
    public abstract Activity getActivity(IBinder token);

    /** Gets the {@link WindowContext} instance for the token. */
    @Nullable
    public abstract Context getWindowContext(@NonNull IBinder clientToken);

    // Prepare phase related logic and handlers. Methods that inform about about pending changes or
    // do other internal bookkeeping.

+23 −2
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.Parcelable;
import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoOutputStream;
import android.util.proto.WireTypeMismatchException;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
import android.view.WindowManager;
@@ -66,6 +67,7 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
     * the display level. Lower levels can override these values to provide custom bounds to enforce
     * features such as a max aspect ratio.
     */
    @Nullable
    private Rect mAppBounds;

    /**
@@ -269,7 +271,7 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
     * Sets the bounds to the provided {@link Rect}.
     * @param rect the new bounds value.
     */
    public void setBounds(Rect rect) {
    public void setBounds(@Nullable Rect rect) {
        if (rect == null) {
            mBounds.setEmpty();
            return;
@@ -283,7 +285,7 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
     * @param rect The rect value to set {@link #mAppBounds} to.
     * @see #getAppBounds()
     */
    public void setAppBounds(Rect rect) {
    public void setAppBounds(@Nullable Rect rect) {
        if (rect == null) {
            mAppBounds = null;
            return;
@@ -356,11 +358,13 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
    }

    /** @see #setAppBounds(Rect) */
    @Nullable
    public Rect getAppBounds() {
        return mAppBounds;
    }

    /** @see #setBounds(Rect) */
    @NonNull
    public Rect getBounds() {
        return mBounds;
    }
@@ -905,6 +909,23 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu
        return activityType != ACTIVITY_TYPE_ASSISTANT && activityType != ACTIVITY_TYPE_DREAM;
    }

    /**
     * Checks if the two {@link Configuration}s are equal to each other for the fields that are read
     * by {@link Display}.
     * @hide
     */
    public static boolean areConfigurationsEqualForDisplay(@NonNull Configuration newConfig,
            @NonNull Configuration oldConfig) {
        // Only report different if max bounds and display rotation is changed, so that it will not
        // report on Task resizing.
        if (!newConfig.windowConfiguration.getMaxBounds().equals(
                oldConfig.windowConfiguration.getMaxBounds())) {
            return false;
        }
        return newConfig.windowConfiguration.getDisplayRotation()
                == oldConfig.windowConfiguration.getDisplayRotation();
    }

    /** @hide */
    public static String windowingModeToString(@WindowingMode int windowingMode) {
        switch (windowingMode) {
+11 −3
Original line number Diff line number Diff line
@@ -23,6 +23,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;
@@ -40,7 +41,7 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    private Configuration mConfiguration;

    @Override
    public void preExecute(android.app.ClientTransactionHandler client, IBinder token) {
    public void preExecute(@NonNull ClientTransactionHandler client, @Nullable IBinder token) {
        CompatibilityInfo.applyOverrideScaleIfNeeded(mConfiguration);
        // Notify the client of an upcoming change in the token configuration. This ensures that
        // batches of config change items only process the newest configuration.
@@ -48,14 +49,21 @@ public class ActivityConfigurationChangeItem extends ActivityTransactionItem {
    }

    @Override
    public void execute(ClientTransactionHandler client, ActivityClientRecord r,
            PendingTransactionActions pendingActions) {
    public void execute(@NonNull ClientTransactionHandler client, @Nullable 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);
        Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
    }

    @Nullable
    @Override
    public Context getContextToUpdate(@NonNull ClientTransactionHandler client,
            @Nullable IBinder token) {
        // TODO(b/260873529): Update ClientTransaction to bundle multiple activity config updates.
        return client.getActivity(token);
    }

    // ObjectPoolItem implementation

Loading