Improve Preference highlighting for Search
- cache hightlight Drawable
- set mPreferenceHighlighted as early as possible
Change-Id: I512d4677e94309175ead22c46b7a78e2aa387e1c
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index a1f5ecd..67432c0 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -61,6 +61,7 @@
private String mPreferenceKey;
private boolean mPreferenceHighlighted = false;
+ private Drawable mHighlightDrawable;
private boolean mIsDataSetObserverRegistered = false;
private DataSetObserver mDataSetObserver = new DataSetObserver() {
@@ -103,6 +104,11 @@
if (!TextUtils.isEmpty(mHelpUrl)) {
setHasOptionsMenu(true);
}
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
final Bundle args = getArguments();
if (args != null) {
@@ -144,7 +150,10 @@
}
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 @@
final int position = canUseListViewForHighLighting(key);
if (position >= 0) {
+ mPreferenceHighlighted = true;
+
final ListView listView = getListView();
final ListAdapter adapter = listView.getAdapter();
@@ -189,17 +200,16 @@
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;