Merge "Load rotation settings when creating a display"
This commit is contained in:
committed by
Android (Google) Code Review
commit
0bfa0fa98c
@@ -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.
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user