Merge "Clear focus from search bar whenever a header is clicked in search adapter." into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
a0d299f5ad
+1
-1
@@ -82,7 +82,7 @@ public final class WidgetsListAdapterTest {
|
||||
mTestProfile.numColumns = 5;
|
||||
mUserHandle = Process.myUserHandle();
|
||||
mAdapter = new WidgetsListAdapter(mContext, mMockLayoutInflater, mMockWidgetCache,
|
||||
mIconCache, null, null);
|
||||
mIconCache, null, null, null);
|
||||
mAdapter.registerAdapterDataObserver(mListener);
|
||||
|
||||
doAnswer(invocation -> ((ComponentWithLabel) invocation.getArgument(0))
|
||||
|
||||
+2
-1
@@ -105,7 +105,8 @@ public final class WidgetsListHeaderViewHolderBinderTest {
|
||||
mWidgetPreviewLoader,
|
||||
mIconCache,
|
||||
/* iconClickListener= */ view -> {},
|
||||
/* iconLongClickListener= */ view -> false);
|
||||
/* iconLongClickListener= */ view -> false,
|
||||
/* searchBarUIHelper= */ null);
|
||||
mViewHolderBinder = new WidgetsListHeaderViewHolderBinder(
|
||||
LayoutInflater.from(mTestActivity), mOnHeaderClickListener, widgetsListAdapter);
|
||||
}
|
||||
|
||||
+2
-1
@@ -105,7 +105,8 @@ public final class WidgetsListSearchHeaderViewHolderBinderTest {
|
||||
mWidgetPreviewLoader,
|
||||
mIconCache,
|
||||
/* iconClickListener= */ view -> {},
|
||||
/* iconLongClickListener= */ view -> false);
|
||||
/* iconLongClickListener= */ view -> false,
|
||||
/* searchBarUIHelper= */ null);
|
||||
mViewHolderBinder = new WidgetsListSearchHeaderViewHolderBinder(
|
||||
LayoutInflater.from(mTestActivity), mOnHeaderClickListener, widgetsListAdapter);
|
||||
}
|
||||
|
||||
+2
-1
@@ -111,7 +111,8 @@ public final class WidgetsListTableViewHolderBinderTest {
|
||||
mWidgetPreviewLoader,
|
||||
mIconCache,
|
||||
/* iconClickListener= */ view -> {},
|
||||
/* iconLongClickListener= */ view -> false);
|
||||
/* iconLongClickListener= */ view -> false,
|
||||
/* searchBarUIHelper= */ null);
|
||||
mViewHolderBinder = new WidgetsListTableViewHolderBinder(
|
||||
mContext,
|
||||
LayoutInflater.from(mTestActivity),
|
||||
|
||||
@@ -58,6 +58,7 @@ 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;
|
||||
@@ -71,7 +72,8 @@ import java.util.function.Predicate;
|
||||
*/
|
||||
public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
implements Insettable, ProviderChangedListener, OnActivePageChangedListener,
|
||||
WidgetsRecyclerView.HeaderViewDimensionsProvider, SearchModeListener {
|
||||
WidgetsRecyclerView.HeaderViewDimensionsProvider, SearchModeListener,
|
||||
WidgetsSearchBarUIHelper {
|
||||
private static final String TAG = WidgetsFullSheet.class.getSimpleName();
|
||||
|
||||
private static final long DEFAULT_OPEN_DURATION = 267;
|
||||
@@ -561,6 +563,11 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
getWindowInsetsController().hide(WindowInsets.Type.ime());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearSearchBarFocus() {
|
||||
mSearchAndRecommendationViewHolder.mSearchBar.clearSearchBarFocus();
|
||||
}
|
||||
|
||||
/** A holder class for holding adapters & their corresponding recycler view. */
|
||||
private final class AdapterHolder {
|
||||
static final int PRIMARY = 0;
|
||||
@@ -583,7 +590,9 @@ public class WidgetsFullSheet extends BaseWidgetSheet
|
||||
apps.getWidgetCache(),
|
||||
apps.getIconCache(),
|
||||
/* iconClickListener= */ WidgetsFullSheet.this,
|
||||
/* iconLongClickListener= */ WidgetsFullSheet.this);
|
||||
/* iconLongClickListener= */ WidgetsFullSheet.this,
|
||||
/* WidgetsSearchBarUIHelper= */
|
||||
mAdapterType == SEARCH ? WidgetsFullSheet.this : null);
|
||||
mWidgetsListAdapter.setHasStableIds(true);
|
||||
switch (mAdapterType) {
|
||||
case PRIMARY:
|
||||
|
||||
@@ -41,6 +41,7 @@ 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;
|
||||
@@ -69,6 +70,7 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> 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<ViewHolderBinder> mViewHolderBinders = new SparseArray<>();
|
||||
private final WidgetsListTableViewHolderBinder mWidgetsListTableViewHolderBinder;
|
||||
@@ -88,7 +90,9 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC
|
||||
|
||||
public WidgetsListAdapter(Context context, LayoutInflater layoutInflater,
|
||||
WidgetPreviewLoader widgetPreviewLoader, IconCache iconCache,
|
||||
OnClickListener iconClickListener, OnLongClickListener iconLongClickListener) {
|
||||
OnClickListener iconClickListener, OnLongClickListener iconLongClickListener,
|
||||
@Nullable WidgetsSearchBarUIHelper searchBarUIHelper) {
|
||||
mSearchBarUIHelper = searchBarUIHelper;
|
||||
mDiffReporter = new WidgetsDiffReporter(iconCache, this);
|
||||
mWidgetsListTableViewHolderBinder = new WidgetsListTableViewHolderBinder(context,
|
||||
layoutInflater, iconClickListener, iconLongClickListener,
|
||||
@@ -237,6 +241,9 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC
|
||||
|
||||
@Override
|
||||
public void onHeaderClicked(boolean showWidgets, PackageUserKey packageUserKey) {
|
||||
if (mSearchBarUIHelper != null) {
|
||||
mSearchBarUIHelper.clearSearchBarFocus();
|
||||
}
|
||||
if (showWidgets) {
|
||||
mWidgetsContentVisiblePackageUserKey = packageUserKey;
|
||||
updateVisibleEntries();
|
||||
|
||||
@@ -79,4 +79,9 @@ public class LauncherWidgetsSearchBar extends LinearLayout implements WidgetsSea
|
||||
super.onDetachedFromWindow();
|
||||
mController.onDestroy();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearSearchBarFocus() {
|
||||
mController.clearFocus();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,11 @@ public interface WidgetsSearchBar {
|
||||
*/
|
||||
void reset();
|
||||
|
||||
/**
|
||||
* Clears focus from search bar.
|
||||
*/
|
||||
void clearSearchBarFocus();
|
||||
|
||||
/**
|
||||
* Sets the vertical location, in pixels, of this search bar relative to its top position.
|
||||
*/
|
||||
|
||||
@@ -103,8 +103,7 @@ public class WidgetsSearchBarController implements TextWatcher,
|
||||
public void clearSearchResult() {
|
||||
mSearchAlgorithm.cancel(/* interruptActiveRequests= */ true);
|
||||
mInput.getText().clear();
|
||||
mInput.clearFocus();
|
||||
mInput.hideKeyboard();
|
||||
clearFocus();
|
||||
mSearchModeListener.exitSearchMode();
|
||||
}
|
||||
|
||||
@@ -117,18 +116,24 @@ public class WidgetsSearchBarController implements TextWatcher,
|
||||
|
||||
@Override
|
||||
public boolean onBackKey() {
|
||||
mInput.clearFocus();
|
||||
mInput.hideKeyboard();
|
||||
clearFocus();
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onKey(View view, int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) {
|
||||
mInput.clearFocus();
|
||||
mInput.hideKeyboard();
|
||||
clearFocus();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears focus from edit text.
|
||||
*/
|
||||
public void clearFocus() {
|
||||
mInput.clearFocus();
|
||||
mInput.hideKeyboard();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 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();
|
||||
}
|
||||
Reference in New Issue
Block a user