Improve Preference highlighting for Search

- cache hightlight Drawable
- set mPreferenceHighlighted as early as possible

Change-Id: I512d4677e94309175ead22c46b7a78e2aa387e1c
This commit is contained in:
Fabrice Di Meglio
2014-05-21 16:19:41 -07:00
parent bbfaa11cf7
commit 4a2ee7e2b6
2 changed files with 19 additions and 5 deletions

View File

@@ -32,6 +32,7 @@ public class HighlightingFragment extends Fragment {
private String mViewKey; private String mViewKey;
private boolean mViewHighlighted = false; private boolean mViewHighlighted = false;
private Drawable mHighlightDrawable;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@@ -67,7 +68,10 @@ public class HighlightingFragment extends Fragment {
} }
private Drawable getHighlightDrawable() { 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) { private void highlightView(String key) {

View File

@@ -61,6 +61,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
private String mPreferenceKey; private String mPreferenceKey;
private boolean mPreferenceHighlighted = false; private boolean mPreferenceHighlighted = false;
private Drawable mHighlightDrawable;
private boolean mIsDataSetObserverRegistered = false; private boolean mIsDataSetObserverRegistered = false;
private DataSetObserver mDataSetObserver = new DataSetObserver() { private DataSetObserver mDataSetObserver = new DataSetObserver() {
@@ -103,6 +104,11 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
if (!TextUtils.isEmpty(mHelpUrl)) { if (!TextUtils.isEmpty(mHelpUrl)) {
setHasOptionsMenu(true); setHasOptionsMenu(true);
} }
}
@Override
public void onResume() {
super.onResume();
final Bundle args = getArguments(); final Bundle args = getArguments();
if (args != null) { if (args != null) {
@@ -144,7 +150,10 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
} }
private Drawable getHighlightDrawable() { 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); final int position = canUseListViewForHighLighting(key);
if (position >= 0) { if (position >= 0) {
mPreferenceHighlighted = true;
final ListView listView = getListView(); final ListView listView = getListView();
final ListAdapter adapter = listView.getAdapter(); final ListAdapter adapter = listView.getAdapter();
@@ -189,17 +200,16 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di
highlight.setHotspot(centerX, centerY); highlight.setHotspot(centerX, centerY);
v.setPressed(true); v.setPressed(true);
v.setPressed(false); v.setPressed(false);
((PreferenceGroupAdapter) adapter).setHighlighted(-1);
} }
}, DELAY_HIGHLIGHT_DURATION_MILLIS); }, DELAY_HIGHLIGHT_DURATION_MILLIS);
mPreferenceHighlighted = true;
} }
}); });
} else { } else {
// Try locating the Preference View thru its tag // Try locating the Preference View thru its tag
View preferenceView = findPreferenceViewForKey(getView(), key); View preferenceView = findPreferenceViewForKey(getView(), key);
if (preferenceView != null ) { if (preferenceView != null ) {
mPreferenceHighlighted = true;
preferenceView.setBackground(highlight); preferenceView.setBackground(highlight);
final int centerX = preferenceView.getWidth() / 2; final int centerX = preferenceView.getWidth() / 2;
final int centerY = preferenceView.getHeight() / 2; final int centerY = preferenceView.getHeight() / 2;