diff options
| author | 2023-10-03 13:19:17 +0000 | |
|---|---|---|
| committer | 2023-10-03 13:19:17 +0000 | |
| commit | bd33753f8ca84afec595e56c3fc487c8ef4d8b33 (patch) | |
| tree | 994b7a3b7f12a65c0decee7fde51a6c138d87299 | |
| parent | 87dea483ec7db769115cdca4dd9b16f82be7c262 (diff) | |
| parent | 2607cababdb02c9eea4034a9e18c95b3a57b6f25 (diff) | |
Merge "Fix restore orientation for nosensor in folded state" into udc-qpr-dev
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayRotationReversionController.java | 25 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/DisplayRotationReversionControllerTests.java | 76 |
2 files changed, 88 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayRotationReversionController.java b/services/core/java/com/android/server/wm/DisplayRotationReversionController.java index d3a8a82f8f87..c934d14d1e7a 100644 --- a/services/core/java/com/android/server/wm/DisplayRotationReversionController.java +++ b/services/core/java/com/android/server/wm/DisplayRotationReversionController.java @@ -16,17 +16,17 @@ package com.android.server.wm; +import static android.app.WindowConfiguration.ROTATION_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_ORIENTATION; +import static com.android.server.policy.WindowManagerPolicy.USER_ROTATION_LOCKED; import android.annotation.Nullable; -import android.app.WindowConfiguration; import android.content.ActivityInfoProto; import android.view.Surface; import com.android.internal.protolog.common.ProtoLog; -import com.android.server.policy.WindowManagerPolicy; /** * Defines the behavior of reversion from device rotation overrides. @@ -51,9 +51,7 @@ final class DisplayRotationReversionController { private static final int NUM_SLOTS = 3; @Surface.Rotation - private int mUserRotationOverridden = WindowConfiguration.ROTATION_UNDEFINED; - @WindowManagerPolicy.UserRotationMode - private int mUserRotationModeOverridden; + private int mUserRotationOverridden = ROTATION_UNDEFINED; private final boolean[] mSlots = new boolean[NUM_SLOTS]; private final DisplayContent mDisplayContent; @@ -115,10 +113,11 @@ final class DisplayRotationReversionController { return false; } // Only override if the rotation is frozen and there are no other active slots. - if (mDisplayContent.getDisplayRotation().isRotationFrozen()) { - mDisplayContent.getDisplayRotation().setUserRotation( - mUserRotationModeOverridden, - mUserRotationOverridden); + final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation(); + if (mUserRotationOverridden != ROTATION_UNDEFINED + && displayRotation.getUserRotationMode() == USER_ROTATION_LOCKED) { + displayRotation.setUserRotation(USER_ROTATION_LOCKED, mUserRotationOverridden); + mUserRotationOverridden = ROTATION_UNDEFINED; return true; } else { return false; @@ -126,10 +125,10 @@ final class DisplayRotationReversionController { } private void maybeSaveUserRotation() { - if (!isAnyOverrideActive()) { - mUserRotationModeOverridden = - mDisplayContent.getDisplayRotation().getUserRotationMode(); - mUserRotationOverridden = mDisplayContent.getDisplayRotation().getUserRotation(); + final DisplayRotation displayRotation = mDisplayContent.getDisplayRotation(); + if (!isAnyOverrideActive() + && displayRotation.getUserRotationMode() == USER_ROTATION_LOCKED) { + mUserRotationOverridden = displayRotation.getUserRotation(); } } diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationReversionControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationReversionControllerTests.java new file mode 100644 index 000000000000..81471dd91f72 --- /dev/null +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationReversionControllerTests.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.wm; + +import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; +import static com.android.server.policy.WindowManagerPolicy.USER_ROTATION_FREE; +import static com.android.server.policy.WindowManagerPolicy.USER_ROTATION_LOCKED; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; + +import android.platform.test.annotations.Presubmit; + +import androidx.test.filters.SmallTest; + +import org.junit.Before; +import org.junit.Test; + +/** + * Test class for {@link DisplayRotationReversionController}. + * + * Build/Install/Run: + * atest WmTests:DisplayRotationReversionControllerTests + */ +@SmallTest +@Presubmit +public class DisplayRotationReversionControllerTests { + + private DisplayContent mDisplayContent; + + private DisplayRotationReversionController mDisplayRotationReversionController; + + @Before + public void setUp() { + mDisplayContent = mock(DisplayContent.class); + mDisplayRotationReversionController = new DisplayRotationReversionController( + mDisplayContent); + } + + @Test + public void beforeOverrideApplied_useDisplayRotationWhenUserRotationLocked() { + final DisplayRotation displayRotation = mock(DisplayRotation.class); + doReturn(displayRotation).when(mDisplayContent).getDisplayRotation(); + doReturn(USER_ROTATION_LOCKED).when(displayRotation).getUserRotationMode(); + + mDisplayRotationReversionController.beforeOverrideApplied(0); + + verify(displayRotation).getUserRotation(); + } + + @Test + public void beforeOverrideApplied_dontUseDisplayRotationWhenNotUserRotationLocked() { + final DisplayRotation displayRotation = mock(DisplayRotation.class); + doReturn(displayRotation).when(mDisplayContent).getDisplayRotation(); + doReturn(USER_ROTATION_FREE).when(displayRotation).getUserRotationMode(); + + mDisplayRotationReversionController.beforeOverrideApplied(0); + + verify(displayRotation, never()).getUserRotation(); + } +} |