From 10da590839e264735de8a4582021aca0dab81037 Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Tue, 26 Jul 2011 16:14:26 -0700 Subject: [PATCH] Handle callbacks to CollapsibleActionViews that are in an actionLayout. Also, the onActionViewCollapsed needs to be called before detaching the action view, so that the action view can dismiss the keyboard properly. Fixes the Gmail search case where the keyboard doesn't disappear on hitting the "up" affordance after a search. Change-Id: I3c2f3f90f0edf6473404e6ceae3fa08866cad736 --- core/java/android/widget/SearchView.java | 5 +++-- .../com/android/internal/view/menu/MenuItemImpl.java | 2 +- .../com/android/internal/widget/ActionBarView.java | 11 +++++++---- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java index 55b73dffb4a6a..763a06473de4c 100644 --- a/core/java/android/widget/SearchView.java +++ b/core/java/android/widget/SearchView.java @@ -330,9 +330,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { @Override public void clearFocus() { mClearingFocus = true; + setImeVisibility(false); super.clearFocus(); mQueryTextView.clearFocus(); - setImeVisibility(false); mClearingFocus = false; } @@ -1041,8 +1041,9 @@ public class SearchView extends LinearLayout implements CollapsibleActionView { */ @Override public void onActionViewCollapsed() { + clearFocus(); + updateViewsVisibility(true); mQueryTextView.setText(""); - setIconified(true); mExpandedInActionView = false; } diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index b0a002d2ce8d6..8b53bb8dc3639 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -563,7 +563,7 @@ public final class MenuItemImpl implements MenuItem { public MenuItem setActionView(int resId) { final Context context = mMenu.getContext(); final LayoutInflater inflater = LayoutInflater.from(context); - setActionView(inflater.inflate(resId, new LinearLayout(context))); + setActionView(inflater.inflate(resId, new LinearLayout(context), false)); return this; } diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index 09262e01284a3..468f28e146964 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -1323,11 +1323,18 @@ public class ActionBarView extends AbsActionBarView { if (mExpandedActionView instanceof CollapsibleActionView) { ((CollapsibleActionView) mExpandedActionView).onActionViewExpanded(); } + return true; } @Override public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item) { + // Do this before detaching the actionview from the hierarchy, in case + // it needs to dismiss the soft keyboard, etc. + if (mExpandedActionView instanceof CollapsibleActionView) { + ((CollapsibleActionView) mExpandedActionView).onActionViewCollapsed(); + } + removeView(mExpandedActionView); removeView(mExpandedHomeLayout); if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0) { @@ -1349,16 +1356,12 @@ public class ActionBarView extends AbsActionBarView { if (mCustomNavView != null && (mDisplayOptions & ActionBar.DISPLAY_SHOW_CUSTOM) != 0) { mCustomNavView.setVisibility(VISIBLE); } - View collapsedView = mExpandedActionView; mExpandedActionView = null; mExpandedHomeLayout.setIcon(null); mCurrentExpandedItem = null; requestLayout(); item.setActionViewExpanded(false); - if (collapsedView instanceof CollapsibleActionView) { - ((CollapsibleActionView) collapsedView).onActionViewCollapsed(); - } return true; }