Merge "Removed the experimental code for gestural mode" into qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
04f13b4288
@@ -51,18 +51,23 @@
|
||||
that just start below the notch. -->
|
||||
<dimen name="display_cutout_touchable_region_size">12dp</dimen>
|
||||
|
||||
<!-- EXPERIMENT BEGIN -->
|
||||
<!-- Height of the bottom navigation bar frame; this is different than navigation_bar_height
|
||||
where that is the height reported to all the other windows to resize themselves around the
|
||||
navigation bar window but navigation_bar_frame_height is reported to SystemUI navigation
|
||||
bar view's window -->
|
||||
<dimen name="navigation_bar_frame_height">@dimen/navigation_bar_height</dimen>
|
||||
<!-- Height of the bottom navigation bar frame in landscape -->
|
||||
<dimen name="navigation_bar_frame_height_landscape">@dimen/navigation_bar_frame_height</dimen>
|
||||
<!-- Width of the left/right navigation bar frame; this is different than navigation_bar_width
|
||||
where that is the width reported to all the other windows to resize themselves around the
|
||||
navigation bar window but navigation_bar_frame_width is reported to SystemUI navigation
|
||||
bar view's window -->
|
||||
<dimen name="navigation_bar_frame_width">@dimen/navigation_bar_width</dimen>
|
||||
<!-- EXPERIMENT END-->
|
||||
|
||||
<!-- The height of the navigation gesture area; if the size is larger than the navigation bar
|
||||
frame width/height, then the difference is the spacing from the navigation bar window to
|
||||
the area that detects gestures. -->
|
||||
<dimen name="navigation_bar_gesture_height">@dimen/navigation_bar_frame_height</dimen>
|
||||
|
||||
<!-- Height of the bottom navigation / system bar in car mode. -->
|
||||
<dimen name="navigation_bar_height_car_mode">96dp</dimen>
|
||||
|
||||
@@ -1747,6 +1747,8 @@
|
||||
<java-symbol type="dimen" name="navigation_bar_height_landscape" />
|
||||
<java-symbol type="dimen" name="navigation_bar_width" />
|
||||
<java-symbol type="dimen" name="navigation_bar_frame_height" />
|
||||
<java-symbol type="dimen" name="navigation_bar_frame_height_landscape" />
|
||||
<java-symbol type="dimen" name="navigation_bar_gesture_height" />
|
||||
<java-symbol type="dimen" name="navigation_bar_frame_width" />
|
||||
<java-symbol type="dimen" name="navigation_bar_height_car_mode" />
|
||||
<java-symbol type="dimen" name="navigation_bar_height_landscape_car_mode" />
|
||||
|
||||
@@ -268,6 +268,9 @@ public class DisplayPolicy {
|
||||
private int[] mNavigationBarHeightForRotationInCarMode = new int[4];
|
||||
private int[] mNavigationBarWidthForRotationInCarMode = new int[4];
|
||||
|
||||
/** See {@link #getNavigationBarFrameHeight} */
|
||||
private int[] mNavigationBarFrameHeightForRotationDefault = new int[4];
|
||||
|
||||
/** Cached value of {@link ScreenShapeHelper#getWindowOutsetBottomPx} */
|
||||
@Px private int mWindowOutsetBottom;
|
||||
|
||||
@@ -286,10 +289,6 @@ public class DisplayPolicy {
|
||||
}
|
||||
};
|
||||
|
||||
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
|
||||
private NavigationBarExperiments mExperiments = new NavigationBarExperiments();
|
||||
// EXPERIMENT END
|
||||
|
||||
@GuardedBy("mHandler")
|
||||
private SleepToken mDreamingSleepToken;
|
||||
|
||||
@@ -1621,11 +1620,9 @@ public class DisplayPolicy {
|
||||
// It's a system nav bar or a portrait screen; nav bar goes on bottom.
|
||||
final int top = cutoutSafeUnrestricted.bottom
|
||||
- getNavigationBarHeight(rotation, uiMode);
|
||||
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
|
||||
final int topNavBar = cutoutSafeUnrestricted.bottom
|
||||
- mExperiments.getNavigationBarFrameHeight();
|
||||
- getNavigationBarFrameHeight(rotation, uiMode);
|
||||
navigationFrame.set(0, topNavBar, displayWidth, displayFrames.mUnrestricted.bottom);
|
||||
// EXPERIMENT END
|
||||
displayFrames.mStable.bottom = displayFrames.mStableFullscreen.bottom = top;
|
||||
if (transientNavBarShowing) {
|
||||
mNavigationBarController.setBarShowingLw(true);
|
||||
@@ -1648,11 +1645,7 @@ public class DisplayPolicy {
|
||||
// Landscape screen; nav bar goes to the right.
|
||||
final int left = cutoutSafeUnrestricted.right
|
||||
- getNavigationBarWidth(rotation, uiMode);
|
||||
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
|
||||
final int leftNavBar = cutoutSafeUnrestricted.right
|
||||
- mExperiments.getNavigationBarFrameWidth();
|
||||
navigationFrame.set(leftNavBar, 0, displayFrames.mUnrestricted.right, displayHeight);
|
||||
// EXPERIMENT END
|
||||
navigationFrame.set(left, 0, displayFrames.mUnrestricted.right, displayHeight);
|
||||
displayFrames.mStable.right = displayFrames.mStableFullscreen.right = left;
|
||||
if (transientNavBarShowing) {
|
||||
mNavigationBarController.setBarShowingLw(true);
|
||||
@@ -1675,11 +1668,7 @@ public class DisplayPolicy {
|
||||
// Seascape screen; nav bar goes to the left.
|
||||
final int right = cutoutSafeUnrestricted.left
|
||||
+ getNavigationBarWidth(rotation, uiMode);
|
||||
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
|
||||
final int rightNavBar = cutoutSafeUnrestricted.left
|
||||
+ mExperiments.getNavigationBarFrameWidth();
|
||||
navigationFrame.set(displayFrames.mUnrestricted.left, 0, rightNavBar, displayHeight);
|
||||
// EXPERIMENT END
|
||||
navigationFrame.set(displayFrames.mUnrestricted.left, 0, right, displayHeight);
|
||||
displayFrames.mStable.left = displayFrames.mStableFullscreen.left = right;
|
||||
if (transientNavBarShowing) {
|
||||
mNavigationBarController.setBarShowingLw(true);
|
||||
@@ -1887,10 +1876,21 @@ public class DisplayPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
|
||||
// Offset the ime to avoid overlapping with the nav bar
|
||||
mExperiments.offsetWindowFramesForNavBar(mNavigationBarPosition, win);
|
||||
// EXPERIMENT END
|
||||
// In case the navigation bar is on the bottom, we use the frame height instead of the
|
||||
// regular height for the insets we send to the IME as we need some space to show
|
||||
// additional buttons in SystemUI when the IME is up.
|
||||
if (mNavigationBarPosition == NAV_BAR_BOTTOM) {
|
||||
final int rotation = displayFrames.mRotation;
|
||||
final int uimode = mService.mPolicy.getUiMode();
|
||||
final int navHeightOffset = getNavigationBarFrameHeight(rotation, uimode)
|
||||
- getNavigationBarHeight(rotation, uimode);
|
||||
if (navHeightOffset > 0) {
|
||||
cf.bottom -= navHeightOffset;
|
||||
sf.bottom -= navHeightOffset;
|
||||
vf.bottom -= navHeightOffset;
|
||||
dcf.bottom -= navHeightOffset;
|
||||
}
|
||||
}
|
||||
|
||||
// IM dock windows always go to the bottom of the screen.
|
||||
attrs.gravity = Gravity.BOTTOM;
|
||||
@@ -2623,6 +2623,7 @@ public class DisplayPolicy {
|
||||
final int upsideDownRotation = displayRotation.getUpsideDownRotation();
|
||||
final int landscapeRotation = displayRotation.getLandscapeRotation();
|
||||
final int seascapeRotation = displayRotation.getSeascapeRotation();
|
||||
final int uiMode = mService.mPolicy.getUiMode();
|
||||
|
||||
if (hasStatusBar()) {
|
||||
mStatusBarHeightForRotation[portraitRotation] =
|
||||
@@ -2646,6 +2647,14 @@ public class DisplayPolicy {
|
||||
mNavigationBarHeightForRotationDefault[seascapeRotation] =
|
||||
res.getDimensionPixelSize(R.dimen.navigation_bar_height_landscape);
|
||||
|
||||
// Height of the navigation bar frame when presented horizontally at bottom
|
||||
mNavigationBarFrameHeightForRotationDefault[portraitRotation] =
|
||||
mNavigationBarFrameHeightForRotationDefault[upsideDownRotation] =
|
||||
res.getDimensionPixelSize(R.dimen.navigation_bar_frame_height);
|
||||
mNavigationBarFrameHeightForRotationDefault[landscapeRotation] =
|
||||
mNavigationBarFrameHeightForRotationDefault[seascapeRotation] =
|
||||
res.getDimensionPixelSize(R.dimen.navigation_bar_frame_height_landscape);
|
||||
|
||||
// Width of the navigation bar when presented vertically along one side
|
||||
mNavigationBarWidthForRotationDefault[portraitRotation] =
|
||||
mNavigationBarWidthForRotationDefault[upsideDownRotation] =
|
||||
@@ -2674,16 +2683,10 @@ public class DisplayPolicy {
|
||||
mSideGestureInset = res.getDimensionPixelSize(R.dimen.config_backGestureInset);
|
||||
mNavigationBarLetsThroughTaps = res.getBoolean(R.bool.config_navBarTapThrough);
|
||||
|
||||
// EXPERIMENT TODO(b/113952590): Remove once experiment in bug is completed
|
||||
mExperiments.onConfigurationChanged(uiContext);
|
||||
// EXPERIMENT END
|
||||
|
||||
// EXPERIMENT: TODO(b/113952590): Replace with real code after experiment.
|
||||
// This should calculate how much above the frame we accept gestures. Currently,
|
||||
// we extend the frame to capture the gestures, so this is 0.
|
||||
mBottomGestureAdditionalInset = mExperiments.getNavigationBarFrameHeight()
|
||||
- mExperiments.getNavigationBarFrameHeight();
|
||||
// EXPERIMENT END
|
||||
// This should calculate how much above the frame we accept gestures.
|
||||
mBottomGestureAdditionalInset = Math.max(0,
|
||||
res.getDimensionPixelSize(R.dimen.navigation_bar_gesture_height)
|
||||
- getNavigationBarFrameHeight(portraitRotation, uiMode));
|
||||
|
||||
updateConfigurationAndScreenSizeDependentBehaviors();
|
||||
mWindowOutsetBottom = ScreenShapeHelper.getWindowOutsetBottomPx(mContext.getResources());
|
||||
@@ -2748,6 +2751,26 @@ public class DisplayPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Navigation Bar Frame height. This dimension is the height of the navigation bar that
|
||||
* is used for spacing to show additional buttons on the navigation bar (such as the ime
|
||||
* switcher when ime is visible) while {@link #getNavigationBarHeight} is used for the visible
|
||||
* height that we send to the app as content insets that can be smaller.
|
||||
* <p>
|
||||
* In car mode it will return the same height as {@link #getNavigationBarHeight}
|
||||
*
|
||||
* @param rotation specifies rotation to return dimension from
|
||||
* @param uiMode to determine if in car mode
|
||||
* @return navigation bar frame height
|
||||
*/
|
||||
private int getNavigationBarFrameHeight(int rotation, int uiMode) {
|
||||
if (ALTERNATE_CAR_MODE_NAV_SIZE && (uiMode & UI_MODE_TYPE_MASK) == UI_MODE_TYPE_CAR) {
|
||||
return mNavigationBarHeightForRotationInCarMode[rotation];
|
||||
} else {
|
||||
return mNavigationBarFrameHeightForRotationDefault[rotation];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the display height available after excluding any screen
|
||||
* decorations that could never be removed in Honeycomb. That is, system bar or
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2018 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.server.wm;
|
||||
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
|
||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_BOTTOM;
|
||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_LEFT;
|
||||
import static android.view.WindowManagerPolicyConstants.NAV_BAR_RIGHT;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Rect;
|
||||
|
||||
/**
|
||||
* This class acts as a proxy for Navigation Bar experiments enabled with custom overlays
|
||||
* {@see OverlayManagerService}. By default with no overlays, this class will essentially do nothing
|
||||
* and pass the original resource data back. By default the navigation bar height/width is the same
|
||||
* as the frame height/width and therefore any offsets calculated will cancel out and do nothing.
|
||||
* TODO(b/113952590): Remove class once experiment in bug is completed
|
||||
*/
|
||||
public class NavigationBarExperiments {
|
||||
|
||||
private int mNavigationBarHeight;
|
||||
private int mNavigationBarWidth;
|
||||
|
||||
/**
|
||||
* This represents the height of the navigation bar buttons. With no experiments or overlays
|
||||
* enabled, the frame height is the same as the normal navigation bar height.
|
||||
*/
|
||||
private int mNavigationBarFrameHeight;
|
||||
|
||||
/**
|
||||
* This represents the width of the navigation bar buttons. With no experiments or overlays
|
||||
* enabled, the frame width is the same as the normal navigation bar width.
|
||||
*/
|
||||
private int mNavigationBarFrameWidth;
|
||||
|
||||
/**
|
||||
* Call when configuration change to refresh resource dimensions
|
||||
* @param systemUiContext to get the resource values
|
||||
*/
|
||||
public void onConfigurationChanged(Context systemUiContext) {
|
||||
// Cache all the values again
|
||||
mNavigationBarHeight = systemUiContext.getResources().getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.navigation_bar_height);
|
||||
mNavigationBarWidth = systemUiContext.getResources().getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.navigation_bar_width);
|
||||
mNavigationBarFrameHeight = systemUiContext.getResources().getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.navigation_bar_frame_height);
|
||||
mNavigationBarFrameWidth = systemUiContext.getResources().getDimensionPixelSize(
|
||||
com.android.internal.R.dimen.navigation_bar_frame_width);
|
||||
}
|
||||
|
||||
public int getNavigationBarHeight() {
|
||||
return mNavigationBarHeight;
|
||||
}
|
||||
|
||||
public int getNavigationBarWidth() {
|
||||
return mNavigationBarWidth;
|
||||
}
|
||||
|
||||
public int getNavigationBarFrameHeight() {
|
||||
return mNavigationBarFrameHeight;
|
||||
}
|
||||
|
||||
public int getNavigationBarFrameWidth() {
|
||||
return mNavigationBarFrameWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* If navigation frame width/height is different than navigation bar width/height then only
|
||||
* offset the ime's and home activity's window rects depending on the navigation bar position to
|
||||
* add a gap where the navigation bar would have been drawn. With no experiments or overlays
|
||||
* enabled, the height/width is the same as the frame height/width and the offsets calculated
|
||||
* will be 0 and this function will do nothing.
|
||||
* @param navPosition position of navigation bar (left, right or bottom)
|
||||
* @param w the window that is being offset by experiment
|
||||
*/
|
||||
public void offsetWindowFramesForNavBar(int navPosition, WindowState w) {
|
||||
if (w.getAttrs().type != TYPE_INPUT_METHOD) {
|
||||
return;
|
||||
}
|
||||
|
||||
final WindowFrames windowFrames = w.getWindowFrames();
|
||||
final Rect cf = windowFrames.mContentFrame;
|
||||
switch (navPosition) {
|
||||
case NAV_BAR_BOTTOM:
|
||||
int navHeight = getNavigationBarFrameHeight() - getNavigationBarHeight();
|
||||
if (navHeight > 0) {
|
||||
cf.bottom -= navHeight;
|
||||
windowFrames.mStableFrame.bottom -= navHeight;
|
||||
}
|
||||
break;
|
||||
case NAV_BAR_LEFT:
|
||||
case NAV_BAR_RIGHT:
|
||||
int navWidth = getNavigationBarFrameWidth() - getNavigationBarWidth();
|
||||
if (navWidth > 0) {
|
||||
if (navPosition == NAV_BAR_LEFT) {
|
||||
cf.left += navWidth;
|
||||
} else {
|
||||
cf.right -= navWidth;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user