From 4a2ee7e2b610131452dd26e9b4e17f1bcc865bb9 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Wed, 21 May 2014 16:19:41 -0700 Subject: [PATCH] Improve Preference highlighting for Search - cache hightlight Drawable - set mPreferenceHighlighted as early as possible Change-Id: I512d4677e94309175ead22c46b7a78e2aa387e1c --- .../android/settings/HighlightingFragment.java | 6 +++++- .../settings/SettingsPreferenceFragment.java | 18 ++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/HighlightingFragment.java b/src/com/android/settings/HighlightingFragment.java index 7e4ebf2ec1d..1424abdab7d 100644 --- a/src/com/android/settings/HighlightingFragment.java +++ b/src/com/android/settings/HighlightingFragment.java @@ -32,6 +32,7 @@ public class HighlightingFragment extends Fragment { private String mViewKey; private boolean mViewHighlighted = false; + private Drawable mHighlightDrawable; @Override public void onCreate(Bundle icicle) { @@ -67,7 +68,10 @@ public class HighlightingFragment extends Fragment { } private Drawable getHighlightDrawable() { - return getActivity().getDrawable(R.drawable.preference_highlight); + if (mHighlightDrawable == null) { + mHighlightDrawable = getActivity().getDrawable(R.drawable.preference_highlight); + } + return mHighlightDrawable; } private void highlightView(String key) { diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index a1f5ecd9a8b..67432c0f9f5 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -61,6 +61,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di private String mPreferenceKey; private boolean mPreferenceHighlighted = false; + private Drawable mHighlightDrawable; private boolean mIsDataSetObserverRegistered = false; private DataSetObserver mDataSetObserver = new DataSetObserver() { @@ -103,6 +104,11 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di if (!TextUtils.isEmpty(mHelpUrl)) { setHasOptionsMenu(true); } + } + + @Override + public void onResume() { + super.onResume(); final Bundle args = getArguments(); if (args != null) { @@ -144,7 +150,10 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di } private Drawable getHighlightDrawable() { - return getActivity().getDrawable(R.drawable.preference_highlight); + if (mHighlightDrawable == null) { + mHighlightDrawable = getActivity().getDrawable(R.drawable.preference_highlight); + } + return mHighlightDrawable; } /** @@ -170,6 +179,8 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di final int position = canUseListViewForHighLighting(key); if (position >= 0) { + mPreferenceHighlighted = true; + final ListView listView = getListView(); final ListAdapter adapter = listView.getAdapter(); @@ -189,17 +200,16 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di highlight.setHotspot(centerX, centerY); v.setPressed(true); v.setPressed(false); - ((PreferenceGroupAdapter) adapter).setHighlighted(-1); } }, DELAY_HIGHLIGHT_DURATION_MILLIS); - - mPreferenceHighlighted = true; } }); } else { // Try locating the Preference View thru its tag View preferenceView = findPreferenceViewForKey(getView(), key); if (preferenceView != null ) { + mPreferenceHighlighted = true; + preferenceView.setBackground(highlight); final int centerX = preferenceView.getWidth() / 2; final int centerY = preferenceView.getHeight() / 2;