Merge "Load rotation settings when creating a display"

This commit is contained in:
Nick Chameyev
2022-01-14 10:29:34 +00:00
committed by Android (Google) Code Review
5 changed files with 53 additions and 7 deletions

View File

@@ -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.

View File

@@ -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) {

View File

@@ -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<>();

View File

@@ -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);

View File

@@ -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() {