Merge "Landscape mode for gestural nav"
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
index 6edb88e..e2c8d8a 100644
--- a/core/res/res/values-sw600dp/config.xml
+++ b/core/res/res/values-sw600dp/config.xml
@@ -51,5 +51,9 @@
4 - Snap to the long edges in each orientation and magnet to corners
-->
<integer name="config_pictureInPictureSnapMode">3</integer>
+
+ <!-- Controls whether the nav bar can move from the bottom to the side in landscape.
+ Only applies if the device display is not square. -->
+ <bool name="config_navBarCanMove">false</bool>
</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 05b5389..41d9dbc 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3237,6 +3237,10 @@
2: gestures only for back, home and overview -->
<integer name="config_navBarInteractionMode">0</integer>
+ <!-- Controls whether the nav bar can move from the bottom to the side in landscape.
+ Only applies if the device display is not square. -->
+ <bool name="config_navBarCanMove">true</bool>
+
<!-- Default insets [LEFT/RIGHTxTOP/BOTTOM] from the screen edge for picture-in-picture windows.
These values are in DPs and will be converted to pixel sizes internally. -->
<string translatable="false" name="config_defaultPictureInPictureScreenEdgeInsets">16x16</string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index f72004b..7a473d2 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2838,6 +2838,7 @@
<java-symbol type="bool" name="config_forceWindowDrawsStatusBarBackground" />
<java-symbol type="integer" name="config_navBarOpacityMode" />
<java-symbol type="integer" name="config_navBarInteractionMode" />
+ <java-symbol type="bool" name="config_navBarCanMove" />
<java-symbol type="color" name="system_bar_background_semi_transparent" />
<!-- EditText suggestion popup. -->
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index bfbe886..f2d6241 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -1195,7 +1195,8 @@
if (DEBUG) Log.d(TAG, String.format(
"onMeasure: (%dx%d) old: (%dx%d)", w, h, getMeasuredWidth(), getMeasuredHeight()));
- final boolean newVertical = w > 0 && h > w;
+ final boolean newVertical = w > 0 && h > w
+ && !QuickStepContract.isGesturalMode(getContext());
if (newVertical != mIsVertical) {
mIsVertical = newVertical;
if (DEBUG) {
diff --git a/packages/overlays/NavigationBarModeGesturalOverlay/res/values/config.xml b/packages/overlays/NavigationBarModeGesturalOverlay/res/values/config.xml
index 48c3769..545a3cc 100644
--- a/packages/overlays/NavigationBarModeGesturalOverlay/res/values/config.xml
+++ b/packages/overlays/NavigationBarModeGesturalOverlay/res/values/config.xml
@@ -22,4 +22,8 @@
1: 2 button mode (back, home buttons + swipe up for overview)
2: gestures only for back, home and overview -->
<integer name="config_navBarInteractionMode">2</integer>
+
+ <!-- Controls whether the nav bar can move from the bottom to the side in landscape.
+ Only applies if the device display is not square. -->
+ <bool name="config_navBarCanMove">false</bool>
</resources>
\ No newline at end of file
diff --git a/packages/overlays/NavigationBarModeGesturalOverlay/res/values/dimens.xml b/packages/overlays/NavigationBarModeGesturalOverlay/res/values/dimens.xml
index 721d11b..c839b2c 100644
--- a/packages/overlays/NavigationBarModeGesturalOverlay/res/values/dimens.xml
+++ b/packages/overlays/NavigationBarModeGesturalOverlay/res/values/dimens.xml
@@ -19,6 +19,8 @@
<resources>
<!-- Height of the bottom navigation / system bar. -->
<dimen name="navigation_bar_height">16dp</dimen>
+ <!-- Height of the bottom navigation bar in portrait; often the same as @dimen/navigation_bar_height -->
+ <dimen name="navigation_bar_height_landscape">16dp</dimen>
<!-- Width of the navigation bar when it is placed vertically on the screen -->
<dimen name="navigation_bar_width">16dp</dimen>
<!-- Height of the bottom navigation / system bar. -->
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index bec72f5..0c34e25 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -1525,7 +1525,7 @@
final int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / mBaseDisplayDensity;
final int longSizeDp = longSize * DisplayMetrics.DENSITY_DEFAULT / mBaseDisplayDensity;
- mDisplayPolicy.configure(width, height, shortSizeDp);
+ mDisplayPolicy.updateConfigurationAndScreenSizeDependentBehaviors();
mDisplayRotation.configure(width, height, shortSizeDp, longSizeDp);
mDisplayFrames.onDisplayInfoUpdated(mDisplayInfo,
@@ -1734,7 +1734,7 @@
mWmService.mH.sendEmptyMessage(REPORT_HARD_KEYBOARD_STATUS_CHANGE);
}
- mDisplayPolicy.updateConfigurationDependentBehaviors();
+ mDisplayPolicy.updateConfigurationAndScreenSizeDependentBehaviors();
// Let the policy update hidden states.
config.keyboardHidden = Configuration.KEYBOARDHIDDEN_NO;
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 6605f3c6..5d38a69 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -415,7 +415,6 @@
mDeskDockEnablesAccelerometer = r.getBoolean(R.bool.config_deskDockEnablesAccelerometer);
mTranslucentDecorEnabled = r.getBoolean(R.bool.config_enableTranslucentDecor);
mForceShowSystemBarsFromExternal = r.getBoolean(R.bool.config_forceShowSystemBars);
- updateConfigurationDependentBehaviors();
mAccessibilityManager = (AccessibilityManager) mContext.getSystemService(
Context.ACCESSIBILITY_SERVICE);
@@ -567,15 +566,6 @@
return mDisplayContent.getDisplayId();
}
- void configure(int width, int height, int shortSizeDp) {
- // Allow the navigation bar to move on non-square small devices (phones).
- mNavigationBarCanMove = width != height && shortSizeDp < 600;
- }
-
- void updateConfigurationDependentBehaviors() {
- mNavBarOpacityMode = mContext.getResources().getInteger(R.integer.config_navBarOpacityMode);
- }
-
public void setHdmiPlugged(boolean plugged) {
setHdmiPlugged(plugged, false /* force */);
}
@@ -2602,9 +2592,21 @@
res.getDimensionPixelSize(R.dimen.navigation_bar_width_car_mode);
}
+ mNavBarOpacityMode = res.getInteger(R.integer.config_navBarOpacityMode);
+
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
mExperiments.onConfigurationChanged(uiContext);
// EXPERIMENT END
+
+ updateConfigurationAndScreenSizeDependentBehaviors();
+ }
+
+ void updateConfigurationAndScreenSizeDependentBehaviors() {
+ final Context uiContext = getSystemUiContext();
+ final Resources res = uiContext.getResources();
+ mNavigationBarCanMove =
+ mDisplayContent.mBaseDisplayWidth != mDisplayContent.mBaseDisplayHeight
+ && res.getBoolean(R.bool.config_navBarCanMove);
}
@VisibleForTesting
@@ -3411,6 +3413,10 @@
}
if (mNavigationBar != null) {
pw.print(prefix); pw.print("mNavigationBar="); pw.println(mNavigationBar);
+ pw.print(prefix); pw.print("mNavBarOpacityMode="); pw.println(mNavBarOpacityMode);
+ pw.print(prefix); pw.print("mNavigationBarCanMove="); pw.println(mNavigationBarCanMove);
+ pw.print(prefix); pw.print("mNavigationBarPosition=");
+ pw.println(mNavigationBarPosition);
}
if (mFocusedWindow != null) {
pw.print(prefix); pw.print("mFocusedWindow="); pw.println(mFocusedWindow);
diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java
index 85b2f7b..2ab48a9 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DisplayPolicyTestsBase.java
@@ -86,7 +86,6 @@
Math.min(DISPLAY_WIDTH, DISPLAY_HEIGHT) * DENSITY_DEFAULT / DISPLAY_DENSITY;
mDisplayContent.getDisplayRotation().configure(
DISPLAY_WIDTH, DISPLAY_HEIGHT, shortSizeDp, longSizeDp);
- mDisplayPolicy.configure(DISPLAY_WIDTH, DISPLAY_HEIGHT, shortSizeDp);
mDisplayPolicy.onConfigurationChanged();
mStatusBarWindow.mAttrs.gravity = Gravity.TOP;