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

Commit 0bfa0fa9 authored by Nick Chameyev's avatar Nick Chameyev Committed by Android (Google) Code Review
Browse files

Merge "Load rotation settings when creating a display"

parents ed43a6a1 876e7794
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2781,7 +2781,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        if (displayMetricsChanged || physicalDisplayChanged) {
            if (physicalDisplayChanged) {
                // Reapply the window settings as the underlying physical display has changed.
                mWmService.mDisplayWindowSettings.applySettingsToDisplayLocked(this);
                // Do not include rotation settings here, postpone them until the display
                // metrics are updated as rotation settings might depend on them
                mWmService.mDisplayWindowSettings.applySettingsToDisplayLocked(this,
                        /* includeRotationSettings */ false);
            }

            // If there is an override set for base values - use it, otherwise use new values.
+6 −0
Original line number Diff line number Diff line
@@ -244,6 +244,10 @@ class DisplayWindowSettings {
    }

    void applySettingsToDisplayLocked(DisplayContent dc) {
        applySettingsToDisplayLocked(dc, /* includeRotationSettings */ true);
    }

    void applySettingsToDisplayLocked(DisplayContent dc, boolean includeRotationSettings) {
        final DisplayInfo displayInfo = dc.getDisplayInfo();
        final SettingsProvider.SettingsEntry settings = mSettingsProvider.getSettings(displayInfo);

@@ -282,6 +286,8 @@ class DisplayWindowSettings {
        boolean dontMoveToTop = settings.mDontMoveToTop != null
                ? settings.mDontMoveToTop : false;
        dc.mDontMoveToTop = dontMoveToTop;

        if (includeRotationSettings) applyRotationSettingsToDisplayLocked(dc);
    }

    void applyRotationSettingsToDisplayLocked(DisplayContent dc) {
+16 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import androidx.test.filters.SmallTest;

import com.android.server.LocalServices;
import com.android.server.policy.WindowManagerPolicy;
import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry;

import org.junit.Before;
import org.junit.Test;
@@ -447,6 +448,21 @@ public class DisplayWindowSettingsTests extends WindowTestsBase {
        assertEquals(456, config.densityDpi);
    }

    @Test
    public void testDisplayRotationSettingsAppliedOnCreation() {
        // Create new displays with different rotation settings
        final SettingsEntry settingsEntry1 = new SettingsEntry();
        settingsEntry1.mIgnoreOrientationRequest = false;
        final DisplayContent dcDontIgnoreOrientation = createMockSimulatedDisplay(settingsEntry1);
        final SettingsEntry settingsEntry2 = new SettingsEntry();
        settingsEntry2.mIgnoreOrientationRequest = true;
        final DisplayContent dcIgnoreOrientation = createMockSimulatedDisplay(settingsEntry2);

        // Verify that newly created displays are created with correct rotation settings
        assertFalse(dcDontIgnoreOrientation.getIgnoreOrientationRequest());
        assertTrue(dcIgnoreOrientation.getIgnoreOrientationRequest());
    }

    public final class TestSettingsProvider implements DisplayWindowSettings.SettingsProvider {
        Map<DisplayInfo, SettingsEntry> mOverrideSettingsCache = new HashMap<>();

+13 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;

import static org.mockito.ArgumentMatchers.any;

import android.annotation.Nullable;
import android.content.res.Configuration;
import android.graphics.Insets;
import android.graphics.Rect;
@@ -38,6 +39,8 @@ import android.view.Display;
import android.view.DisplayCutout;
import android.view.DisplayInfo;

import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry;

class TestDisplayContent extends DisplayContent {

    public static final int DEFAULT_LOGICAL_DISPLAY_DENSITY = 300;
@@ -81,6 +84,7 @@ class TestDisplayContent extends DisplayContent {
        protected final ActivityTaskManagerService mService;
        private boolean mSystemDecorations = false;
        private int mStatusBarHeight = 0;
        private SettingsEntry mOverrideSettings;

        Builder(ActivityTaskManagerService service, int width, int height) {
            mService = service;
@@ -104,6 +108,10 @@ class TestDisplayContent extends DisplayContent {
        private String generateUniqueId() {
            return "TEST_DISPLAY_CONTENT_" + System.currentTimeMillis();
        }
        Builder setOverrideSettings(@Nullable SettingsEntry overrideSettings) {
            mOverrideSettings = overrideSettings;
            return this;
        }
        Builder setSystemDecorations(boolean yes) {
            mSystemDecorations = yes;
            return this;
@@ -151,6 +159,11 @@ class TestDisplayContent extends DisplayContent {
        TestDisplayContent build() {
            SystemServicesTestRule.checkHoldsLock(mService.mGlobalLock);

            if (mOverrideSettings != null) {
                mService.mWindowManager.mDisplayWindowSettingsProvider
                        .updateOverrideSettings(mInfo, mOverrideSettings);
            }

            final int displayId = SystemServicesTestRule.sNextDisplayId++;
            final Display display = new Display(DisplayManagerGlobal.getInstance(), displayId,
                    mInfo, DEFAULT_DISPLAY_ADJUSTMENTS);
+14 −6
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ import android.window.TransitionRequestInfo;

import com.android.internal.policy.AttributeCache;
import com.android.internal.util.ArrayUtils;
import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry;

import org.junit.After;
import org.junit.Before;
@@ -720,18 +721,21 @@ class WindowTestsBase extends SystemServiceTestsBase {

    /** Creates a {@link DisplayContent} and adds it to the system. */
    private DisplayContent createNewDisplayWithImeSupport(@DisplayImePolicy int imePolicy) {
        return createNewDisplay(mDisplayInfo, imePolicy);
        return createNewDisplay(mDisplayInfo, imePolicy, /* overrideSettings */ null);
    }

    /** Creates a {@link DisplayContent} that supports IME and adds it to the system. */
    DisplayContent createNewDisplay(DisplayInfo info) {
        return createNewDisplay(info, DISPLAY_IME_POLICY_LOCAL);
        return createNewDisplay(info, DISPLAY_IME_POLICY_LOCAL, /* overrideSettings */ null);
    }

    /** Creates a {@link DisplayContent} and adds it to the system. */
    private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy) {
    private DisplayContent createNewDisplay(DisplayInfo info, @DisplayImePolicy int imePolicy,
            @Nullable SettingsEntry overrideSettings) {
        final DisplayContent display =
                new TestDisplayContent.Builder(mAtm, info).build();
                new TestDisplayContent.Builder(mAtm, info)
                        .setOverrideSettings(overrideSettings)
                        .build();
        final DisplayContent dc = display.mDisplayContent;
        // this display can show IME.
        dc.mWmService.mDisplayWindowSettings.setDisplayImePolicy(dc, imePolicy);
@@ -749,7 +753,7 @@ class WindowTestsBase extends SystemServiceTestsBase {
        DisplayInfo displayInfo = new DisplayInfo();
        displayInfo.copyFrom(mDisplayInfo);
        displayInfo.state = displayState;
        return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_LOCAL);
        return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_LOCAL, /* overrideSettings */ null);
    }

    /** Creates a {@link TestWindowState} */
@@ -761,11 +765,15 @@ class WindowTestsBase extends SystemServiceTestsBase {

    /** Creates a {@link DisplayContent} as parts of simulate display info for test. */
    DisplayContent createMockSimulatedDisplay() {
        return createMockSimulatedDisplay(/* overrideSettings */ null);
    }

    DisplayContent createMockSimulatedDisplay(@Nullable SettingsEntry overrideSettings) {
        DisplayInfo displayInfo = new DisplayInfo();
        displayInfo.copyFrom(mDisplayInfo);
        displayInfo.type = Display.TYPE_VIRTUAL;
        displayInfo.ownerUid = SYSTEM_UID;
        return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY);
        return createNewDisplay(displayInfo, DISPLAY_IME_POLICY_FALLBACK_DISPLAY, overrideSettings);
    }

    IDisplayWindowInsetsController createDisplayWindowInsetsController() {