Merge "Removed the experimental code for gestural mode" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-23 21:11:28 +00:00
committed by Android (Google) Code Review
4 changed files with 63 additions and 153 deletions

View File

@@ -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>

View File

@@ -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" />

View File

@@ -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

View File

@@ -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;
}
}
}