diff --git a/res/xml/accessibility_magnification_settings.xml b/res/xml/accessibility_magnification_settings.xml
index bb403948105..74156440e4a 100644
--- a/res/xml/accessibility_magnification_settings.xml
+++ b/res/xml/accessibility_magnification_settings.xml
@@ -17,8 +17,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="magnification_preference_screen_title"
- android:title="@string/accessibility_screen_magnification_title"
- settings:searchable="false">
+ android:title="@string/accessibility_screen_magnification_title">
diff --git a/res/xml/accessibility_ring_vibration_settings.xml b/res/xml/accessibility_ring_vibration_settings.xml
index 078f76c2ce8..121eb89a712 100644
--- a/res/xml/accessibility_ring_vibration_settings.xml
+++ b/res/xml/accessibility_ring_vibration_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/accessibility_shortcut_service_settings.xml b/res/xml/accessibility_shortcut_service_settings.xml
index 573939a21b2..b2f13273c27 100644
--- a/res/xml/accessibility_shortcut_service_settings.xml
+++ b/res/xml/accessibility_shortcut_service_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/accessibility_shortcut_settings.xml b/res/xml/accessibility_shortcut_settings.xml
index f431dec1e5c..9e1d26f58f8 100644
--- a/res/xml/accessibility_shortcut_settings.xml
+++ b/res/xml/accessibility_shortcut_settings.xml
@@ -15,6 +15,7 @@
-->
diff --git a/res/xml/app_and_notification.xml b/res/xml/app_and_notification.xml
index f75bd8629ae..9256f50fbb4 100644
--- a/res/xml/app_and_notification.xml
+++ b/res/xml/app_and_notification.xml
@@ -79,6 +79,7 @@
android:key="app_and_notif_cell_broadcast_settings"
android:title="@string/cell_broadcast_settings"
android:order="15"
+ settings:searchable="false"
settings:useAdminDisabledSummary="true">
diff --git a/res/xml/bluetooth_pairing_detail.xml b/res/xml/bluetooth_pairing_detail.xml
index 86fb9e43d44..cd9c32457e9 100644
--- a/res/xml/bluetooth_pairing_detail.xml
+++ b/res/xml/bluetooth_pairing_detail.xml
@@ -17,6 +17,7 @@
\ No newline at end of file
diff --git a/res/xml/current_dream_settings.xml b/res/xml/current_dream_settings.xml
index d95e830f523..b3f3f9fb1a2 100644
--- a/res/xml/current_dream_settings.xml
+++ b/res/xml/current_dream_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/default_voice_settings.xml b/res/xml/default_voice_settings.xml
index f75b5ed4271..511294c72c5 100644
--- a/res/xml/default_voice_settings.xml
+++ b/res/xml/default_voice_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/enterprise_set_default_apps_settings.xml b/res/xml/enterprise_set_default_apps_settings.xml
index 474a5c92767..12eca8a10c9 100644
--- a/res/xml/enterprise_set_default_apps_settings.xml
+++ b/res/xml/enterprise_set_default_apps_settings.xml
@@ -17,7 +17,8 @@
+ android:key="enterprise_set_default_apps_settings"
+ android:title="@string/enterprise_privacy_enterprise_set_default_apps">
diff --git a/res/xml/network_scorer_picker_prefs.xml b/res/xml/network_scorer_picker_prefs.xml
index fab69e76f87..7d1fe462c2e 100644
--- a/res/xml/network_scorer_picker_prefs.xml
+++ b/res/xml/network_scorer_picker_prefs.xml
@@ -17,5 +17,6 @@
\ No newline at end of file
diff --git a/res/xml/spellchecker_prefs.xml b/res/xml/spellchecker_prefs.xml
index 666b0a9b0c1..26476f46635 100644
--- a/res/xml/spellchecker_prefs.xml
+++ b/res/xml/spellchecker_prefs.xml
@@ -16,6 +16,7 @@
diff --git a/res/xml/vr_display_settings.xml b/res/xml/vr_display_settings.xml
index d04435ac810..9522af5b74b 100644
--- a/res/xml/vr_display_settings.xml
+++ b/res/xml/vr_display_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/webview_app_settings.xml b/res/xml/webview_app_settings.xml
index c7a611ace8b..51e472dc101 100644
--- a/res/xml/webview_app_settings.xml
+++ b/res/xml/webview_app_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/when_to_dream_settings.xml b/res/xml/when_to_dream_settings.xml
index 7b91a34b322..13f5ae49f23 100644
--- a/res/xml/when_to_dream_settings.xml
+++ b/res/xml/when_to_dream_settings.xml
@@ -17,4 +17,5 @@
diff --git a/res/xml/wifi_p2p_settings.xml b/res/xml/wifi_p2p_settings.xml
index 405d0810c81..f59479736e8 100644
--- a/res/xml/wifi_p2p_settings.xml
+++ b/res/xml/wifi_p2p_settings.xml
@@ -16,6 +16,7 @@
+ android:title="@string/wifi_hotspot_checkbox_text">
+ android:title="@string/zen_mode_settings_title">
getNonIndexableKeys(Context context) {
- List keys = super.getNonIndexableKeys(context);
- keys.add(KEY_ASSIST);
- return keys;
- }
};
}
diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
index 2e0e9b5c2ff..f220b8b1da0 100644
--- a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
+++ b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java
@@ -29,14 +29,17 @@ import android.widget.Toast;
import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.FooterPreference;
/**
* BluetoothPairingDetail is a page to scan bluetooth devices and pair them.
*/
+@SearchIndexable
public class BluetoothPairingDetail extends DeviceListPreferenceFragment implements
Indexable {
private static final String TAG = "BluetoothPairingDetail";
@@ -233,4 +236,7 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme
Toast.makeText(getContext(), R.string.connected_device_bluetooth_turned_on_toast,
Toast.LENGTH_SHORT).show();
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.bluetooth_pairing_detail);
}
diff --git a/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java b/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
index 1db2b86bc09..e7adf7f2a49 100644
--- a/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
+++ b/src/com/android/settings/bugreporthandler/BugReportHandlerPicker.java
@@ -35,7 +35,9 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.FooterPreference;
import java.util.ArrayList;
@@ -44,6 +46,7 @@ import java.util.List;
/**
* Picker for BugReportHandler.
*/
+@SearchIndexable
public class BugReportHandlerPicker extends DefaultAppPickerFragment {
private static final String TAG = "BugReportHandlerPicker";
@@ -202,4 +205,7 @@ public class BugReportHandlerPicker extends DefaultAppPickerFragment {
return super.loadLabel();
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.bug_report_handler_settings);
}
diff --git a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
index 12e978ff349..2d6a098f9b8 100644
--- a/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
+++ b/src/com/android/settings/connecteddevice/usb/UsbDefaultFragment.java
@@ -30,7 +30,9 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.RadioButtonPreference;
@@ -42,6 +44,7 @@ import java.util.List;
/**
* Provides options for selecting the default USB mode.
*/
+@SearchIndexable
public class UsbDefaultFragment extends RadioButtonPickerFragment {
@VisibleForTesting
UsbBackend mUsbBackend;
@@ -192,4 +195,7 @@ public class UsbDefaultFragment extends RadioButtonPickerFragment {
}
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.usb_default_fragment);
}
\ No newline at end of file
diff --git a/src/com/android/settings/core/PreferenceXmlParserUtils.java b/src/com/android/settings/core/PreferenceXmlParserUtils.java
index 240426d69d9..35f7ebbefe5 100644
--- a/src/com/android/settings/core/PreferenceXmlParserUtils.java
+++ b/src/com/android/settings/core/PreferenceXmlParserUtils.java
@@ -89,6 +89,7 @@ public class PreferenceXmlParserUtils {
int FLAG_NEED_PREF_APPEND = 1 << 10;
int FLAG_UNAVAILABLE_SLICE_SUBTITLE = 1 << 11;
int FLAG_FOR_WORK = 1 << 12;
+ int FLAG_NEED_FRAGMENT = 1 << 13;
}
public static final String METADATA_PREF_TYPE = "type";
@@ -102,6 +103,7 @@ public class PreferenceXmlParserUtils {
public static final String METADATA_APPEND = "staticPreferenceLocation";
public static final String METADATA_UNAVAILABLE_SLICE_SUBTITLE = "unavailable_slice_subtitle";
public static final String METADATA_FOR_WORK = "for_work";
+ public static final String METADATA_FRAGMENT = "fragment";
private static final String ENTRIES_SEPARATOR = "|";
@@ -250,6 +252,10 @@ public class PreferenceXmlParserUtils {
preferenceMetadata.putBoolean(METADATA_FOR_WORK,
isForWork(preferenceAttributes));
}
+ if (hasFlag(flags, MetadataFlag.FLAG_NEED_FRAGMENT)) {
+ preferenceMetadata.putString(METADATA_FRAGMENT,
+ getFragment(preferenceAttributes));
+ }
metadata.add(preferenceMetadata);
preferenceAttributes.recycle();
@@ -340,4 +346,9 @@ public class PreferenceXmlParserUtils {
return styledAttributes.getBoolean(
R.styleable.Preference_forWork, false);
}
+
+ private static String getFragment(TypedArray styledAttributes) {
+ return styledAttributes.getString(
+ com.android.internal.R.styleable.Preference_fragment);
+ }
}
\ No newline at end of file
diff --git a/src/com/android/settings/datetime/timezone/TimeZoneSettings.java b/src/com/android/settings/datetime/timezone/TimeZoneSettings.java
index ab4c176e119..8226a6ca5d8 100644
--- a/src/com/android/settings/datetime/timezone/TimeZoneSettings.java
+++ b/src/com/android/settings/datetime/timezone/TimeZoneSettings.java
@@ -39,7 +39,9 @@ import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.datetime.timezone.model.FilteredCountryTimeZones;
import com.android.settings.datetime.timezone.model.TimeZoneData;
import com.android.settings.datetime.timezone.model.TimeZoneDataLoader;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Date;
@@ -51,6 +53,7 @@ import java.util.Set;
/**
* The class displays a time zone picker either by regions or fixed offset time zones.
*/
+@SearchIndexable
public class TimeZoneSettings extends DashboardFragment {
private static final String TAG = "TimeZoneSettings";
@@ -387,4 +390,7 @@ public class TimeZoneSettings extends DashboardFragment {
private String getLocaleRegionId() {
return mLocale.getCountry().toUpperCase(Locale.US);
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.time_zone_prefs);
}
diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
index 0de9f67be36..c04b51c6bd6 100644
--- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java
@@ -163,7 +163,7 @@ public class AutomaticStorageManagerSettings extends DashboardFragment
/** For Search. */
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
+ new BaseSearchIndexProvider(R.xml.automatic_storage_management_settings) {
@Override
protected boolean isPageSearchEnabled(Context context) {
return false;
diff --git a/src/com/android/settings/development/compat/PlatformCompatDashboard.java b/src/com/android/settings/development/compat/PlatformCompatDashboard.java
index dab45f2d123..2b0c655416f 100644
--- a/src/com/android/settings/development/compat/PlatformCompatDashboard.java
+++ b/src/com/android/settings/development/compat/PlatformCompatDashboard.java
@@ -43,6 +43,8 @@ import com.android.internal.compat.IPlatformCompat;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.development.AppPicker;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -53,6 +55,7 @@ import java.util.TreeMap;
/**
* Dashboard for Platform Compat preferences.
*/
+@SearchIndexable
public class PlatformCompatDashboard extends DashboardFragment {
private static final String TAG = "PlatformCompatDashboard";
private static final String COMPAT_APP = "compat_app";
@@ -273,4 +276,7 @@ public class PlatformCompatDashboard extends DashboardFragment {
return true;
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.platform_compat_settings);
}
diff --git a/src/com/android/settings/deviceinfo/legal/ModuleLicensesDashboard.java b/src/com/android/settings/deviceinfo/legal/ModuleLicensesDashboard.java
index f74b68f923e..150dfff4d4d 100644
--- a/src/com/android/settings/deviceinfo/legal/ModuleLicensesDashboard.java
+++ b/src/com/android/settings/deviceinfo/legal/ModuleLicensesDashboard.java
@@ -20,7 +20,13 @@ import android.app.settings.SettingsEnums;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+/**
+ * Settings screen for mainline module licenses
+ */
+@SearchIndexable
public class ModuleLicensesDashboard extends DashboardFragment {
private static final String TAG = "ModuleLicensesDashboard";
@@ -43,4 +49,7 @@ public class ModuleLicensesDashboard extends DashboardFragment {
public int getHelpResource() {
return 0;
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.module_licenses);
}
diff --git a/src/com/android/settings/display/VrDisplayPreferencePicker.java b/src/com/android/settings/display/VrDisplayPreferencePicker.java
index 4612779ba5d..24102b07eb0 100644
--- a/src/com/android/settings/display/VrDisplayPreferencePicker.java
+++ b/src/com/android/settings/display/VrDisplayPreferencePicker.java
@@ -23,12 +23,18 @@ import android.provider.Settings;
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.RadioButtonPickerFragment;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.CandidateInfo;
import java.util.ArrayList;
import java.util.List;
+/**
+ * Settings picker screen to what display preferences are applied when device is in VR mode
+ */
+@SearchIndexable
public class VrDisplayPreferencePicker extends RadioButtonPickerFragment {
static final String PREF_KEY_PREFIX = "vr_display_pref_";
@@ -102,4 +108,7 @@ public class VrDisplayPreferencePicker extends RadioButtonPickerFragment {
return PREF_KEY_PREFIX + value;
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.vr_display_settings);
}
diff --git a/src/com/android/settings/dream/CurrentDreamPicker.java b/src/com/android/settings/dream/CurrentDreamPicker.java
index 3134e79ffdb..0ff7ee9638a 100644
--- a/src/com/android/settings/dream/CurrentDreamPicker.java
+++ b/src/com/android/settings/dream/CurrentDreamPicker.java
@@ -22,9 +22,11 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.dream.DreamBackend;
import com.android.settingslib.dream.DreamBackend.DreamInfo;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.CandidateInfo;
import java.util.HashMap;
@@ -32,6 +34,10 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+/**
+ * Settings picker screen for current screen saver
+ */
+@SearchIndexable
public final class CurrentDreamPicker extends RadioButtonPickerFragment {
private DreamBackend mBackend;
@@ -122,4 +128,7 @@ public final class CurrentDreamPicker extends RadioButtonPickerFragment {
return key;
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.current_dream_settings);
}
diff --git a/src/com/android/settings/dream/WhenToDreamPicker.java b/src/com/android/settings/dream/WhenToDreamPicker.java
index 1c5e25ebac2..7208154a44c 100644
--- a/src/com/android/settings/dream/WhenToDreamPicker.java
+++ b/src/com/android/settings/dream/WhenToDreamPicker.java
@@ -21,13 +21,19 @@ import android.content.Context;
import android.graphics.drawable.Drawable;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.dream.DreamBackend;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.CandidateInfo;
import java.util.ArrayList;
import java.util.List;
+/**
+ * Settings screen for decide when to start screen saver
+ */
+@SearchIndexable
public class WhenToDreamPicker extends RadioButtonPickerFragment {
private static final String TAG = "WhenToDreamPicker";
@@ -120,4 +126,7 @@ public class WhenToDreamPicker extends RadioButtonPickerFragment {
return key;
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.when_to_dream_settings);
}
diff --git a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java
index 67bf68786a6..9ccbcef3df7 100644
--- a/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java
+++ b/src/com/android/settings/enterprise/EnterpriseSetDefaultAppsListFragment.java
@@ -21,7 +21,9 @@ import android.content.Context;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
@@ -29,6 +31,7 @@ import java.util.List;
/**
* Fragment for displaying a list of default applications set by profile or device admin.
*/
+@SearchIndexable
public class EnterpriseSetDefaultAppsListFragment extends DashboardFragment {
static final String TAG = "EnterprisePrivacySettings";
@@ -56,4 +59,7 @@ public class EnterpriseSetDefaultAppsListFragment extends DashboardFragment {
controllers.add(controller);
return controllers;
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.enterprise_set_default_apps_settings);
}
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
index 507c36949d5..cc870c71cf6 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverScheduleSettings.java
@@ -34,8 +34,10 @@ import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.fuelgauge.BatterySaverUtils;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.widget.RadioButtonPreference;
@@ -53,6 +55,7 @@ import java.util.List;
* {@link BatterySaverScheduleSeekBarController} for the controller that manages user
* interactions in this screen.
*/
+@SearchIndexable
public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
public BatterySaverScheduleRadioButtonsController mRadioButtonController;
@@ -207,4 +210,7 @@ public class BatterySaverScheduleSettings extends RadioButtonPickerFragment {
return mSummary;
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.battery_saver_schedule_settings);
}
\ No newline at end of file
diff --git a/src/com/android/settings/gestures/GestureSettings.java b/src/com/android/settings/gestures/GestureSettings.java
index 763efaf9f17..412a92a25b0 100644
--- a/src/com/android/settings/gestures/GestureSettings.java
+++ b/src/com/android/settings/gestures/GestureSettings.java
@@ -75,12 +75,5 @@ public class GestureSettings extends DashboardFragment {
sir.xmlResId = R.xml.gestures;
return Arrays.asList(sir);
}
-
- @Override
- protected boolean isPageSearchEnabled(Context context) {
- // All rows in this screen can lead to a different page, so suppress everything
- // from this page to remove duplicates.
- return false;
- }
};
}
diff --git a/src/com/android/settings/inputmethod/SpellCheckersSettings.java b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
index 974f2c41eaa..1f10e4f7f9e 100644
--- a/src/com/android/settings/inputmethod/SpellCheckersSettings.java
+++ b/src/com/android/settings/inputmethod/SpellCheckersSettings.java
@@ -37,9 +37,15 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.SwitchBar.OnSwitchChangeListener;
+import com.android.settingslib.search.SearchIndexable;
+/**
+ * Settings screen for spell checker
+ */
+@SearchIndexable
public class SpellCheckersSettings extends SettingsPreferenceFragment
implements OnSwitchChangeListener, OnPreferenceClickListener, OnPreferenceChangeListener {
private static final String TAG = SpellCheckersSettings.class.getSimpleName();
@@ -274,4 +280,7 @@ public class SpellCheckersSettings extends SettingsPreferenceFragment
}
updatePreferenceScreen();
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.spellchecker_prefs);
}
diff --git a/src/com/android/settings/network/NetworkScorerPicker.java b/src/com/android/settings/network/NetworkScorerPicker.java
index 9ecab3bfb6f..effa38ab96f 100644
--- a/src/com/android/settings/network/NetworkScorerPicker.java
+++ b/src/com/android/settings/network/NetworkScorerPicker.java
@@ -31,6 +31,8 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.RadioButtonPreference;
import java.util.List;
@@ -38,6 +40,7 @@ import java.util.List;
/**
* Fragment for choosing default network scorer.
*/
+@SearchIndexable
public class NetworkScorerPicker extends InstrumentedPreferenceFragment implements
RadioButtonPreference.OnClickListener {
@@ -142,4 +145,7 @@ public class NetworkScorerPicker extends InstrumentedPreferenceFragment implemen
NetworkScoreManager createNetworkScorerManager(Context context) {
return (NetworkScoreManager) context.getSystemService(Context.NETWORK_SCORE_SERVICE);
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.network_scorer_picker_prefs);
}
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index 29b114a3183..8098b803f95 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -57,9 +57,6 @@ public class LockscreenDashboardFragment extends DashboardFragment
@VisibleForTesting
static final String KEY_LOCK_SCREEN_NOTIFICATON_WORK_PROFILE =
"security_setting_lock_screen_notif_work";
- @VisibleForTesting
- static final String KEY_ADD_USER_FROM_LOCK_SCREEN =
- "security_lockscreen_add_users_when_locked";
private AmbientDisplayConfiguration mConfig;
@@ -141,13 +138,6 @@ public class LockscreenDashboardFragment extends DashboardFragment
return controllers;
}
- @Override
- public List getNonIndexableKeys(Context context) {
- final List niks = super.getNonIndexableKeys(context);
- niks.add(KEY_ADD_USER_FROM_LOCK_SCREEN);
- return niks;
- }
-
@Override
protected boolean isPageSearchEnabled(Context context) {
return new LockScreenPreferenceController(context, "anykey")
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
index b1dfd1454f9..e7d7ea3be13 100644
--- a/src/com/android/settings/webview/WebViewAppPicker.java
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -33,11 +33,17 @@ import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.applications.DefaultAppInfo;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
+/**
+ * Settings picker screen to handle Web implementation
+ */
+@SearchIndexable
public class WebViewAppPicker extends DefaultAppPickerFragment {
private WebViewUpdateServiceWrapper mWebViewUpdateServiceWrapper;
@@ -164,4 +170,7 @@ public class WebViewAppPicker extends DefaultAppPickerFragment {
}
return null;
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.webview_app_settings);
}
diff --git a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
index 8544a53cdb3..f965e208c7b 100644
--- a/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
+++ b/src/com/android/settings/wifi/p2p/WifiP2pSettings.java
@@ -56,14 +56,17 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.List;
-/*
+/**
* Displays Wi-fi p2p settings UI
*/
+@SearchIndexable
public class WifiP2pSettings extends DashboardFragment
implements PersistentGroupInfoListener, PeerListListener, DeviceInfoListener {
@@ -631,4 +634,7 @@ public class WifiP2pSettings extends DashboardFragment
});
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.wifi_p2p_settings);
}
diff --git a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
index 863e87a268e..ab2aada6392 100644
--- a/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
+++ b/src/com/android/settings/wifi/savedaccesspoints/SavedAccessPointsWifiSettings.java
@@ -27,14 +27,17 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.WifiSettings;
import com.android.settings.wifi.details.WifiNetworkDetailsFragment;
+import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPointPreference;
/**
* UI to manage saved networks/access points.
*/
+@SearchIndexable
public class SavedAccessPointsWifiSettings extends DashboardFragment {
private static final String TAG = "SavedAccessPoints";
@@ -130,4 +133,7 @@ public class SavedAccessPointsWifiSettings extends DashboardFragment {
outState.putBundle(SAVE_DIALOG_ACCESS_POINT_STATE, mAccessPointSavedState);
}
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.wifi_display_saved_access_points);
}
diff --git a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
index 0145bb48d32..16bb2ccd23c 100644
--- a/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
+++ b/src/com/android/settings/wifi/savedaccesspoints2/SavedAccessPointsWifiSettings2.java
@@ -37,8 +37,10 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.WifiSettings;
import com.android.settings.wifi.details2.WifiNetworkDetailsFragment2;
+import com.android.settingslib.search.SearchIndexable;
import com.android.wifitrackerlib.SavedNetworkTracker;
import java.time.Clock;
@@ -47,6 +49,7 @@ import java.time.ZoneOffset;
/**
* UI to manage saved networks/access points.
*/
+@SearchIndexable
public class SavedAccessPointsWifiSettings2 extends DashboardFragment
implements SavedNetworkTracker.SavedNetworkTrackerCallback {
@@ -164,4 +167,7 @@ public class SavedAccessPointsWifiSettings2 extends DashboardFragment
use(SubscribedAccessPointsPreferenceController2.class)
.displayPreference(screen, mSavedNetworkTracker.getSubscriptionWifiEntries());
}
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.wifi_display_saved_access_points2);
}
diff --git a/tests/robotests/assets/grandfather_fragment_not_searchable b/tests/robotests/assets/grandfather_fragment_not_searchable
new file mode 100644
index 00000000000..7488d5f152c
--- /dev/null
+++ b/tests/robotests/assets/grandfather_fragment_not_searchable
@@ -0,0 +1,20 @@
+com.android.settings.backup.ToggleBackupSettingFragment
+com.android.settings.applications.RunningServices
+com.android.settings.applications.ConvertToFbe
+com.android.settings.applications.appops.BackgroundCheckSummary
+com.android.settings.fuelgauge.InactiveApps
+com.android.settings.ResetNetwork
+com.android.settings.MasterClear
+com.android.settings.applications.manageapplications.ManageApplications
+com.android.settings.enterprise.ApplicationListFragment$EnterpriseInstalledPackages
+com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionLocation
+com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionMicrophone
+com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionCamera
+com.android.settings.vpn2.VpnSettings
+com.android.settings.security.CryptKeeperSettings
+com.android.settings.TrustedCredentialsSettings
+com.android.settings.UserCredentialsSettings
+com.android.settings.applications.defaultapps.DefaultAutofillPicker
+com.android.phone.NetworkSelectSetting
+com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment
+com.android.settings.nfc.AndroidBeam
\ No newline at end of file
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 80e179a1cc8..8aa12889553 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -17,7 +17,6 @@ com.android.settings.applications.AppLaunchSettings
com.android.settings.applications.AppStorageSettings
com.android.settings.applications.ConfirmConvertToFbe
com.android.settings.applications.ProcessStatsDetail
-com.android.settings.applications.ProcessStatsSummary
com.android.settings.applications.ProcessStatsUi
com.android.settings.applications.RunningServices
com.android.settings.applications.specialaccess.pictureinpicture.PictureInPictureDetails
@@ -26,7 +25,6 @@ com.android.settings.applications.UsageAccessDetails
com.android.settings.backup.ToggleBackupSettingFragment
com.android.settings.biometrics.fingerprint.FingerprintSettings$FingerprintSettingsFragment
com.android.settings.bluetooth.BluetoothDeviceDetailsFragment
-com.android.settings.bluetooth.BluetoothPairingDetail
com.android.settings.bluetooth.DevicePickerFragment
com.android.settings.dashboard.profileselector.ProfileSelectAccountFragment
com.android.settings.dashboard.profileselector.ProfileSelectManageApplications
@@ -34,24 +32,19 @@ com.android.settings.dashboard.profileselector.ProfileSelectLocationFragment
com.android.settings.datausage.AppDataUsage
com.android.settings.datausage.DataUsageList
com.android.settings.datausage.DataUsageSummary
-com.android.settings.datetime.timezone.TimeZoneSettings
-com.android.settings.development.compat.PlatformCompatDashboard
com.android.settings.deviceinfo.PrivateVolumeSettings
com.android.settings.deviceinfo.PublicVolumeSettings
com.android.settings.deviceinfo.StorageProfileFragment
-com.android.settings.deviceinfo.legal.ModuleLicensesDashboard
com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionCamera
com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionLocation
com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionMicrophone
com.android.settings.enterprise.ApplicationListFragment$EnterpriseInstalledPackages
-com.android.settings.enterprise.EnterpriseSetDefaultAppsListFragment
com.android.settings.fuelgauge.AdvancedPowerUsageDetail
com.android.settings.fuelgauge.InactiveApps
com.android.settings.fuelgauge.RestrictedAppDetails
com.android.settings.IccLockSettings
com.android.settings.inputmethod.InputMethodAndSubtypeEnabler
com.android.settings.inputmethod.KeyboardLayoutPickerFragment
-com.android.settings.inputmethod.SpellCheckersSettings
com.android.settings.location.LocationPersonalSettings
com.android.settings.location.LocationWorkProfileSettings
com.android.settings.network.ApnEditor
@@ -88,10 +81,7 @@ com.android.settings.wifi.ChangeWifiStateDetails
com.android.settings.wifi.calling.WifiCallingSettingsForSub
com.android.settings.wifi.details.WifiNetworkDetailsFragment
com.android.settings.wifi.dpp.WifiNetworkListFragment
-com.android.settings.wifi.p2p.WifiP2pSettings
-com.android.settings.wifi.savedaccesspoints.SavedAccessPointsWifiSettings
com.android.settings.wifi.WifiInfo
com.android.settings.applications.specialaccess.notificationaccess.NotificationAccessDetails
com.android.settings.wifi.details2.WifiNetworkDetailsFragment2
-com.android.settings.wifi.savedaccesspoints2.SavedAccessPointsWifiSettings2
com.android.settings.dashboard.profileselector.ProfileSelectRecentLocationRequestFragment
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
index 778bb79c5b2..4a6816ff393 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
@@ -81,7 +81,7 @@ public class ConnectedDeviceDashboardFragmentTest {
final List niks = ConnectedDeviceDashboardFragment.SEARCH_INDEX_DATA_PROVIDER
.getNonIndexableKeys(mContext);
- assertThat(niks).containsExactly(KEY_CONNECTED_DEVICES, KEY_AVAILABLE_DEVICES,
+ assertThat(niks).containsAllOf(KEY_CONNECTED_DEVICES, KEY_AVAILABLE_DEVICES,
KEY_NEARBY_DEVICES, KEY_DISCOVERABLE_FOOTER);
}
diff --git a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java
index 44b0187e47b..bbbeeb800ee 100644
--- a/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java
+++ b/tests/robotests/src/com/android/settings/core/codeinspection/CodeInspectionTest.java
@@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat;
import com.android.settings.core.BasePreferenceControllerSignatureInspector;
import com.android.settings.core.instrumentation.InstrumentableFragmentCodeInspector;
+import com.android.settings.search.FragmentSearchIndexableCodeInspector;
import com.android.settings.search.SearchIndexProviderCodeInspector;
import com.android.settings.slices.SliceControllerInXmlCodeInspector;
@@ -71,4 +72,9 @@ public class CodeInspectionTest {
public void runLifecycleObserverInspection() {
new LifecycleObserverCodeInspector(mClasses).run();
}
+
+ @Test
+ public void runFragmentIndexableInspection() throws Exception {
+ new FragmentSearchIndexableCodeInspector(mClasses).run();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/search/FragmentSearchIndexableCodeInspector.java b/tests/robotests/src/com/android/settings/search/FragmentSearchIndexableCodeInspector.java
new file mode 100644
index 00000000000..a24a64359d3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/search/FragmentSearchIndexableCodeInspector.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search;
+
+import static com.android.settings.core.PreferenceXmlParserUtils.METADATA_FRAGMENT;
+
+import static com.google.common.truth.Truth.assertThat;
+import static com.google.common.truth.Truth.assertWithMessage;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.provider.SearchIndexableResource;
+import android.text.TextUtils;
+
+import com.android.settings.core.InstrumentedPreferenceFragment;
+import com.android.settings.core.PreferenceXmlParserUtils;
+import com.android.settings.core.codeinspection.CodeInspector;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.search.Indexable;
+import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.search.SearchIndexableData;
+
+import org.robolectric.RuntimeEnvironment;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * {@link CodeInspector} to ensure preferences with fragments implement search components correctly.
+ */
+public class FragmentSearchIndexableCodeInspector extends CodeInspector {
+
+ private final String mErrorNonIndexFragments =
+ "The following fragments were used by 'android:fragment=Fragment_Class_Name' in "
+ + "corresponding caller preference Xml. This preference won't be searchable, "
+ + "the fragment should implement SearchIndexable for Settings Search. If it "
+ + "should not be searchable, add the fragment's classname to "
+ + "grandfather_fragment_not_searchable. Fragments:\n";
+
+ private final Context mContext;
+ private final List mXmlDeclaredFragments = new ArrayList<>();
+ private final List mGrandfatherNotSearchIndesable = new ArrayList<>();
+
+ public FragmentSearchIndexableCodeInspector(List> classes) throws Exception {
+ super(classes);
+ mContext = RuntimeEnvironment.application;
+
+ initDeclaredFragments();
+ initializeGrandfatherList(mGrandfatherNotSearchIndesable,
+ "grandfather_fragment_not_searchable");
+ }
+
+ @Override
+ public void run() {
+ for (Class> clazz : mClasses) {
+ if (!isConcreteSettingsClass(clazz)) {
+ // Only care about non-abstract classes.
+ continue;
+ }
+ if (!InstrumentedPreferenceFragment.class.isAssignableFrom(clazz)) {
+ // Only care about InstrumentedPreferenceFragment
+ continue;
+ }
+
+ try {
+ clazz.getField("SEARCH_INDEX_DATA_PROVIDER");
+ mXmlDeclaredFragments.remove(clazz.getName());
+ continue;
+ } catch (NoSuchFieldException e) {
+ }
+
+ if (SearchIndexable.class.isAssignableFrom(clazz)) {
+ mXmlDeclaredFragments.remove(clazz.getName());
+ continue;
+ }
+ }
+
+ mXmlDeclaredFragments.removeAll(mGrandfatherNotSearchIndesable);
+
+ final String missingFragmentError =
+ buildErrorMessage(mErrorNonIndexFragments, mXmlDeclaredFragments);
+
+ assertWithMessage(missingFragmentError).that(mXmlDeclaredFragments).isEmpty();
+ }
+
+ private String buildErrorMessage(String errorSummary, List errorClasses) {
+ final StringBuilder error = new StringBuilder(errorSummary);
+ for (String c : errorClasses) {
+ error.append(c).append("\n");
+ }
+ return error.toString();
+ }
+
+ private void initDeclaredFragments() throws IOException, XmlPullParserException {
+ final List xmlResources = getIndexableXml();
+ for (int xmlResId : xmlResources) {
+ final List metadata = PreferenceXmlParserUtils.extractMetadata(mContext,
+ xmlResId, PreferenceXmlParserUtils.MetadataFlag.FLAG_NEED_FRAGMENT);
+ for (Bundle bundle : metadata) {
+ final String fragmentClassName = bundle.getString(METADATA_FRAGMENT);
+ if (TextUtils.isEmpty(fragmentClassName)) {
+ continue;
+ }
+ if (!mXmlDeclaredFragments.contains(fragmentClassName)) {
+ mXmlDeclaredFragments.add(fragmentClassName);
+ }
+ }
+ }
+ // We definitely have some fragments in xml, so assert not-empty here as a proxy to
+ // make sure the parser didn't fail
+ assertThat(mXmlDeclaredFragments).isNotEmpty();
+ }
+
+ private List getIndexableXml() {
+ final List xmlResSet = new ArrayList<>();
+
+ final Collection bundles = FeatureFactory.getFactory(
+ mContext).getSearchFeatureProvider().getSearchIndexableResources()
+ .getProviderValues();
+
+ for (SearchIndexableData bundle : bundles) {
+ Indexable.SearchIndexProvider provider = bundle.getSearchIndexProvider();
+
+ if (provider == null) {
+ continue;
+ }
+
+ List resources = provider.getXmlResourcesToIndex(mContext,
+ true);
+
+ if (resources == null) {
+ continue;
+ }
+
+ for (SearchIndexableResource resource : resources) {
+ // Add '0's anyway. It won't break the test.
+ xmlResSet.add(resource.xmlResId);
+ }
+ }
+ return xmlResSet;
+ }
+}