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

Commit c635c722 authored by Massimo Carli's avatar Massimo Carli Committed by Automerger Merge Worker
Browse files

Merge "Fix restore orientation for nosensor in folded state" into udc-qpr-dev am: bd33753f

parents f6ed5785 bd33753f
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -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();
        }
    }

+76 −0
Original line number Diff line number Diff line
/*
 * 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();
    }
}