From 66034efaaed742c798016bd55a5d9292d87fdeff Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Tue, 18 May 2021 18:52:13 +0100 Subject: [PATCH] Clear widgets search bar focus when the user taps outside the search bar Test: Focus widgets search bar. Then tap outside the search bar and observe the keyboard is being dismissed. Bug: 188540267 Change-Id: Ica1b5b804ed97dd0b1cd8d41351eddcf5249ded0 --- .../widget/picker/WidgetsListAdapterTest.java | 2 +- ...WidgetsListHeaderViewHolderBinderTest.java | 3 +-- ...sListSearchHeaderViewHolderBinderTest.java | 3 +-- .../WidgetsListTableViewHolderBinderTest.java | 3 +-- .../widget/picker/WidgetsFullSheet.java | 19 ++++++------- .../widget/picker/WidgetsListAdapter.java | 9 +------ .../search/LauncherWidgetsSearchBar.java | 5 ++++ .../picker/search/WidgetsSearchBar.java | 3 +++ .../search/WidgetsSearchBarUIHelper.java | 27 ------------------- 9 files changed, 21 insertions(+), 53 deletions(-) delete mode 100644 src/com/android/launcher3/widget/picker/search/WidgetsSearchBarUIHelper.java diff --git a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java index 6b5678cb8a..e1214ff39f 100644 --- a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java +++ b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListAdapterTest.java @@ -82,7 +82,7 @@ public final class WidgetsListAdapterTest { mTestProfile.numColumns = 5; mUserHandle = Process.myUserHandle(); mAdapter = new WidgetsListAdapter(mContext, mMockLayoutInflater, mMockWidgetCache, - mIconCache, null, null, null); + mIconCache, null, null); mAdapter.registerAdapterDataObserver(mListener); doAnswer(invocation -> ((ComponentWithLabel) invocation.getArgument(0)) diff --git a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java index 12a092dafe..84a03d572c 100644 --- a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java +++ b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListHeaderViewHolderBinderTest.java @@ -105,8 +105,7 @@ public final class WidgetsListHeaderViewHolderBinderTest { mWidgetPreviewLoader, mIconCache, /* iconClickListener= */ view -> {}, - /* iconLongClickListener= */ view -> false, - /* searchBarUIHelper= */ null); + /* iconLongClickListener= */ view -> false); mViewHolderBinder = new WidgetsListHeaderViewHolderBinder( LayoutInflater.from(mTestActivity), mOnHeaderClickListener, widgetsListAdapter); } diff --git a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java index e09034132c..075c58db6b 100644 --- a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java +++ b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListSearchHeaderViewHolderBinderTest.java @@ -105,8 +105,7 @@ public final class WidgetsListSearchHeaderViewHolderBinderTest { mWidgetPreviewLoader, mIconCache, /* iconClickListener= */ view -> {}, - /* iconLongClickListener= */ view -> false, - /* searchBarUIHelper= */ null); + /* iconLongClickListener= */ view -> false); mViewHolderBinder = new WidgetsListSearchHeaderViewHolderBinder( LayoutInflater.from(mTestActivity), mOnHeaderClickListener, widgetsListAdapter); } diff --git a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java index 0935d1cfc4..0c6e71711d 100644 --- a/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java +++ b/robolectric_tests/src/com/android/launcher3/widget/picker/WidgetsListTableViewHolderBinderTest.java @@ -111,8 +111,7 @@ public final class WidgetsListTableViewHolderBinderTest { mWidgetPreviewLoader, mIconCache, /* iconClickListener= */ view -> {}, - /* iconLongClickListener= */ view -> false, - /* searchBarUIHelper= */ null); + /* iconLongClickListener= */ view -> false); mViewHolderBinder = new WidgetsListTableViewHolderBinder( mContext, LayoutInflater.from(mTestActivity), diff --git a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java index e44acc363b..121df961df 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java +++ b/src/com/android/launcher3/widget/picker/WidgetsFullSheet.java @@ -61,7 +61,6 @@ import com.android.launcher3.widget.LauncherAppWidgetHost.ProviderChangedListene import com.android.launcher3.widget.model.WidgetsListBaseEntry; import com.android.launcher3.widget.picker.search.SearchModeListener; import com.android.launcher3.widget.picker.search.WidgetsSearchBar; -import com.android.launcher3.widget.picker.search.WidgetsSearchBarUIHelper; import com.android.launcher3.widget.util.WidgetsTableUtils; import com.android.launcher3.workprofile.PersonalWorkPagedView; import com.android.launcher3.workprofile.PersonalWorkSlidingTabStrip.OnActivePageChangedListener; @@ -76,8 +75,7 @@ import java.util.stream.IntStream; */ public class WidgetsFullSheet extends BaseWidgetSheet implements Insettable, ProviderChangedListener, OnActivePageChangedListener, - WidgetsRecyclerView.HeaderViewDimensionsProvider, SearchModeListener, - WidgetsSearchBarUIHelper { + WidgetsRecyclerView.HeaderViewDimensionsProvider, SearchModeListener { private static final String TAG = WidgetsFullSheet.class.getSimpleName(); private static final long DEFAULT_OPEN_DURATION = 267; @@ -535,6 +533,12 @@ public class WidgetsFullSheet extends BaseWidgetSheet } else if (getPopupContainer().isEventOverView(mContent, ev)) { mNoIntercept = !getRecyclerView().shouldContainerScroll(ev, getPopupContainer()); } + + if (mSearchAndRecommendationViewHolder.mSearchBar.isSearchBarFocused() + && !getPopupContainer().isEventOverView( + mSearchAndRecommendationViewHolder.mSearchBarContainer, ev)) { + mSearchAndRecommendationViewHolder.mSearchBar.clearSearchBarFocus(); + } } return super.onControllerInterceptTouchEvent(ev); } @@ -609,11 +613,6 @@ public class WidgetsFullSheet extends BaseWidgetSheet getWindowInsetsController().hide(WindowInsets.Type.ime()); } - @Override - public void clearSearchBarFocus() { - mSearchAndRecommendationViewHolder.mSearchBar.clearSearchBarFocus(); - } - private void showEducationTipOnView(View view) { mActivityContext.getSharedPrefs().edit() .putBoolean(WIDGETS_EDUCATION_TIP_SEEN, true).apply(); @@ -681,9 +680,7 @@ public class WidgetsFullSheet extends BaseWidgetSheet apps.getWidgetCache(), apps.getIconCache(), /* iconClickListener= */ WidgetsFullSheet.this, - /* iconLongClickListener= */ WidgetsFullSheet.this, - /* WidgetsSearchBarUIHelper= */ - mAdapterType == SEARCH ? WidgetsFullSheet.this : null); + /* iconLongClickListener= */ WidgetsFullSheet.this); mWidgetsListAdapter.setHasStableIds(true); switch (mAdapterType) { case PRIMARY: diff --git a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java index 0504e74695..c0981abbd9 100644 --- a/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java +++ b/src/com/android/launcher3/widget/picker/WidgetsListAdapter.java @@ -41,7 +41,6 @@ import com.android.launcher3.widget.model.WidgetsListBaseEntry; import com.android.launcher3.widget.model.WidgetsListContentEntry; import com.android.launcher3.widget.model.WidgetsListHeaderEntry; import com.android.launcher3.widget.model.WidgetsListSearchHeaderEntry; -import com.android.launcher3.widget.picker.search.WidgetsSearchBarUIHelper; import java.util.ArrayList; import java.util.Arrays; @@ -70,7 +69,6 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC private static final int VIEW_TYPE_WIDGETS_HEADER = R.id.view_type_widgets_header; private static final int VIEW_TYPE_WIDGETS_SEARCH_HEADER = R.id.view_type_widgets_search_header; - @Nullable private final WidgetsSearchBarUIHelper mSearchBarUIHelper; private final WidgetsDiffReporter mDiffReporter; private final SparseArray mViewHolderBinders = new SparseArray<>(); private final WidgetsListTableViewHolderBinder mWidgetsListTableViewHolderBinder; @@ -90,9 +88,7 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC public WidgetsListAdapter(Context context, LayoutInflater layoutInflater, WidgetPreviewLoader widgetPreviewLoader, IconCache iconCache, - OnClickListener iconClickListener, OnLongClickListener iconLongClickListener, - @Nullable WidgetsSearchBarUIHelper searchBarUIHelper) { - mSearchBarUIHelper = searchBarUIHelper; + OnClickListener iconClickListener, OnLongClickListener iconLongClickListener) { mDiffReporter = new WidgetsDiffReporter(iconCache, this); mWidgetsListTableViewHolderBinder = new WidgetsListTableViewHolderBinder(context, layoutInflater, iconClickListener, iconLongClickListener, @@ -243,9 +239,6 @@ public class WidgetsListAdapter extends Adapter implements OnHeaderC @Override public void onHeaderClicked(boolean showWidgets, PackageUserKey packageUserKey) { - if (mSearchBarUIHelper != null) { - mSearchBarUIHelper.clearSearchBarFocus(); - } if (showWidgets) { mWidgetsContentVisiblePackageUserKey = packageUserKey; updateVisibleEntries(); diff --git a/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java b/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java index 42f1bb2d21..65937b644a 100644 --- a/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java +++ b/src/com/android/launcher3/widget/picker/search/LauncherWidgetsSearchBar.java @@ -75,6 +75,11 @@ public class LauncherWidgetsSearchBar extends LinearLayout implements WidgetsSea mController.onDestroy(); } + @Override + public boolean isSearchBarFocused() { + return mEditText.isFocused(); + } + @Override public void clearSearchBarFocus() { mController.clearFocus(); diff --git a/src/com/android/launcher3/widget/picker/search/WidgetsSearchBar.java b/src/com/android/launcher3/widget/picker/search/WidgetsSearchBar.java index 0ac47ce5f2..44a5e80f5e 100644 --- a/src/com/android/launcher3/widget/picker/search/WidgetsSearchBar.java +++ b/src/com/android/launcher3/widget/picker/search/WidgetsSearchBar.java @@ -32,6 +32,9 @@ public interface WidgetsSearchBar { */ void reset(); + /** Returns {@code true} if the search bar is in focus. */ + boolean isSearchBarFocused(); + /** * Clears focus from search bar. */ diff --git a/src/com/android/launcher3/widget/picker/search/WidgetsSearchBarUIHelper.java b/src/com/android/launcher3/widget/picker/search/WidgetsSearchBarUIHelper.java deleted file mode 100644 index edfdc655ed..0000000000 --- a/src/com/android/launcher3/widget/picker/search/WidgetsSearchBarUIHelper.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.widget.picker.search; - -/** - * UI helper for {@link WidgetsSearchBar}. - */ -public interface WidgetsSearchBarUIHelper { - /** - * Clears focus from the search bar. - */ - void clearSearchBarFocus(); -}