inputMethodManagerInternal.hideCurrentInputMethod();
mImeHideRequested = true;
}
- } else {
- setMinimizedDockedStack(false);
+ } else if (setMinimizedDockedStack(false)) {
+ mService.mWindowPlacerLocked.performSurfacePlacement();
}
}
return;
}
- clearImeAdjustAnimation();
+ final boolean imeChanged = clearImeAdjustAnimation();
+ boolean minimizedChange = false;
if (minimizedDock) {
if (animate) {
startAdjustAnimation(0f, 1f);
} else {
- setMinimizedDockedStack(true);
+ minimizedChange |= setMinimizedDockedStack(true);
}
} else {
if (animate) {
startAdjustAnimation(1f, 0f);
} else {
- setMinimizedDockedStack(false);
+ minimizedChange |= setMinimizedDockedStack(false);
+ }
+ }
+ if (imeChanged || minimizedChange) {
+ if (imeChanged && !minimizedChange) {
+ Slog.d(TAG, "setMinimizedDockedStack: IME adjust changed due to minimizing,"
+ + " minimizedDock=" + minimizedDock
+ + " minimizedChange=" + minimizedChange);
}
+ mService.mWindowPlacerLocked.performSurfacePlacement();
}
}
- private void clearImeAdjustAnimation() {
+ private boolean clearImeAdjustAnimation() {
+ boolean changed = false;
final ArrayList<TaskStack> stacks = mDisplayContent.getStacks();
for (int i = stacks.size() - 1; i >= 0; --i) {
final TaskStack stack = stacks.get(i);
if (stack != null && stack.isAdjustedForIme()) {
stack.resetAdjustedForIme(true /* adjustBoundsNow */);
+ changed = true;
}
}
mAnimatingForIme = false;
+ return changed;
}
private void startAdjustAnimation(float from, float to) {
if (mDelayedImeWin != null) {
mDelayedImeWin.mWinAnimator.endDelayingAnimationStart();
}
+ // If the adjust status changed since this was posted, only notify
+ // the new states and don't animate.
+ long duration = 0;
+ if (mAdjustedForIme == adjustedForIme
+ && mAdjustedForDivider == adjustedForDivider) {
+ duration = IME_ADJUST_ANIM_DURATION;
+ } else {
+ Slog.w(TAG, "IME adjust changed while waiting for drawn:"
+ + " adjustedForIme=" + adjustedForIme
+ + " adjustedForDivider=" + adjustedForDivider
+ + " mAdjustedForIme=" + mAdjustedForIme
+ + " mAdjustedForDivider=" + mAdjustedForDivider);
+ }
notifyAdjustedForImeChanged(
- adjustedForIme || adjustedForDivider, IME_ADJUST_ANIM_DURATION);
+ mAdjustedForIme || mAdjustedForDivider, duration);
};
} else {
notifyAdjustedForImeChanged(
}
}
- private void setMinimizedDockedStack(boolean minimized) {
+ private boolean setMinimizedDockedStack(boolean minimized) {
final TaskStack stack = mDisplayContent.getDockedStackVisibleForUserLocked();
notifyDockedStackMinimizedChanged(minimized, 0);
- if (stack == null) {
- return;
- }
- if (stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f)) {
- mService.mWindowPlacerLocked.performSurfacePlacement();
- }
+ return stack != null && stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f);
}
private boolean isAnimationMaximizing() {