Merge "Adjust divider when IME height is changed." into nyc-dev

This commit is contained in:
Keisuke Kuroyanagi
2016-05-13 01:46:09 +00:00
committed by Android (Google) Code Review
3 changed files with 17 additions and 7 deletions

View File

@@ -123,6 +123,7 @@ public class DockedStackDividerController implements DimLayerUser {
private final Rect mTouchRegion = new Rect(); private final Rect mTouchRegion = new Rect();
private boolean mAnimatingForIme; private boolean mAnimatingForIme;
private boolean mAdjustedForIme; private boolean mAdjustedForIme;
private int mImeHeight;
private WindowState mDelayedImeWin; private WindowState mDelayedImeWin;
private boolean mAdjustedForDivider; private boolean mAdjustedForDivider;
private float mDividerAnimationStart; private float mDividerAnimationStart;
@@ -296,8 +297,9 @@ public class DockedStackDividerController implements DimLayerUser {
void setAdjustedForIme( void setAdjustedForIme(
boolean adjustedForIme, boolean adjustedForDivider, boolean adjustedForIme, boolean adjustedForDivider,
boolean animate, WindowState imeWin) { boolean animate, WindowState imeWin, int imeHeight) {
if (mAdjustedForIme != adjustedForIme || mAdjustedForDivider != adjustedForDivider) { if (mAdjustedForIme != adjustedForIme || (adjustedForIme && mImeHeight != imeHeight)
|| mAdjustedForDivider != adjustedForDivider) {
if (animate) { if (animate) {
startImeAdjustAnimation(adjustedForIme, adjustedForDivider, imeWin); startImeAdjustAnimation(adjustedForIme, adjustedForDivider, imeWin);
} else { } else {
@@ -305,10 +307,15 @@ public class DockedStackDividerController implements DimLayerUser {
notifyAdjustedForImeChanged(adjustedForIme || adjustedForDivider, 0 /* duration */); notifyAdjustedForImeChanged(adjustedForIme || adjustedForDivider, 0 /* duration */);
} }
mAdjustedForIme = adjustedForIme; mAdjustedForIme = adjustedForIme;
mImeHeight = imeHeight;
mAdjustedForDivider = adjustedForDivider; mAdjustedForDivider = adjustedForDivider;
} }
} }
int getImeHeightAdjustedFor() {
return mImeHeight;
}
void positionDockedStackedDivider(Rect frame) { void positionDockedStackedDivider(Rect frame) {
TaskStack stack = mDisplayContent.getDockedStackLocked(); TaskStack stack = mDisplayContent.getDockedStackLocked();
if (stack == null) { if (stack == null) {

View File

@@ -849,10 +849,10 @@ public class TaskStack implements DimLayer.DimLayerUser,
* *
* @param imeWin The IME window. * @param imeWin The IME window.
*/ */
void setAdjustedForIme(WindowState imeWin) { void setAdjustedForIme(WindowState imeWin, boolean forceUpdate) {
mImeWin = imeWin; mImeWin = imeWin;
mImeGoingAway = false; mImeGoingAway = false;
if (!mAdjustedForIme) { if (!mAdjustedForIme || forceUpdate) {
mAdjustedForIme = true; mAdjustedForIme = true;
mAdjustImeAmount = 0f; mAdjustImeAmount = 0f;
mAdjustDividerAmount = 0f; mAdjustDividerAmount = 0f;

View File

@@ -7542,6 +7542,9 @@ public class WindowManagerService extends IWindowManager.Stub
final boolean imeOnTop = (imeDockSide == DOCKED_TOP); final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM); final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM);
final boolean dockMinimized = displayContent.mDividerControllerLocked.isMinimizedDock(); final boolean dockMinimized = displayContent.mDividerControllerLocked.isMinimizedDock();
final int imeHeight = mPolicy.getInputMethodWindowVisibleHeightLw();
final boolean imeHeightChanged = imeVisible &&
imeHeight != displayContent.mDividerControllerLocked.getImeHeightAdjustedFor();
// The divider could be adjusted for IME position, or be thinner than usual, // The divider could be adjusted for IME position, or be thinner than usual,
// or both. There are three possible cases: // or both. There are three possible cases:
@@ -7555,13 +7558,13 @@ public class WindowManagerService extends IWindowManager.Stub
final TaskStack stack = stacks.get(i); final TaskStack stack = stacks.get(i);
final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM; final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
if (stack.isVisibleLocked() && (imeOnBottom || isDockedOnBottom)) { if (stack.isVisibleLocked() && (imeOnBottom || isDockedOnBottom)) {
stack.setAdjustedForIme(imeWin); stack.setAdjustedForIme(imeWin, imeOnBottom && imeHeightChanged);
} else { } else {
stack.resetAdjustedForIme(false); stack.resetAdjustedForIme(false);
} }
} }
displayContent.mDividerControllerLocked.setAdjustedForIme( displayContent.mDividerControllerLocked.setAdjustedForIme(
imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin); imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin, imeHeight);
} else { } else {
final ArrayList<TaskStack> stacks = displayContent.getStacks(); final ArrayList<TaskStack> stacks = displayContent.getStacks();
for (int i = stacks.size() - 1; i >= 0; --i) { for (int i = stacks.size() - 1; i >= 0; --i) {
@@ -7569,7 +7572,7 @@ public class WindowManagerService extends IWindowManager.Stub
stack.resetAdjustedForIme(!dockVisible); stack.resetAdjustedForIme(!dockVisible);
} }
displayContent.mDividerControllerLocked.setAdjustedForIme( displayContent.mDividerControllerLocked.setAdjustedForIme(
false /*ime*/, false /*divider*/, dockVisible /*animate*/, imeWin); false /*ime*/, false /*divider*/, dockVisible /*animate*/, imeWin, imeHeight);
} }
} }