OSDN Git Service

Enable highlighting of Print services
authorFabrice Di Meglio <fdimeglio@google.com>
Sat, 19 Apr 2014 02:40:40 +0000 (19:40 -0700)
committerFabrice Di Meglio <fdimeglio@google.com>
Mon, 21 Apr 2014 16:28:17 +0000 (09:28 -0700)
- 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

src/com/android/settings/SettingsPreferenceFragment.java
src/com/android/settings/print/PrintSettingsFragment.java

index 5e0c06d..6b41349 100644 (file)
@@ -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);
         }
     }
index 43f844d..95d2b03 100644 (file)
@@ -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);