Merge "Adjust divider when IME height is changed." into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
36d1296cf4
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user