From c853a4282d0511d4a6886dfa95000c4dddff6a31 Mon Sep 17 00:00:00 2001 From: Fabrice Di Meglio Date: Fri, 18 Apr 2014 19:40:40 -0700 Subject: [PATCH] Enable highlighting of Print services - add to SettingsPreferenceFragment to know when the associated RootAdapter is changing and thus being able to find the highlighted Preference - also, add the correct Search key during indexing. She should match the one created when adding dynamically the Preference - last, increase to 400ms the delay to do the highlight Change-Id: I3a1a81fdf5c8ab5f3aaab29f16ea9879ab6df056 --- .../settings/SettingsPreferenceFragment.java | 26 ++++++++++++++++--- .../settings/print/PrintSettingsFragment.java | 6 +++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 5e0c06de24d..6b41349fbc5 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -23,6 +23,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.DialogInterface; import android.content.pm.PackageManager; +import android.database.DataSetObserver; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.preference.Preference; @@ -47,7 +48,7 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di private static final String TAG = "SettingsPreferenceFragment"; private static final int MENU_HELP = Menu.FIRST + 100; - private static final int DELAY_HIGHLIGHT_DURATION_MILLIS = 300; + private static final int DELAY_HIGHLIGHT_DURATION_MILLIS = 400; private static final String SAVE_HIGHLIGHTED_KEY = "android:preference_highlighted"; @@ -61,6 +62,18 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di private String mPreferenceKey; private boolean mPreferenceHighlighted = false; + private DataSetObserver mDataSetObserver = new DataSetObserver() { + @Override + public void onChanged() { + highlightPreferenceIfNeeded(); + } + + @Override + public void onInvalidated() { + highlightPreferenceIfNeeded(); + } + }; + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); @@ -99,11 +112,18 @@ public class SettingsPreferenceFragment extends PreferenceFragment implements Di @Override protected void onBindPreferences() { - highlightPreferenceIfNeeded(); + getPreferenceScreen().getRootAdapter().registerDataSetObserver(mDataSetObserver); + } + + @Override + public void onDestroy() { + super.onDestroy(); + + getPreferenceScreen().getRootAdapter().unregisterDataSetObserver(mDataSetObserver); } public void highlightPreferenceIfNeeded() { - if (!mPreferenceHighlighted &&!TextUtils.isEmpty(mPreferenceKey)) { + if (isAdded() && !mPreferenceHighlighted &&!TextUtils.isEmpty(mPreferenceKey)) { highlightPreference(mPreferenceKey); } } diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java index 43f844d79cf..95d2b0324a0 100644 --- a/src/com/android/settings/print/PrintSettingsFragment.java +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -565,7 +565,13 @@ public class PrintSettingsFragment extends SettingsPreferenceFragment final int serviceCount = services.size(); for (int i = 0; i < serviceCount; i++) { PrintServiceInfo service = services.get(i); + + ComponentName componentName = new ComponentName( + service.getResolveInfo().serviceInfo.packageName, + service.getResolveInfo().serviceInfo.name); + SearchIndexableRaw indexable = new SearchIndexableRaw(context); + indexable.key = componentName.flattenToString(); indexable.title = service.getResolveInfo().loadLabel(packageManager).toString(); indexable.summaryOn = context.getString(R.string.print_feature_state_on); indexable.summaryOff = context.getString(R.string.print_feature_state_off);