Preventing unnecessary layouts on search focus change

Instead of expanding the edittext, using a separate textview
which is shown/hidden as the hint text

Change-Id: Ib4cedeaed9291f972be2ee407c06f4944c983e27
This commit is contained in:
Sunny Goyal
2016-07-13 14:24:18 -07:00
committed by Peter Schiller
parent 7b8f1eaba1
commit 5024503702
3 changed files with 46 additions and 55 deletions

View File

@@ -15,6 +15,7 @@
*/
package com.android.launcher3.allapps;
import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
@@ -25,19 +26,15 @@ import android.text.Selection;
import android.text.SpannableStringBuilder;
import android.text.method.TextKeyListener;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.view.animation.AnimationUtils;
import com.android.launcher3.AppInfo;
import com.android.launcher3.BaseContainerView;
import com.android.launcher3.BubbleTextView;
import com.android.launcher3.CellLayout;
import com.android.launcher3.DeleteDropTarget;
import com.android.launcher3.DeviceProfile;
@@ -150,7 +147,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
private View mSearchContainer;
private ExtendedEditText mSearchInput;
private ImageView mSearchIcon;
private HeaderElevationController mElevationController;
private int mSearchContainerOffsetTop;
@@ -313,40 +309,35 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
mSearchContainer = findViewById(R.id.search_container);
mSearchInput = (ExtendedEditText) findViewById(R.id.search_box_input);
mSearchIcon = (ImageView) findViewById(R.id.search_icon);
mSearchContainerOffsetTop = getResources().getDimensionPixelSize(
R.dimen.all_apps_search_bar_margin_top);
final LinearLayout.LayoutParams searchParams =
(LinearLayout.LayoutParams) mSearchInput.getLayoutParams();
final View searchHint = findViewById(R.id.search_hint);
final ObjectAnimator searchInputAnimator = ObjectAnimator.ofFloat(mSearchInput,
View.TRANSLATION_X, 0);
searchInputAnimator.setDuration(getContext().getResources().getInteger(
R.integer.config_searchHintAnimationDuration));
searchInputAnimator.setInterpolator(AnimationUtils.loadInterpolator(getContext(),
android.R.interpolator.accelerate_decelerate));
mSearchInput.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean focused) {
if (focused) {
searchParams.width = LayoutParams.MATCH_PARENT;
mSearchInput.setLayoutParams(searchParams);
mSearchInput.setGravity(Gravity.FILL_HORIZONTAL | Gravity.CENTER_VERTICAL);
mSearchIcon.setVisibility(View.GONE);
searchHint.setVisibility(View.INVISIBLE);
if (searchInputAnimator.isRunning()) {
searchInputAnimator.end();
}
searchInputAnimator.setFloatValues(searchHint.getLeft(), 0);
searchInputAnimator.start();
} else {
searchParams.width = LayoutParams.WRAP_CONTENT;
mSearchInput.setLayoutParams(searchParams);
mSearchInput.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
mSearchIcon.setVisibility(View.VISIBLE);
searchHint.setVisibility(View.VISIBLE);
mSearchInput.setTranslationX(0);
}
}
});
final OnClickListener searchFocusListener = new OnClickListener() {
@Override
public void onClick(View view) {
if (!mSearchBarController.isSearchFieldFocused()) {
mSearchBarController.focusSearchField();
}
}
};
mSearchInput.setOnClickListener(searchFocusListener);
mSearchContainer.setOnClickListener(searchFocusListener);
mElevationController = Utilities.ATLEAST_LOLLIPOP
? new HeaderElevationController.ControllerVL(mSearchContainer)
: new HeaderElevationController.ControllerV16(mSearchContainer);
@@ -405,8 +396,11 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
final int thumbMaxWidth =
getResources().getDimensionPixelSize(
R.dimen.container_fastscroll_thumb_max_width);
mSearchContainer.setPaddingRelative(rvPadding + thumbMaxWidth, 0, rvPadding +
thumbMaxWidth, 0);
mSearchContainer.setPadding(
rvPadding - mHorizontalPadding + thumbMaxWidth,
mSearchContainer.getPaddingTop(),
rvPadding - mHorizontalPadding + thumbMaxWidth,
mSearchContainer.getPaddingBottom());
}
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -435,14 +429,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
mAppsRecyclerView.setNumAppsPerRow(grid, mNumAppsPerRow);
mAdapter.setNumAppsPerRow(mNumAppsPerRow);
mApps.setNumAppsPerRow(mNumAppsPerRow, mNumPredictedAppsPerRow, mergeAlgorithm);
// TODO: should we not do all this complicated computation but just match the
// numAppsPerRow with the workspace?
if (mNumAppsPerRow > 0) {
int iconSize = availableWidth / mNumAppsPerRow;
int iconSpacing = (iconSize - grid.allAppsIconSizePx) / 2;
mSearchInput.setPaddingRelative(iconSpacing, 0, iconSpacing, 0);
}
}
// --- remove END when {@code FeatureFlags.LAUNCHER3_ALL_APPS_PULL_UP} is enabled. ---
@@ -499,12 +485,11 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc
mlp.topMargin = height;
mAppsRecyclerView.setLayoutParams(mlp);
LinearLayout.LayoutParams llp =
(LinearLayout.LayoutParams) mSearchInput.getLayoutParams();
llp.topMargin = insets.top + mSearchContainerOffsetTop;
mSearchInput.setLayoutParams(llp);
mSearchIcon.setLayoutParams(llp);
mSearchContainer.setPadding(
mSearchContainer.getPaddingLeft(),
insets.top + mSearchContainerOffsetTop,
mSearchContainer.getPaddingRight(),
mSearchContainer.getPaddingBottom());
lp.height = height;
View navBarBg = findViewById(R.id.nav_bar_bg);