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

Commit 91e2d04e authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Fix cutout disappeared when rotation" into rvc-dev am: e441e74f

Change-Id: I8db75c9e926dce508470ed8fd9403e9c749d070a
parents 126a4cf7 e441e74f
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -2610,7 +2610,8 @@ public class WindowManagerService extends IWindowManager.Stub
                if (type == TYPE_WALLPAPER) {
                if (type == TYPE_WALLPAPER) {
                    new WallpaperWindowToken(this, binder, true, dc, callerCanManageAppTokens);
                    new WallpaperWindowToken(this, binder, true, dc, callerCanManageAppTokens);
                } else {
                } else {
                    new WindowToken(this, binder, type, true, dc, callerCanManageAppTokens);
                    new WindowToken(this, binder, type, true, dc, callerCanManageAppTokens,
                            false /* roundedCornerOverlay */, fromClientToken);
                }
                }
            }
            }
        } finally {
        } finally {
+6 −4
Original line number Original line Diff line number Diff line
@@ -50,6 +50,7 @@ import android.view.InsetsState;
import android.view.SurfaceControl;
import android.view.SurfaceControl;
import android.view.WindowManager;
import android.view.WindowManager;


import com.android.internal.annotations.VisibleForTesting;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.protolog.common.ProtoLog;
import com.android.server.protolog.common.ProtoLog;


@@ -99,7 +100,8 @@ class WindowToken extends WindowContainer<WindowState> {
    private Configuration mLastReportedConfig;
    private Configuration mLastReportedConfig;
    private int mLastReportedDisplay = INVALID_DISPLAY;
    private int mLastReportedDisplay = INVALID_DISPLAY;


    private final boolean mFromClientToken;
    @VisibleForTesting
    final boolean mFromClientToken;


    /**
    /**
     * Used to fix the transform of the token to be rotated to a rotation different than it's
     * Used to fix the transform of the token to be rotated to a rotation different than it's
@@ -180,13 +182,13 @@ class WindowToken extends WindowContainer<WindowState> {
    WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty,
    WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty,
            DisplayContent dc, boolean ownerCanManageAppTokens) {
            DisplayContent dc, boolean ownerCanManageAppTokens) {
        this(service, _token, type, persistOnEmpty, dc, ownerCanManageAppTokens,
        this(service, _token, type, persistOnEmpty, dc, ownerCanManageAppTokens,
                false /* roundedCornersOverlay */);
                false /* roundedCornerOverlay */);
    }
    }


    WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty,
    WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty,
            DisplayContent dc, boolean ownerCanManageAppTokens, boolean fromClientToken) {
            DisplayContent dc, boolean ownerCanManageAppTokens, boolean roundedCornerOverlay) {
        this(service, _token, type, persistOnEmpty, dc, ownerCanManageAppTokens,
        this(service, _token, type, persistOnEmpty, dc, ownerCanManageAppTokens,
                false /* roundedCornersOverlay */, fromClientToken);
                roundedCornerOverlay, false /* fromClientToken */);
    }
    }


    WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty,
    WindowToken(WindowManagerService service, IBinder _token, int type, boolean persistOnEmpty,
+28 −0
Original line number Original line Diff line number Diff line
@@ -16,9 +16,16 @@


package com.android.server.wm;
package com.android.server.wm;


import static android.view.WindowManager.LayoutParams.TYPE_TOAST;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;


import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;

import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.os.IBinder;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
@@ -57,4 +64,25 @@ public class WindowManagerServiceTests extends WindowTestsBase {
        return getInstrumentation().getTargetContext().getPackageManager().hasSystemFeature(
        return getInstrumentation().getTargetContext().getPackageManager().hasSystemFeature(
                PackageManager.FEATURE_AUTOMOTIVE);
                PackageManager.FEATURE_AUTOMOTIVE);
    }
    }

    @Test
    public void testAddWindowToken() {
        IBinder token = mock(IBinder.class);
        mWm.addWindowToken(token, TYPE_TOAST, mDisplayContent.getDisplayId());

        WindowToken windowToken = mWm.mRoot.getWindowToken(token);
        assertFalse(windowToken.mRoundedCornerOverlay);
        assertFalse(windowToken.mFromClientToken);
    }

    @Test
    public void testAddWindowTokenWithOptions() {
        IBinder token = mock(IBinder.class);
        mWm.addWindowTokenWithOptions(token, TYPE_TOAST, mDisplayContent.getDisplayId(),
                null /* options */, null /* options */);

        WindowToken windowToken = mWm.mRoot.getWindowToken(token);
        assertFalse(windowToken.mRoundedCornerOverlay);
        assertTrue(windowToken.mFromClientToken);
    }
}
}
+26 −0
Original line number Original line Diff line number Diff line
@@ -25,7 +25,9 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;


import android.os.IBinder;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;


import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
@@ -129,4 +131,28 @@ public class WindowTokenTests extends WindowTestsBase {
        // Verify that the token windows are no longer attached to it.
        // Verify that the token windows are no longer attached to it.
        assertEquals(0, token.getWindowsCount());
        assertEquals(0, token.getWindowsCount());
    }
    }

    /**
     * Test that {@link WindowToken} constructor parameters is set with expectation.
     */
    @Test
    public void testWindowTokenConstructorSanity() {
        WindowToken token = new WindowToken(mDisplayContent.mWmService, mock(IBinder.class),
                TYPE_TOAST, true /* persistOnEmpty */, mDisplayContent,
                true /* ownerCanManageAppTokens */);
        assertFalse(token.mRoundedCornerOverlay);
        assertFalse(token.mFromClientToken);

        token = new WindowToken(mDisplayContent.mWmService, mock(IBinder.class), TYPE_TOAST,
                true /* persistOnEmpty */, mDisplayContent, true /* ownerCanManageAppTokens */,
                true /* roundedCornerOverlay */);
        assertTrue(token.mRoundedCornerOverlay);
        assertFalse(token.mFromClientToken);

        token = new WindowToken(mDisplayContent.mWmService, mock(IBinder.class), TYPE_TOAST,
                true /* persistOnEmpty */, mDisplayContent, true /* ownerCanManageAppTokens */,
                true /* roundedCornerOverlay */, true /* fromClientToken */);
        assertTrue(token.mRoundedCornerOverlay);
        assertTrue(token.mFromClientToken);
    }
}
}