Merge "Search - add indexing of SecuritySettings"
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index 9c1e300..1144985 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -20,6 +20,7 @@
 import android.app.ActivityManagerNative;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.content.res.Configuration;
@@ -32,6 +33,7 @@
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceScreen;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.TextUtils.SimpleStringSplitter;
@@ -48,7 +50,11 @@
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -59,7 +65,7 @@
  * Activity with the accessibility settings.
  */
 public class AccessibilitySettings extends SettingsPreferenceFragment implements DialogCreatable,
-        Preference.OnPreferenceChangeListener {
+        Preference.OnPreferenceChangeListener, Indexable {
 
     private static final float LARGE_FONT_SCALE = 1.3f;
 
@@ -570,4 +576,45 @@
             installedServices.add(installedService);
         }
     }
+
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+        @Override
+        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+            List<SearchIndexableRaw> indexables = new ArrayList<SearchIndexableRaw>();
+
+            PackageManager packageManager = context.getPackageManager();
+            AccessibilityManager accessibilityManager = (AccessibilityManager)
+                    context.getSystemService(Context.ACCESSIBILITY_SERVICE);
+
+            String screenTitle = context.getResources().getString(
+                    R.string.accessibility_services_title);
+
+            // Indexing all services, reagardles if enabled.
+            List<AccessibilityServiceInfo> services = accessibilityManager
+                    .getInstalledAccessibilityServiceList();
+            final int serviceCount = services.size();
+            for (int i = 0; i < serviceCount; i++) {
+                AccessibilityServiceInfo service = services.get(i);
+                SearchIndexableRaw indexable = new SearchIndexableRaw(context);
+                indexable.title = service.getResolveInfo().loadLabel(packageManager).toString();
+                indexable.summaryOn = context.getString(R.string.accessibility_feature_state_on);
+                indexable.summaryOff = context.getString(R.string.accessibility_feature_state_off);
+                indexable.screenTitle = screenTitle;
+                indexables.add(indexable);
+            }
+
+            return indexables;
+        }
+
+        @Override
+        public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+               boolean enabled) {
+            List<SearchIndexableResource> indexables = new ArrayList<SearchIndexableResource>();
+            SearchIndexableResource indexable = new SearchIndexableResource(context);
+            indexable.xmlResId = R.xml.accessibility_settings;
+            indexables.add(indexable);
+            return indexables;
+        }
+    };
 }
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index df38db4..0215ad8 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -40,6 +40,7 @@
 import android.print.PrintManager;
 import android.print.PrintManager.PrintJobStateChangeListener;
 import android.printservice.PrintServiceInfo;
+import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.format.DateUtils;
@@ -49,6 +50,7 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.Switch;
 import android.widget.TextView;
 
@@ -56,6 +58,9 @@
 import com.android.settings.DialogCreatable;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;;
+import com.android.settings.search.SearchIndexableRaw;
 
 import java.text.DateFormat;
 import java.util.ArrayList;
@@ -64,7 +69,8 @@
 /**
  * Fragment with the top level print settings.
  */
-public class PrintSettingsFragment extends SettingsPreferenceFragment implements DialogCreatable {
+public class PrintSettingsFragment extends SettingsPreferenceFragment
+        implements DialogCreatable, Indexable {
 
     static final char ENABLED_PRINT_SERVICES_SEPARATOR = ':';
 
@@ -119,7 +125,7 @@
 
         mActivePrintJobsCategory = (PreferenceCategory) findPreference(
                 PRINT_JOBS_CATEGORY);
-        mPrintServicesCategory= (PreferenceCategory) findPreference(
+        mPrintServicesCategory = (PreferenceCategory) findPreference(
                 PRINT_SERVICES_CATEGORY);
         getPreferenceScreen().removePreference(mActivePrintJobsCategory);
 
@@ -153,7 +159,7 @@
         if (!TextUtils.isEmpty(searchUri)) {
             MenuItem menuItem = menu.add(R.string.print_menu_item_add_service);
             menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-            menuItem.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse(searchUri)));
+            menuItem.setIntent(new Intent(Intent.ACTION_VIEW, Uri.parse(searchUri)));
         }
     }
 
@@ -162,7 +168,7 @@
         super.onViewCreated(view, savedInstanceState);
         ViewGroup contentRoot = (ViewGroup) getListView().getParent();
         View emptyView = getActivity().getLayoutInflater().inflate(
-                    R.layout.empty_print_state, contentRoot, false);
+                R.layout.empty_print_state, contentRoot, false);
         TextView textView = (TextView) emptyView.findViewById(R.id.message);
         textView.setText(R.string.print_no_services_installed);
         contentRoot.addView(emptyView);
@@ -272,7 +278,7 @@
     private class SettingsPackageMonitor extends PackageMonitor {
         @Override
         public void onPackageAdded(String packageName, int uid) {
-           mHandler.obtainMessage().sendToTarget();
+            mHandler.obtainMessage().sendToTarget();
         }
 
         @Override
@@ -443,7 +449,7 @@
 
         private static final boolean DEBUG = false;
 
-        private List <PrintJobInfo> mPrintJobs = new ArrayList<PrintJobInfo>();
+        private List<PrintJobInfo> mPrintJobs = new ArrayList<PrintJobInfo>();
 
         private final PrintManager mPrintManager;
 
@@ -453,7 +459,7 @@
             super(context);
             mPrintManager = ((PrintManager) context.getSystemService(
                     Context.PRINT_SERVICE)).getGlobalPrintManagerForUser(
-                            ActivityManager.getCurrentUser());
+                        ActivityManager.getCurrentUser());
         }
 
         @Override
@@ -544,4 +550,43 @@
             return false;
         }
     }
-}
+
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+            new BaseSearchIndexProvider() {
+        @Override
+        public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+            List<SearchIndexableRaw> indexables = new ArrayList<SearchIndexableRaw>();
+
+            PackageManager packageManager = context.getPackageManager();
+            PrintManager printManager = (PrintManager) context.getSystemService(
+                    Context.PRINT_SERVICE);
+
+            String screenTitle = context.getResources().getString(R.string.print_settings_title);
+
+            // Indexing all services, reagardles if enabled.
+            List<PrintServiceInfo> services = printManager.getInstalledPrintServices();
+            final int serviceCount = services.size();
+            for (int i = 0; i < serviceCount; i++) {
+                PrintServiceInfo service = services.get(i);
+                SearchIndexableRaw indexable = new SearchIndexableRaw(context);
+                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);
+                indexable.screenTitle = screenTitle;
+                indexables.add(indexable);
+            }
+
+            return indexables;
+        }
+
+        @Override
+        public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+                boolean enabled) {
+            List<SearchIndexableResource> indexables = new ArrayList<SearchIndexableResource>();
+            SearchIndexableResource indexable = new SearchIndexableResource(context);
+            indexable.xmlResId = R.xml.print_settings;
+            indexables.add(indexable);
+            return indexables;
+        }
+    };
+}
\ No newline at end of file
diff --git a/src/com/android/settings/search/SearchIndexableRaw.java b/src/com/android/settings/search/SearchIndexableRaw.java
index c4d187e..b8a1699 100644
--- a/src/com/android/settings/search/SearchIndexableRaw.java
+++ b/src/com/android/settings/search/SearchIndexableRaw.java
@@ -28,12 +28,34 @@
  */
 public class SearchIndexableRaw extends SearchIndexableData {
 
+    /**
+     * Title's raw data.
+     */
     public String title;
+
+    /**
+     * Summary's raw data when the data is "ON".
+     */
     public String summaryOn;
+
+    /**
+     * Summary's raw data when the data is "OFF".
+     */
     public String summaryOff;
+
+    /**
+     * Entries associated with the raw data (when the data can have several values).
+     */
     public String entries;
+
+    /**
+     * Keywords' raw data.
+     */
     public String keywords;
 
+    /**
+     * Fragment's or Activity's title associated with the raw data.
+     */
     public String screenTitle;
 
     public SearchIndexableRaw(Context context) {
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index fce0346..cfc90c6 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -186,13 +186,13 @@
 
         sResMap.put(AccessibilitySettings.class.getName(),
                 new SearchIndexableResource(RANK_ACCESSIBILITY,
-                        R.xml.accessibility_settings,
+                        NO_DATA_RES_ID,
                         AccessibilitySettings.class.getName(),
                         R.drawable.ic_settings_accessibility));
 
         sResMap.put(PrintSettingsFragment.class.getName(),
                 new SearchIndexableResource(RANK_PRINTING,
-                        R.xml.print_settings,
+                        NO_DATA_RES_ID,
                         PrintSettingsFragment.class.getName(),
                         com.android.internal.R.drawable.ic_print));