Loading res/layout/all_apps.xml +1 −13 Original line number Diff line number Diff line Loading @@ -65,18 +65,6 @@ android:orientation="horizontal" android:saveEnabled="false"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:id="@+id/search_hint" android:layout_gravity="center_horizontal" android:drawablePadding="@dimen/all_apps_search_bar_icon_margin_right" android:drawableStart="@drawable/ic_allapps_search" android:text="@string/all_apps_search_bar_hint" android:textColor="@drawable/all_apps_search_hint" android:textSize="16sp" /> <com.android.launcher3.ExtendedEditText android:id="@+id/search_box_input" android:layout_width="match_parent" Loading @@ -90,7 +78,7 @@ android:scrollHorizontally="true" android:singleLine="true" android:textColor="#4c4c4c" android:contentDescription="@string/all_apps_search_bar_hint" android:hint="@string/all_apps_search_bar_hint" android:textColorHint="@drawable/all_apps_search_hint" android:textSize="16sp" /> </FrameLayout> Loading src/com/android/launcher3/allapps/AllAppsContainerView.java +13 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.graphics.Point; import android.graphics.Rect; import android.support.v7.widget.RecyclerView; import android.text.Selection; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.method.TextKeyListener; import android.util.AttributeSet; Loading @@ -47,6 +49,7 @@ import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.Folder; import com.android.launcher3.graphics.TintedDrawableSpan; import com.android.launcher3.keyboard.FocusedItemDecorator; import com.android.launcher3.util.ComponentKey; Loading Loading @@ -240,7 +243,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc } mSearchBarController = searchController; mSearchBarController.initialize(mApps, mSearchInput, mLauncher, this); mSearchBarController.setHintView(findViewById(R.id.search_hint)); mAdapter.setSearchController(mSearchBarController); } Loading Loading @@ -308,6 +310,16 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mSearchContainer = findViewById(R.id.search_container); mSearchInput = (ExtendedEditText) findViewById(R.id.search_box_input); // Update the hint to contain the icon. // Prefix the original hint with two spaces. The first space gets replaced by the icon // using span. The second space is used for a singe space character between the hint // and the icon. SpannableString spanned = new SpannableString(" " + mSearchInput.getHint()); spanned.setSpan(new TintedDrawableSpan(getContext(), R.drawable.ic_allapps_search), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); mSearchInput.setHint(spanned); mSearchContainerOffsetTop = getResources().getDimensionPixelSize( R.dimen.all_apps_search_bar_margin_top); Loading src/com/android/launcher3/allapps/AllAppsSearchBarController.java +1 −26 Original line number Diff line number Diff line Loading @@ -39,8 +39,7 @@ import java.util.ArrayList; * An interface to a search box that AllApps can command. */ public abstract class AllAppsSearchBarController implements TextWatcher, OnEditorActionListener, ExtendedEditText.OnBackKeyListener, View.OnFocusChangeListener { implements TextWatcher, OnEditorActionListener, ExtendedEditText.OnBackKeyListener { protected Launcher mLauncher; protected AlphabeticalAppsList mApps; Loading @@ -50,8 +49,6 @@ public abstract class AllAppsSearchBarController protected DefaultAppSearchAlgorithm mSearchAlgorithm; protected InputMethodManager mInputMethodManager; protected View mHintView; public void setVisibility(int visibility) { mInput.setVisibility(visibility); } Loading @@ -69,7 +66,6 @@ public abstract class AllAppsSearchBarController mInput.addTextChangedListener(this); mInput.setOnEditorActionListener(this); mInput.setOnBackKeyListener(this); mInput.setOnFocusChangeListener(this); mInputMethodManager = (InputMethodManager) mInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); Loading Loading @@ -130,27 +126,6 @@ public abstract class AllAppsSearchBarController return false; } @Override public void onFocusChange(View view, boolean focused) { if (mHintView != null) { mHintView.setVisibility(focused ? View.INVISIBLE : View.VISIBLE); } } /** * Sets a view to serve as the search field's hint. */ public void setHintView(View hintView) { mHintView = hintView; } /** * Returns the search field's hint view. */ public View getHintView() { return mHintView; } /** * Resets the search bar state. */ Loading src/com/android/launcher3/graphics/TintedDrawableSpan.java 0 → 100644 +62 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 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.graphics; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.drawable.Drawable; import android.text.style.DynamicDrawableSpan; /** * {@link DynamicDrawableSpan} which draws a drawable tinted with the current paint color. */ public class TintedDrawableSpan extends DynamicDrawableSpan { private final Drawable mDrawable; private int mOldTint; public TintedDrawableSpan(Context context, int resourceId) { super(ALIGN_BOTTOM); mDrawable = context.getDrawable(resourceId); mOldTint = 0; } @Override public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) { fm = fm == null ? paint.getFontMetricsInt() : fm; int iconSize = fm.bottom - fm.top; mDrawable.setBounds(0, 0, iconSize, iconSize); return super.getSize(paint, text, start, end, fm); } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { int color = paint.getColor(); if (mOldTint != color) { mOldTint = color; mDrawable.setTint(mOldTint); } super.draw(canvas, text, start, end, x, top, y, bottom, paint); } @Override public Drawable getDrawable() { return mDrawable; } } Loading
res/layout/all_apps.xml +1 −13 Original line number Diff line number Diff line Loading @@ -65,18 +65,6 @@ android:orientation="horizontal" android:saveEnabled="false"> <TextView android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center_vertical" android:id="@+id/search_hint" android:layout_gravity="center_horizontal" android:drawablePadding="@dimen/all_apps_search_bar_icon_margin_right" android:drawableStart="@drawable/ic_allapps_search" android:text="@string/all_apps_search_bar_hint" android:textColor="@drawable/all_apps_search_hint" android:textSize="16sp" /> <com.android.launcher3.ExtendedEditText android:id="@+id/search_box_input" android:layout_width="match_parent" Loading @@ -90,7 +78,7 @@ android:scrollHorizontally="true" android:singleLine="true" android:textColor="#4c4c4c" android:contentDescription="@string/all_apps_search_bar_hint" android:hint="@string/all_apps_search_bar_hint" android:textColorHint="@drawable/all_apps_search_hint" android:textSize="16sp" /> </FrameLayout> Loading
src/com/android/launcher3/allapps/AllAppsContainerView.java +13 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,8 @@ import android.graphics.Point; import android.graphics.Rect; import android.support.v7.widget.RecyclerView; import android.text.Selection; import android.text.Spannable; import android.text.SpannableString; import android.text.SpannableStringBuilder; import android.text.method.TextKeyListener; import android.util.AttributeSet; Loading @@ -47,6 +49,7 @@ import com.android.launcher3.Utilities; import com.android.launcher3.Workspace; import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.folder.Folder; import com.android.launcher3.graphics.TintedDrawableSpan; import com.android.launcher3.keyboard.FocusedItemDecorator; import com.android.launcher3.util.ComponentKey; Loading Loading @@ -240,7 +243,6 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc } mSearchBarController = searchController; mSearchBarController.initialize(mApps, mSearchInput, mLauncher, this); mSearchBarController.setHintView(findViewById(R.id.search_hint)); mAdapter.setSearchController(mSearchBarController); } Loading Loading @@ -308,6 +310,16 @@ public class AllAppsContainerView extends BaseContainerView implements DragSourc mSearchContainer = findViewById(R.id.search_container); mSearchInput = (ExtendedEditText) findViewById(R.id.search_box_input); // Update the hint to contain the icon. // Prefix the original hint with two spaces. The first space gets replaced by the icon // using span. The second space is used for a singe space character between the hint // and the icon. SpannableString spanned = new SpannableString(" " + mSearchInput.getHint()); spanned.setSpan(new TintedDrawableSpan(getContext(), R.drawable.ic_allapps_search), 0, 1, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); mSearchInput.setHint(spanned); mSearchContainerOffsetTop = getResources().getDimensionPixelSize( R.dimen.all_apps_search_bar_margin_top); Loading
src/com/android/launcher3/allapps/AllAppsSearchBarController.java +1 −26 Original line number Diff line number Diff line Loading @@ -39,8 +39,7 @@ import java.util.ArrayList; * An interface to a search box that AllApps can command. */ public abstract class AllAppsSearchBarController implements TextWatcher, OnEditorActionListener, ExtendedEditText.OnBackKeyListener, View.OnFocusChangeListener { implements TextWatcher, OnEditorActionListener, ExtendedEditText.OnBackKeyListener { protected Launcher mLauncher; protected AlphabeticalAppsList mApps; Loading @@ -50,8 +49,6 @@ public abstract class AllAppsSearchBarController protected DefaultAppSearchAlgorithm mSearchAlgorithm; protected InputMethodManager mInputMethodManager; protected View mHintView; public void setVisibility(int visibility) { mInput.setVisibility(visibility); } Loading @@ -69,7 +66,6 @@ public abstract class AllAppsSearchBarController mInput.addTextChangedListener(this); mInput.setOnEditorActionListener(this); mInput.setOnBackKeyListener(this); mInput.setOnFocusChangeListener(this); mInputMethodManager = (InputMethodManager) mInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); Loading Loading @@ -130,27 +126,6 @@ public abstract class AllAppsSearchBarController return false; } @Override public void onFocusChange(View view, boolean focused) { if (mHintView != null) { mHintView.setVisibility(focused ? View.INVISIBLE : View.VISIBLE); } } /** * Sets a view to serve as the search field's hint. */ public void setHintView(View hintView) { mHintView = hintView; } /** * Returns the search field's hint view. */ public View getHintView() { return mHintView; } /** * Resets the search bar state. */ Loading
src/com/android/launcher3/graphics/TintedDrawableSpan.java 0 → 100644 +62 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 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.graphics; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Paint.FontMetricsInt; import android.graphics.drawable.Drawable; import android.text.style.DynamicDrawableSpan; /** * {@link DynamicDrawableSpan} which draws a drawable tinted with the current paint color. */ public class TintedDrawableSpan extends DynamicDrawableSpan { private final Drawable mDrawable; private int mOldTint; public TintedDrawableSpan(Context context, int resourceId) { super(ALIGN_BOTTOM); mDrawable = context.getDrawable(resourceId); mOldTint = 0; } @Override public int getSize(Paint paint, CharSequence text, int start, int end, FontMetricsInt fm) { fm = fm == null ? paint.getFontMetricsInt() : fm; int iconSize = fm.bottom - fm.top; mDrawable.setBounds(0, 0, iconSize, iconSize); return super.getSize(paint, text, start, end, fm); } @Override public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { int color = paint.getColor(); if (mOldTint != color) { mOldTint = color; mDrawable.setTint(mOldTint); } super.draw(canvas, text, start, end, x, top, y, bottom, paint); } @Override public Drawable getDrawable() { return mDrawable; } }