Merge "Hide IME first when clicking on area outside bubble" into main
diff --git a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt
index 0efdbdc..327e205 100644
--- a/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt
+++ b/libs/WindowManager/Shell/multivalentTests/src/com/android/wm/shell/bubbles/BubbleStackViewTest.kt
@@ -456,5 +456,7 @@
override fun isStackExpanded(): Boolean = false
override fun isShowingAsBubbleBar(): Boolean = false
+
+ override fun hideCurrentInputMethod() {}
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
index 4a1da4d..6449073 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java
@@ -592,11 +592,12 @@
* Hides the current input method, wherever it may be focused, via InputMethodManagerInternal.
*/
void hideCurrentInputMethod() {
+ mBubblePositioner.setImeVisible(false /* visible */, 0 /* height */);
int displayId = mWindowManager.getDefaultDisplay().getDisplayId();
try {
mBarService.hideCurrentInputMethodForBubbles(displayId);
} catch (RemoteException e) {
- e.printStackTrace();
+ Log.e(TAG, "Failed to hide IME", e);
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedViewManager.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedViewManager.kt
index b0d3cc4..3d9bf03 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedViewManager.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleExpandedViewManager.kt
@@ -29,6 +29,7 @@
fun setAppBubbleTaskId(key: String, taskId: Int)
fun isStackExpanded(): Boolean
fun isShowingAsBubbleBar(): Boolean
+ fun hideCurrentInputMethod()
companion object {
/**
@@ -73,6 +74,10 @@
override fun isStackExpanded(): Boolean = controller.isStackExpanded
override fun isShowingAsBubbleBar(): Boolean = controller.isShowingAsBubbleBar
+
+ override fun hideCurrentInputMethod() {
+ controller.hideCurrentInputMethod()
+ }
}
}
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
index fac9bf6..ed904e2 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java
@@ -2324,7 +2324,6 @@
* not.
*/
void hideCurrentInputMethod() {
- mPositioner.setImeVisible(false, 0);
mManager.hideCurrentInputMethod();
}
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java
index 271fb9a..a7da07d 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarExpandedView.java
@@ -82,6 +82,7 @@
private static final int INVALID_TASK_ID = -1;
private BubbleExpandedViewManager mManager;
+ private BubblePositioner mPositioner;
private boolean mIsOverflow;
private BubbleTaskViewHelper mBubbleTaskViewHelper;
private BubbleBarMenuViewController mMenuViewController;
@@ -160,6 +161,7 @@
boolean isOverflow,
@Nullable BubbleTaskView bubbleTaskView) {
mManager = expandedViewManager;
+ mPositioner = positioner;
mIsOverflow = isOverflow;
if (mIsOverflow) {
@@ -290,15 +292,27 @@
}
/**
- * Hides the current modal menu view or collapses the bubble stack.
- * Called from {@link BubbleBarLayerView}
+ * Hides the current modal menu if it is visible
+ * @return {@code true} if menu was visible and is hidden
*/
- public void hideMenuOrCollapse() {
+ public boolean hideMenuIfVisible() {
if (mMenuViewController.isMenuVisible()) {
- mMenuViewController.hideMenu(/* animated = */ true);
- } else {
- mManager.collapseStack();
+ mMenuViewController.hideMenu(true /* animated */);
+ return true;
}
+ return false;
+ }
+
+ /**
+ * Hides the IME if it is visible
+ * @return {@code true} if IME was visible
+ */
+ public boolean hideImeIfVisible() {
+ if (mPositioner.isImeVisible()) {
+ mManager.hideCurrentInputMethod();
+ return true;
+ }
+ return false;
}
/** Updates the bubble shown in the expanded view. */
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java
index 123cc7e..1d51d83 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/bar/BubbleBarLayerView.java
@@ -132,7 +132,7 @@
}
});
- setOnClickListener(view -> hideMenuOrCollapse());
+ setOnClickListener(view -> hideMenuOrImeOrCollapse());
}
@Override
@@ -217,7 +217,7 @@
@Override
public void onBackPressed() {
- hideMenuOrCollapse();
+ hideMenuOrImeOrCollapse();
}
});
@@ -344,15 +344,23 @@
addView(mDismissView);
}
- /** Hides the current modal education/menu view, expanded view or collapses the bubble stack */
- private void hideMenuOrCollapse() {
+ /** Hides the current modal education/menu view, IME or collapses the expanded view */
+ private void hideMenuOrImeOrCollapse() {
if (mEducationViewController.isEducationVisible()) {
mEducationViewController.hideEducation(/* animated = */ true);
- } else if (isExpanded() && mExpandedView != null) {
- mExpandedView.hideMenuOrCollapse();
- } else {
- mBubbleController.collapseStack();
+ return;
}
+ if (isExpanded() && mExpandedView != null) {
+ boolean menuHidden = mExpandedView.hideMenuIfVisible();
+ if (menuHidden) {
+ return;
+ }
+ boolean imeHidden = mExpandedView.hideImeIfVisible();
+ if (imeHidden) {
+ return;
+ }
+ }
+ mBubbleController.collapseStack();
}
/** Updates the expanded view size and position. */