diff options
| author | 2020-12-07 17:28:18 -0800 | |
|---|---|---|
| committer | 2020-12-08 01:52:15 +0000 | |
| commit | 10fce9ce7f829cbbcb33d836862e56fc9f449a42 (patch) | |
| tree | 478ec2f58708746a7c8d418de53a7d0195f98f78 | |
| parent | fdd9b804d77de929ad96c1fc9318a2ebfcdb26a5 (diff) | |
Add an option to ignore display cutout in DisplayWindowSettings
This is useful in a case when display size is also overridden to
avoid insets and achieve a more accurate simulation.
Bug: 173543736
Test: Change override DisplayWindowSettings on a device with cutout
Change-Id: Id92bfdcdc6521a0e0399d338dd900e31581ff5c5
3 files changed, 30 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e88f8e390833..296faad64fb3 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -326,6 +326,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp DisplayCutout mInitialDisplayCutout; private final RotationCache<DisplayCutout, WmDisplayCutout> mDisplayCutoutCache = new RotationCache<>(this::calculateDisplayCutoutForRotationUncached); + boolean mIgnoreDisplayCutout; /** * Overridden display size. Initialized with {@link #mInitialDisplayWidth} @@ -2459,7 +2460,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int newWidth = rotated ? mDisplayInfo.logicalHeight : mDisplayInfo.logicalWidth; final int newHeight = rotated ? mDisplayInfo.logicalWidth : mDisplayInfo.logicalHeight; final int newDensity = mDisplayInfo.logicalDensityDpi; - final DisplayCutout newCutout = mDisplayInfo.displayCutout; + final DisplayCutout newCutout = mIgnoreDisplayCutout + ? DisplayCutout.NO_CUTOUT : mDisplayInfo.displayCutout; final String newUniqueId = mDisplayInfo.uniqueId; final boolean displayMetricsChanged = mInitialDisplayWidth != newWidth diff --git a/services/core/java/com/android/server/wm/DisplayWindowSettings.java b/services/core/java/com/android/server/wm/DisplayWindowSettings.java index 5d4dbc8388c4..b82fdd237f2b 100644 --- a/services/core/java/com/android/server/wm/DisplayWindowSettings.java +++ b/services/core/java/com/android/server/wm/DisplayWindowSettings.java @@ -261,6 +261,10 @@ class DisplayWindowSettings { ? settings.mIgnoreOrientationRequest : false; dc.setIgnoreOrientationRequest(ignoreOrientationRequest); + final boolean ignoreDisplayCutout = settings.mIgnoreDisplayCutout != null + ? settings.mIgnoreDisplayCutout : false; + dc.mIgnoreDisplayCutout = ignoreDisplayCutout; + final int width = hasSizeOverride ? settings.mForcedWidth : dc.mInitialDisplayWidth; final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight; final int density = hasDensityOverride ? settings.mForcedDensity @@ -352,6 +356,8 @@ class DisplayWindowSettings { Integer mFixedToUserRotation; @Nullable Boolean mIgnoreOrientationRequest; + @Nullable + Boolean mIgnoreDisplayCutout; SettingsEntry() {} @@ -422,6 +428,10 @@ class DisplayWindowSettings { mIgnoreOrientationRequest = other.mIgnoreOrientationRequest; changed = true; } + if (other.mIgnoreDisplayCutout != mIgnoreDisplayCutout) { + mIgnoreDisplayCutout = other.mIgnoreDisplayCutout; + changed = true; + } return changed; } @@ -500,6 +510,11 @@ class DisplayWindowSettings { mIgnoreOrientationRequest = delta.mIgnoreOrientationRequest; changed = true; } + if (delta.mIgnoreDisplayCutout != null + && delta.mIgnoreDisplayCutout != mIgnoreDisplayCutout) { + mIgnoreDisplayCutout = delta.mIgnoreDisplayCutout; + changed = true; + } return changed; } @@ -515,7 +530,8 @@ class DisplayWindowSettings { && mShouldShowSystemDecors == null && mImePolicy == null && mFixedToUserRotation == null - && mIgnoreOrientationRequest == null; + && mIgnoreOrientationRequest == null + && mIgnoreDisplayCutout == null; } @Override @@ -536,8 +552,8 @@ class DisplayWindowSettings { && Objects.equals(mShouldShowSystemDecors, that.mShouldShowSystemDecors) && Objects.equals(mImePolicy, that.mImePolicy) && Objects.equals(mFixedToUserRotation, that.mFixedToUserRotation) - && Objects.equals(mIgnoreOrientationRequest, - that.mIgnoreOrientationRequest); + && Objects.equals(mIgnoreOrientationRequest, that.mIgnoreOrientationRequest) + && Objects.equals(mIgnoreDisplayCutout, that.mIgnoreDisplayCutout); } @Override @@ -545,7 +561,7 @@ class DisplayWindowSettings { return Objects.hash(mWindowingMode, mUserRotationMode, mUserRotation, mForcedWidth, mForcedHeight, mForcedDensity, mForcedScalingMode, mRemoveContentMode, mShouldShowWithInsecureKeyguard, mShouldShowSystemDecors, mImePolicy, - mFixedToUserRotation, mIgnoreOrientationRequest); + mFixedToUserRotation, mIgnoreOrientationRequest, mIgnoreDisplayCutout); } @Override @@ -564,6 +580,7 @@ class DisplayWindowSettings { + ", mShouldShowIme=" + mImePolicy + ", mFixedToUserRotation=" + mFixedToUserRotation + ", mIgnoreOrientationRequest=" + mIgnoreOrientationRequest + + ", mIgnoreDisplayCutout=" + mIgnoreDisplayCutout + '}'; } } diff --git a/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java b/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java index 57c947f572d9..5f3ab43eca7c 100644 --- a/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java +++ b/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java @@ -403,6 +403,8 @@ class DisplayWindowSettingsProvider implements SettingsProvider { null /* defaultValue */); settingsEntry.mIgnoreOrientationRequest = getBooleanAttribute(parser, "ignoreOrientationRequest", null /* defaultValue */); + settingsEntry.mIgnoreDisplayCutout = getBooleanAttribute(parser, + "ignoreDisplayCutout", null /* defaultValue */); fileData.mSettings.put(name, settingsEntry); } XmlUtils.skipCurrentTag(parser); @@ -490,6 +492,10 @@ class DisplayWindowSettingsProvider implements SettingsProvider { out.attributeBoolean(null, "ignoreOrientationRequest", settingsEntry.mIgnoreOrientationRequest); } + if (settingsEntry.mIgnoreDisplayCutout != null) { + out.attributeBoolean(null, "ignoreDisplayCutout", + settingsEntry.mIgnoreDisplayCutout); + } out.endTag(null, "display"); } |