Rearrange configure/default apps

Bug: 27276982
Bug: 27279305
Change-Id: I443e9d2bc0c3fd9bcc13ee86716c14fbb55af0ba
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index b54c414..c6af8fb 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -64,6 +64,8 @@
 import android.service.persistentdata.PersistentDataBlockManager;
 import android.support.v7.preference.Preference;
 import android.support.v7.preference.PreferenceGroup;
+import android.support.v7.preference.PreferenceManager;
+import android.support.v7.preference.PreferenceScreen;
 import android.telephony.TelephonyManager;
 import android.text.Spannable;
 import android.text.SpannableString;
@@ -83,7 +85,6 @@
 import android.widget.ListView;
 import android.widget.TabWidget;
 import com.android.internal.util.UserIcons;
-import com.android.settings.datausage.DataUsageList;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -1025,5 +1026,41 @@
                     .toString();
         }
     }
+
+    public static List<String> getNonIndexable(int xml, Context context) {
+        List<String> ret = new ArrayList<>();
+        PreferenceManager manager = new PreferenceManager(context);
+        PreferenceScreen screen = manager.inflateFromResource(context, xml, null);
+        checkPrefs(screen, ret);
+
+        return ret;
+    }
+
+    private static void checkPrefs(PreferenceGroup group, List<String> ret) {
+        if (group == null) return;
+        for (int i = 0; i < group.getPreferenceCount(); i++) {
+            Preference pref = group.getPreference(i);
+            if (pref instanceof SelfAvailablePreference
+                    && !((SelfAvailablePreference) pref).isAvailable(group.getContext())) {
+                ret.add(pref.getKey());
+                if (pref instanceof PreferenceGroup) {
+                    addAll((PreferenceGroup) pref, ret);
+                }
+            } else if (pref instanceof PreferenceGroup) {
+                checkPrefs((PreferenceGroup) pref, ret);
+            }
+        }
+    }
+
+    private static void addAll(PreferenceGroup group, List<String> ret) {
+        if (group == null) return;
+        for (int i = 0; i < group.getPreferenceCount(); i++) {
+            Preference pref = group.getPreference(i);
+            ret.add(pref.getKey());
+            if (pref instanceof PreferenceGroup) {
+                addAll((PreferenceGroup) pref, ret);
+            }
+        }
+    }
 }