summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2020-09-03 22:34:32 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-09-03 22:34:32 +0000
commit2646d3a226ff9a732aed4b31fd1cbdf485e1aa6a (patch)
tree8c7ce1a9437fb4fa075cb4a188c531d4664de914
parent4738bf0cc86114cb097f0c145d6ea4dc03c55796 (diff)
parent1e00756d34ee04c3640d33e94be70a1ead7eaa47 (diff)
Merge "Add DisplayContent#forceDesktopMode"
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java8
-rw-r--r--services/core/java/com/android/server/wm/DisplayRotation.java4
-rw-r--r--services/core/java/com/android/server/wm/DisplayWindowSettings.java10
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java24
4 files changed, 35 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index aa8069a76330..8ccbd1166a44 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -3488,7 +3488,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
return false;
}
return mWmService.mDisplayWindowSettings.shouldShowImeLocked(this)
- || mWmService.mForceDesktopModeOnExternalDisplays;
+ || forceDesktopMode();
+ }
+
+ boolean forceDesktopMode() {
+ return mWmService.mForceDesktopModeOnExternalDisplays && !isDefaultDisplay && !isPrivate();
}
private void setInputMethodTarget(WindowState target, boolean targetWaitingAnim) {
@@ -4542,7 +4546,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
boolean supportsSystemDecorations() {
return (mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)
|| (mDisplay.getFlags() & FLAG_SHOULD_SHOW_SYSTEM_DECORATIONS) != 0
- || mWmService.mForceDesktopModeOnExternalDisplays)
+ || forceDesktopMode())
// VR virtual display will be used to run and render 2D app within a VR experience.
&& mDisplayId != mWmService.mVr2dDisplayId
// Do not show system decorations on untrusted virtual display.
diff --git a/services/core/java/com/android/server/wm/DisplayRotation.java b/services/core/java/com/android/server/wm/DisplayRotation.java
index 0206787ef226..0f43e49b568b 100644
--- a/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -330,10 +330,8 @@ public class DisplayRotation {
// It's also not likely to rotate a TV screen.
final boolean isTv = mContext.getPackageManager().hasSystemFeature(
PackageManager.FEATURE_LEANBACK);
- final boolean forceDesktopMode =
- mService.mForceDesktopModeOnExternalDisplays && !isDefaultDisplay;
mDefaultFixedToUserRotation =
- (isCar || isTv || mService.mIsPc || forceDesktopMode)
+ (isCar || isTv || mService.mIsPc || mDisplayContent.forceDesktopMode())
// For debug purposes the next line turns this feature off with:
// $ adb shell setprop config.override_forced_orient true
// $ adb shell wm size reset
diff --git a/services/core/java/com/android/server/wm/DisplayWindowSettings.java b/services/core/java/com/android/server/wm/DisplayWindowSettings.java
index df7c07055e87..c8c83a6e34f0 100644
--- a/services/core/java/com/android/server/wm/DisplayWindowSettings.java
+++ b/services/core/java/com/android/server/wm/DisplayWindowSettings.java
@@ -248,7 +248,7 @@ class DisplayWindowSettings {
writeSettingsIfNeeded(entry, displayInfo);
}
- private int getWindowingModeLocked(Entry entry, int displayId) {
+ private int getWindowingModeLocked(Entry entry, DisplayContent dc) {
int windowingMode = entry != null ? entry.mWindowingMode
: WindowConfiguration.WINDOWING_MODE_UNDEFINED;
// This display used to be in freeform, but we don't support freeform anymore, so fall
@@ -259,10 +259,8 @@ class DisplayWindowSettings {
}
// No record is present so use default windowing mode policy.
if (windowingMode == WindowConfiguration.WINDOWING_MODE_UNDEFINED) {
- final boolean forceDesktopMode = mService.mForceDesktopModeOnExternalDisplays
- && displayId != Display.DEFAULT_DISPLAY;
windowingMode = mService.mAtmService.mSupportsFreeformWindowManagement
- && (mService.mIsPc || forceDesktopMode)
+ && (mService.mIsPc || dc.forceDesktopMode())
? WindowConfiguration.WINDOWING_MODE_FREEFORM
: WindowConfiguration.WINDOWING_MODE_FULLSCREEN;
}
@@ -272,7 +270,7 @@ class DisplayWindowSettings {
int getWindowingModeLocked(DisplayContent dc) {
final DisplayInfo displayInfo = dc.getDisplayInfo();
final Entry entry = getEntry(displayInfo);
- return getWindowingModeLocked(entry, dc.getDisplayId());
+ return getWindowingModeLocked(entry, dc);
}
void setWindowingModeLocked(DisplayContent dc, int mode) {
@@ -382,7 +380,7 @@ class DisplayWindowSettings {
final Entry entry = getOrCreateEntry(displayInfo);
// Setting windowing mode first, because it may override overscan values later.
- dc.setWindowingMode(getWindowingModeLocked(entry, dc.getDisplayId()));
+ dc.setWindowingMode(getWindowingModeLocked(entry, dc));
dc.getDisplayRotation().restoreSettings(entry.mUserRotationMode,
entry.mUserRotation, entry.mFixedToUserRotation);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
index f8baf8497069..b496d0b1a646 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java
@@ -28,6 +28,7 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER;
import static android.os.Build.VERSION_CODES.P;
import static android.os.Build.VERSION_CODES.Q;
import static android.view.Display.DEFAULT_DISPLAY;
+import static android.view.Display.FLAG_PRIVATE;
import static android.view.DisplayCutout.BOUNDS_POSITION_LEFT;
import static android.view.DisplayCutout.BOUNDS_POSITION_TOP;
import static android.view.DisplayCutout.fromBoundingRect;
@@ -95,6 +96,7 @@ import android.os.SystemClock;
import android.platform.test.annotations.Presubmit;
import android.util.DisplayMetrics;
import android.view.DisplayCutout;
+import android.view.DisplayInfo;
import android.view.Gravity;
import android.view.IDisplayWindowRotationCallback;
import android.view.IDisplayWindowRotationController;
@@ -1522,6 +1524,28 @@ public class DisplayContentTests extends WindowTestsBase {
dc.setWindowingMode(WINDOWING_MODE_FULLSCREEN);
}
+ @Test
+ public void testForceDesktopMode() {
+ mWm.mForceDesktopModeOnExternalDisplays = true;
+ // Not applicable for default display
+ assertFalse(mDefaultDisplay.forceDesktopMode());
+
+ // Not applicable for private secondary display.
+ final DisplayInfo displayInfo = new DisplayInfo();
+ displayInfo.copyFrom(mDisplayInfo);
+ displayInfo.flags = FLAG_PRIVATE;
+ final DisplayContent privateDc = createNewDisplay(displayInfo);
+ assertFalse(privateDc.forceDesktopMode());
+
+ // Applicable for public secondary display.
+ final DisplayContent publicDc = createNewDisplay();
+ assertTrue(publicDc.forceDesktopMode());
+
+ // Make sure forceDesktopMode() is false when the force config is disabled.
+ mWm.mForceDesktopModeOnExternalDisplays = false;
+ assertFalse(publicDc.forceDesktopMode());
+ }
+
private boolean isOptionsPanelAtRight(int displayId) {
return (mWm.getPreferredOptionsPanelGravity(displayId) & Gravity.RIGHT) == Gravity.RIGHT;
}