Adjust divider when IME height is changed.
Previously, divider was adjusted for IME when IME window visibility is changed. However, IME size can be changed without changing IME window visibility. For example, when hardware keyboard key is pressed to show emoji layout. This CL checks if IME height has been changed and adjust divider position properly. Bug: 28389933 Change-Id: I9a561bd4796a0513c8b5c493884946883f160907
This commit is contained in:
@@ -115,6 +115,7 @@ public class DockedStackDividerController implements DimLayerUser {
|
||||
private final Rect mTouchRegion = new Rect();
|
||||
private boolean mAnimatingForIme;
|
||||
private boolean mAdjustedForIme;
|
||||
private int mImeHeight;
|
||||
private WindowState mDelayedImeWin;
|
||||
private boolean mAdjustedForDivider;
|
||||
private float mDividerAnimationStart;
|
||||
@@ -215,8 +216,9 @@ public class DockedStackDividerController implements DimLayerUser {
|
||||
|
||||
void setAdjustedForIme(
|
||||
boolean adjustedForIme, boolean adjustedForDivider,
|
||||
boolean animate, WindowState imeWin) {
|
||||
if (mAdjustedForIme != adjustedForIme || mAdjustedForDivider != adjustedForDivider) {
|
||||
boolean animate, WindowState imeWin, int imeHeight) {
|
||||
if (mAdjustedForIme != adjustedForIme || (adjustedForIme && mImeHeight != imeHeight)
|
||||
|| mAdjustedForDivider != adjustedForDivider) {
|
||||
if (animate) {
|
||||
startImeAdjustAnimation(adjustedForIme, adjustedForDivider, imeWin);
|
||||
} else {
|
||||
@@ -224,10 +226,15 @@ public class DockedStackDividerController implements DimLayerUser {
|
||||
notifyAdjustedForImeChanged(adjustedForIme || adjustedForDivider, 0 /* duration */);
|
||||
}
|
||||
mAdjustedForIme = adjustedForIme;
|
||||
mImeHeight = imeHeight;
|
||||
mAdjustedForDivider = adjustedForDivider;
|
||||
}
|
||||
}
|
||||
|
||||
int getImeHeightAdjustedFor() {
|
||||
return mImeHeight;
|
||||
}
|
||||
|
||||
void positionDockedStackedDivider(Rect frame) {
|
||||
TaskStack stack = mDisplayContent.getDockedStackLocked();
|
||||
if (stack == null) {
|
||||
|
||||
@@ -849,10 +849,10 @@ public class TaskStack implements DimLayer.DimLayerUser,
|
||||
*
|
||||
* @param imeWin The IME window.
|
||||
*/
|
||||
void setAdjustedForIme(WindowState imeWin) {
|
||||
void setAdjustedForIme(WindowState imeWin, boolean forceUpdate) {
|
||||
mImeWin = imeWin;
|
||||
mImeGoingAway = false;
|
||||
if (!mAdjustedForIme) {
|
||||
if (!mAdjustedForIme || forceUpdate) {
|
||||
mAdjustedForIme = true;
|
||||
mAdjustImeAmount = 0f;
|
||||
mAdjustDividerAmount = 0f;
|
||||
|
||||
@@ -7535,6 +7535,9 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
|
||||
final boolean imeOnBottom = (imeDockSide == DOCKED_BOTTOM);
|
||||
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,
|
||||
// or both. There are three possible cases:
|
||||
@@ -7548,13 +7551,13 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
final TaskStack stack = stacks.get(i);
|
||||
final boolean isDockedOnBottom = stack.getDockSide() == DOCKED_BOTTOM;
|
||||
if (stack.isVisibleLocked() && (imeOnBottom || isDockedOnBottom)) {
|
||||
stack.setAdjustedForIme(imeWin);
|
||||
stack.setAdjustedForIme(imeWin, imeOnBottom && imeHeightChanged);
|
||||
} else {
|
||||
stack.resetAdjustedForIme(false);
|
||||
}
|
||||
}
|
||||
displayContent.mDividerControllerLocked.setAdjustedForIme(
|
||||
imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin);
|
||||
imeOnBottom /*ime*/, true /*divider*/, true /*animate*/, imeWin, imeHeight);
|
||||
} else {
|
||||
final ArrayList<TaskStack> stacks = displayContent.getStacks();
|
||||
for (int i = stacks.size() - 1; i >= 0; --i) {
|
||||
@@ -7562,7 +7565,7 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
stack.resetAdjustedForIme(!dockVisible);
|
||||
}
|
||||
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