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

Commit e17d2099 authored by Kazuki Takise's avatar Kazuki Takise Committed by Android (Google) Code Review
Browse files

Merge "Fix crash in WindowDecoration" into main

parents b18f7b89 bce68144
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -59,7 +59,8 @@ class DefaultWindowDecoration(
    displayController,
    taskSurface,
    surfaceControlSupplier,
    taskOrganizer
    taskOrganizer,
    handler,
) {

    /**
+5 −1
Original line number Diff line number Diff line
@@ -736,7 +736,11 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
    private boolean obtainDisplayOrRegisterListener() {
        mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
        if (mDisplay == null) {
            mDisplayController.addDisplayWindowListener(mOnDisplaysChangedListener);
            // Post to the handler to avoid an infinite loop. See b/415631133 for more details.
            // TODO(b/419398609): Remove this whole work around once the root timing issue is
            //  resolved.
            mHandler.post(
                    () -> mDisplayController.addDisplayWindowListener(mOnDisplaysChangedListener));
            return false;
        }
        return true;
+9 −1
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.graphics.Rect
import android.graphics.Region
import android.gui.BorderSettings
import android.gui.BoxShadowSettings
import android.os.Handler
import android.view.Display
import android.view.InsetsSource
import android.view.InsetsState
@@ -45,6 +46,7 @@ import com.android.wm.shell.common.BoxShadowHelper
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.DisplayController.OnDisplaysChangedListener
import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_WINDOW_DECORATION
import com.android.wm.shell.shared.annotations.ShellMainThread
import com.android.wm.shell.windowdecor.additionalviewcontainer.AdditionalViewHostViewContainer
import com.android.wm.shell.windowdecor.caption.CaptionController
import com.android.wm.shell.windowdecor.extension.getDimensionPixelSize
@@ -72,6 +74,7 @@ abstract class WindowDecoration2<T>(
    taskSurface: SurfaceControl,
    surfaceControlSupplier: () -> SurfaceControl,
    private val taskOrganizer: ShellTaskOrganizer,
    @ShellMainThread private val handler: Handler,
    private val surfaceControlBuilderSupplier: () -> SurfaceControl.Builder =
        { SurfaceControl.Builder() },
    private val surfaceControlTransactionSupplier: () -> SurfaceControl.Transaction =
@@ -418,7 +421,12 @@ abstract class WindowDecoration2<T>(
    private fun obtainDisplayOrRegisterListener(): Boolean {
        display = displayController.getDisplay(taskInfo.displayId)
        if (display == null) {
            // Post to the handler to avoid an infinite loop. See b/415631133 for more details.
            // TODO(b/419398609): Remove this whole work around once the root timing issue is
            //  resolved.
            handler.post {
                displayController.addDisplayWindowListener(onDisplaysChangedListener)
            }
            return false
        }
        return true
+4 −4
Original line number Diff line number Diff line
@@ -60,8 +60,8 @@ import android.graphics.Insets;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Handler;
import android.os.LocaleList;
import android.os.Looper;
import android.platform.test.annotations.UsesFlags;
import android.platform.test.flag.junit.FlagsParameterization;
import android.util.DisplayMetrics;
@@ -84,6 +84,7 @@ import androidx.test.filters.SmallTest;
import com.android.window.flags.Flags;
import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestHandler;
import com.android.wm.shell.TestRunningTaskInfoBuilder;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.desktopmode.DesktopModeEventLogger;
@@ -160,8 +161,6 @@ public class WindowDecorationTests extends ShellTestCase {
    @Mock
    private DesktopModeEventLogger mDesktopModeEventLogger;
    @Mock
    private Handler mMockHandler;
    @Mock
    private Transitions mTransitions;

    private final List<SurfaceControl.Transaction> mMockSurfaceControlTransactions =
@@ -173,6 +172,7 @@ public class WindowDecorationTests extends ShellTestCase {
    private SurfaceControl.Transaction mMockSurfaceControlAddWindowT;
    private WindowDecoration.RelayoutParams mRelayoutParams = new WindowDecoration.RelayoutParams();
    private int mCaptionMenuWidthId;
    private final TestHandler mTestHandler = new TestHandler(Looper.getMainLooper());

    public WindowDecorationTests(FlagsParameterization flags) {
        mSetFlagsRule.setFlagsParameterization(flags);
@@ -1305,7 +1305,7 @@ public class WindowDecorationTests extends ShellTestCase {
                @NonNull WindowDecorViewHostSupplier<WindowDecorViewHost>
                        windowDecorViewHostSupplier,
                DesktopModeEventLogger desktopModeEventLogger) {
            super(context, mMockHandler, mTransitions, userContext, displayController,
            super(context, mTestHandler, mTransitions, userContext, displayController,
                    taskOrganizer, taskInfo, taskSurface, surfaceControlBuilderSupplier,
                    surfaceControlTransactionSupplier, windowContainerTransactionSupplier,
                    surfaceControlSupplier, surfaceControlViewHostFactory,