Settings search - Navigate user to exact page
- remove duplicate index preference - default set searchable = false when the preference has fragment - make some fragments indexable Bug: 143057584 Test: robotest & manual Change-Id: I4d64f6106d2f92f0a45e8c7e26388677f593f412
This commit is contained in:
@@ -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">
|
||||
<Preference
|
||||
android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
|
||||
android:key="screen_magnification_gestures_preference_screen"
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="accessibility_notification_vibration_screen"
|
||||
android:title="@string/accessibility_notification_vibration_title" />
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="accessibility_ring_vibration_screen"
|
||||
android:title="@string/accessibility_ring_vibration_title" />
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="accessibility_shortcut_service_screen"
|
||||
android:title="@string/accessibility_shortcut_service_title" />
|
||||
|
@@ -15,6 +15,7 @@
|
||||
-->
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="accessibility_shortcut_settings_screen"
|
||||
android:title="@string/accessibility_global_gesture_preference_title" >
|
||||
|
||||
<Preference
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="accessibility_touch_vibration_screen"
|
||||
android:title="@string/accessibility_touch_vibration_title" />
|
||||
|
@@ -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">
|
||||
<intent
|
||||
android:action="android.intent.action.MAIN"
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="automatic_storage_manager_screen"
|
||||
android:title="@string/automatic_storage_manager_settings" >
|
||||
|
||||
<DropDownPreference
|
||||
|
@@ -18,6 +18,7 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="battery_saver_schedule_screen"
|
||||
android:title="@string/battery_saver_schedule_settings_title"
|
||||
settings:staticPreferenceLocation="append">
|
||||
</PreferenceScreen >
|
||||
|
@@ -17,6 +17,7 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="bluetooth_pairing_detail_screen"
|
||||
android:title="@string/bluetooth_pairing_pref_title">
|
||||
|
||||
<Preference
|
||||
|
@@ -18,6 +18,7 @@
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="bug_report_handler_screen"
|
||||
android:title="@string/bug_report_handler_title"
|
||||
settings:staticPreferenceLocation="append" >
|
||||
</PreferenceScreen>
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="current_screensaver_screen"
|
||||
android:title="@string/screensaver_settings_current" />
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="voice_input_settings_screen"
|
||||
android:title="@string/voice_input_settings_title" />
|
||||
|
@@ -17,7 +17,8 @@
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="enterprise_set_default_apps_settings">
|
||||
android:key="enterprise_set_default_apps_settings"
|
||||
android:title="@string/enterprise_privacy_enterprise_set_default_apps">
|
||||
<PreferenceCategory
|
||||
android:key="dashboard_tile_placeholder"/>
|
||||
</PreferenceScreen>
|
||||
|
@@ -17,5 +17,6 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="network_scorer_picker_screen"
|
||||
android:title="@string/network_scorer_picker_title">
|
||||
</PreferenceScreen>
|
@@ -16,6 +16,7 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="spellcheckers_screen"
|
||||
android:title="@string/spellcheckers_settings_title">
|
||||
<Preference
|
||||
android:key="spellchecker_language"
|
||||
|
@@ -18,6 +18,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="tether_prefs_screen"
|
||||
settings:keywords="@string/keywords_hotspot_tethering"
|
||||
android:title="@string/tether_settings_title_all">
|
||||
|
||||
<com.android.settings.widget.FixedLineSummaryPreference
|
||||
|
@@ -16,6 +16,6 @@
|
||||
-->
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:title="@string/usb_pref"
|
||||
android:title="@string/usb_default_label"
|
||||
android:key="usb_default_fragment">
|
||||
</PreferenceScreen>
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="display_vr_pref_screen"
|
||||
android:title="@string/display_vr_pref_title" />
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="select_webview_provider_screen"
|
||||
android:title="@string/select_webview_provider_title" />
|
||||
|
@@ -17,4 +17,5 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="screensaver_when_to_dream_screen"
|
||||
android:title="@string/screensaver_settings_when_to_dream" />
|
||||
|
@@ -16,6 +16,7 @@
|
||||
|
||||
<PreferenceScreen
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:key="wifi_p2p_settings_screen"
|
||||
android:title="@string/wifi_p2p_settings_title">
|
||||
<Preference
|
||||
android:key="p2p_this_device"
|
||||
|
@@ -19,8 +19,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="wifi_tether_settings_screen"
|
||||
android:title="@string/wifi_hotspot_checkbox_text"
|
||||
settings:searchable="false">
|
||||
android:title="@string/wifi_hotspot_checkbox_text">
|
||||
|
||||
<com.android.settings.wifi.tether.WifiTetherSsidPreference
|
||||
android:key="wifi_tether_network_name"
|
||||
|
@@ -19,8 +19,7 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:settings="http://schemas.android.com/apk/res-auto"
|
||||
android:key="zen_mode_settings"
|
||||
android:title="@string/zen_mode_settings_title"
|
||||
settings:searchable="false">
|
||||
android:title="@string/zen_mode_settings_title">
|
||||
|
||||
<PreferenceCategory
|
||||
android:key="zen_mode_settings_category_behavior"
|
||||
|
@@ -34,10 +34,10 @@ import androidx.preference.SwitchPreference;
|
||||
|
||||
import com.android.internal.accessibility.AccessibilityShortcutController;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.widget.SwitchBar;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settingslib.search.Indexable;
|
||||
import com.android.settings.widget.SwitchBar;
|
||||
import com.android.settingslib.accessibility.AccessibilityUtils;
|
||||
import com.android.settingslib.search.Indexable;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/**
|
||||
@@ -201,11 +201,5 @@ public class AccessibilityShortcutPreferenceFragment extends ToggleFeaturePrefer
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider() {
|
||||
// This fragment is for details of the shortcut. Only the shortcut itself needs
|
||||
// to be indexed.
|
||||
protected boolean isPageSearchEnabled(Context context) {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
new BaseSearchIndexProvider(R.xml.accessibility_shortcut_settings);
|
||||
}
|
||||
|
@@ -21,10 +21,13 @@ import android.os.Vibrator;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/**
|
||||
* Fragment for picking accessibility shortcut service
|
||||
*/
|
||||
@SearchIndexable
|
||||
public class NotificationVibrationPreferenceFragment extends VibrationPreferenceFragment {
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -59,4 +62,7 @@ public class NotificationVibrationPreferenceFragment extends VibrationPreference
|
||||
Vibrator vibrator = getContext().getSystemService(Vibrator.class);
|
||||
return vibrator.getDefaultNotificationVibrationIntensity();
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.accessibility_notification_vibration_settings);
|
||||
}
|
||||
|
@@ -21,10 +21,13 @@ import android.os.Vibrator;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/**
|
||||
* Fragment for picking accessibility shortcut service
|
||||
*/
|
||||
@SearchIndexable
|
||||
public class RingVibrationPreferenceFragment extends VibrationPreferenceFragment {
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -63,4 +66,7 @@ public class RingVibrationPreferenceFragment extends VibrationPreferenceFragment
|
||||
Vibrator vibrator = getContext().getSystemService(Vibrator.class);
|
||||
return vibrator.getDefaultRingVibrationIntensity();
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.accessibility_ring_vibration_settings);
|
||||
}
|
||||
|
@@ -43,8 +43,10 @@ import com.android.internal.accessibility.AccessibilityShortcutController;
|
||||
import com.android.internal.accessibility.AccessibilityShortcutController.ToggleableFrameworkFeatureInfo;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settings.widget.RadioButtonPickerFragment;
|
||||
import com.android.settingslib.accessibility.AccessibilityUtils;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
import com.android.settingslib.widget.CandidateInfo;
|
||||
import com.android.settingslib.widget.RadioButtonPreference;
|
||||
|
||||
@@ -55,6 +57,7 @@ import java.util.Map;
|
||||
/**
|
||||
* Fragment for picking accessibility shortcut service
|
||||
*/
|
||||
@SearchIndexable
|
||||
public class ShortcutServicePickerFragment extends RadioButtonPickerFragment {
|
||||
|
||||
@Override
|
||||
@@ -264,4 +267,7 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment {
|
||||
return mServiceInfo.getComponentName().flattenToString();
|
||||
}
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.accessibility_shortcut_service_settings);
|
||||
}
|
||||
|
@@ -21,10 +21,13 @@ import android.os.Vibrator;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/**
|
||||
* Fragment for picking accessibility shortcut service
|
||||
*/
|
||||
@SearchIndexable
|
||||
public class TouchVibrationPreferenceFragment extends VibrationPreferenceFragment {
|
||||
@Override
|
||||
public int getMetricsCategory() {
|
||||
@@ -59,4 +62,7 @@ public class TouchVibrationPreferenceFragment extends VibrationPreferenceFragmen
|
||||
protected int getPreviewVibrationAudioAttributesUsage() {
|
||||
return AudioAttributes.USAGE_ASSISTANCE_SONIFICATION;
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.accessibility_touch_vibration_settings);
|
||||
}
|
||||
|
@@ -29,7 +29,13 @@ import com.android.settings.SummaryPreference;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.applications.ProcStatsData.MemInfo;
|
||||
import com.android.settings.core.SubSettingLauncher;
|
||||
import com.android.settings.search.BaseSearchIndexProvider;
|
||||
import com.android.settingslib.search.SearchIndexable;
|
||||
|
||||
/**
|
||||
* Settings screen to provide memory stats summary
|
||||
*/
|
||||
@SearchIndexable
|
||||
public class ProcessStatsSummary extends ProcessStatsBase implements OnPreferenceClickListener {
|
||||
|
||||
private static final String KEY_STATUS_HEADER = "status_header";
|
||||
@@ -125,4 +131,7 @@ public class ProcessStatsSummary extends ProcessStatsBase implements OnPreferenc
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.process_stats_summary);
|
||||
}
|
||||
|
@@ -27,11 +27,17 @@ import android.text.TextUtils;
|
||||
import com.android.internal.app.AssistUtils;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Fragment for picking assistant voice input
|
||||
*/
|
||||
@SearchIndexable
|
||||
public class DefaultVoiceInputPicker extends DefaultAppPickerFragment {
|
||||
|
||||
private VoiceInputHelper mHelper;
|
||||
@@ -166,4 +172,7 @@ public class DefaultVoiceInputPicker extends DefaultAppPickerFragment {
|
||||
return new Intent(Intent.ACTION_MAIN).setComponent(mInfo.settings);
|
||||
}
|
||||
}
|
||||
|
||||
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
|
||||
new BaseSearchIndexProvider(R.xml.default_voice_settings);
|
||||
}
|
||||
|
@@ -37,7 +37,6 @@ import java.util.List;
|
||||
public class ManageAssist extends DashboardFragment {
|
||||
|
||||
private static final String TAG = "ManageAssist";
|
||||
private static final String KEY_ASSIST = "gesture_assist_application";
|
||||
|
||||
@Override
|
||||
protected String getLogTag() {
|
||||
@@ -85,12 +84,5 @@ public class ManageAssist extends DashboardFragment {
|
||||
Context context) {
|
||||
return buildPreferenceControllers(context, null /* lifecycle */);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getNonIndexableKeys(Context context) {
|
||||
List<String> keys = super.getNonIndexableKeys(context);
|
||||
keys.add(KEY_ASSIST);
|
||||
return keys;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
@@ -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;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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<String> getNonIndexableKeys(Context context) {
|
||||
final List<String> 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")
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
20
tests/robotests/assets/grandfather_fragment_not_searchable
Normal file
20
tests/robotests/assets/grandfather_fragment_not_searchable
Normal file
@@ -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
|
@@ -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
|
||||
|
@@ -81,7 +81,7 @@ public class ConnectedDeviceDashboardFragmentTest {
|
||||
final List<String> 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);
|
||||
}
|
||||
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
@@ -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<String> mXmlDeclaredFragments = new ArrayList<>();
|
||||
private final List<String> mGrandfatherNotSearchIndesable = new ArrayList<>();
|
||||
|
||||
public FragmentSearchIndexableCodeInspector(List<Class<?>> 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<String> 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<Integer> xmlResources = getIndexableXml();
|
||||
for (int xmlResId : xmlResources) {
|
||||
final List<Bundle> 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<Integer> getIndexableXml() {
|
||||
final List<Integer> xmlResSet = new ArrayList<>();
|
||||
|
||||
final Collection<SearchIndexableData> bundles = FeatureFactory.getFactory(
|
||||
mContext).getSearchFeatureProvider().getSearchIndexableResources()
|
||||
.getProviderValues();
|
||||
|
||||
for (SearchIndexableData bundle : bundles) {
|
||||
Indexable.SearchIndexProvider provider = bundle.getSearchIndexProvider();
|
||||
|
||||
if (provider == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
List<SearchIndexableResource> 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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user