Wyszukiwanie uniwersalne

Android 8.0 dodaje rozszerzone możliwości wyszukiwania w menu Ustawienia . W tym dokumencie opisano, jak dodać ustawienie i upewnić się, że jest ono prawidłowo zaindeksowane podczas wyszukiwania ustawień.

Tworzenie ustawień indeksowanych

Każdy fragment ustawień, który wymaga indeksowania, implementuje interfejs Indexable ORAZ wymaga pola statycznego:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Po skonfigurowaniu fragmentu do indeksowania dodaj go do SearchIndexableResources znajdującego się pod adresem:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

Metody opcjonalne

Ten interfejs SearchIndexProvider ma cztery opcjonalne metody.

getXmlResourcesToIndex

  • Zastąp tę opcję, jeśli zawartość fragmentu pochodzi z: preference xml
  • Zwraca preferencję XML w postaci listy do indeksowania.

Przykład zasobów XML:

public List<SearchIndexableResource> getXmlResourcesToIndex(Context context, boolean enabled) {
    ArrayList<SearchIndexableResource> result =  new ArrayList<SearchIndexableResource>();
SearchIndexableResource sir = new SearchIndexableResource(context);
	sir.xmlResId = R.xml.display_settings;
	result.add(sir);

    return result;
}

pobierzRawDataToIndex

  • Zastąp tę opcję, jeśli zawartość fragmentu NIE pochodzi z: preference xml
  • Zwraca listę nieprzetworzonych danych ( SearchIndexableRaw ) do zaindeksowania.

Przykład surowych danych:

public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
              final List<SearchIndexableRaw> result = new ArrayList<>();
              final Resources res = context.getResources();

              // Add fragment title
       SearchIndexableRaw data = new SearchIndexableRaw(context);
       data.title = res.getString(R.string.wifi_settings);
       data.screenTitle = res.getString(R.string.wifi_settings);
       data.keywords = res.getString(R.string.keywords_wifi);
       data.key = DATA_KEY_REFERENCE;
       result.add(data);

       return result;
}

pobierz klucze nieindeksowalne

  • Jeśli Twój fragment to DashboardFragment , rzadko trzeba to zastępować.
  • Zwraca listę kluczy odpowiadających wynikom, które nie powinny pojawić się dla danego użytkownika, urządzenia, konfiguracji itp. Podane tutaj klucze powinny pasować do pola KEY w SearchIndexableResource i SearchIndexableRaw .
  • Na przykład: Użycie danych nie powinno być wyświetlane użytkownikom, którzy nigdy nie mieli karty SIM w swoim urządzeniu.

Przykład kluczy nieindeksowalnych:

public List<String> getNonIndexableKeys(Context context) {
      final List<String> keys = super.getNonIndexableKeys(context);
              if (!checkIntentAction(context, "android.settings.TERMS")) {
                  keys.add(KEY_TERMS);
              }
              if (!checkIntentAction(context, "android.settings.LICENSE")) {
                  keys.add(KEY_LICENSE);
              }
              if (!checkIntentAction(context, "android.settings.COPYRIGHT")) {
                  keys.add(KEY_COPYRIGHT);
              }
              if (!checkIntentAction(context, "android.settings.WEBVIEW_LICENSE")) {
                  keys.add(KEY_WEBVIEW_LICENSE);
              }
              return keys;
}

getPreferenceControllers

Zwraca listę kontrolerów preferencji powiązanych z tym fragmentem. Ta lista służy do tworzenia wyników wbudowanych, aktualizacji nieindeksowalnych itp.

Dlatego wszystko, co chcesz wyświetlić w wyszukiwaniu, musi zostać uwzględnione w getXmlResourcesToIndex lub getRawDataToIndex .

Dodawanie słów kluczowych do ustawień

Aby mieć pewność, że ustawienie będzie łatwe do przeszukiwania, dodaj słowa kluczowe powiązane z ustawieniem, których użytkownik będzie mógł użyć do wyszukania tego ustawienia.

Rzeczy, które należy wziąć pod uwagę podczas dodawania słów kluczowych:

  • Słowa kluczowe to lista słów, które użytkownik niekoniecznie widzi, ale mogą stanowić część jego mentalnego modelu działania ustawienia.
  • Są to słowa, które użytkownik może wpisać, aby przejść do ustawień.
  • Mogą to być synonimy lub można użyć dowolnych słów związanych z ustawieniem.
  • Na przykład „wyciszenie” może zostać użyte do znalezienia ustawienia głośności.

Unikanie powielania

Jeśli bezwarunkowo pomijasz stronę ustawień, usuń indeksowanie oryginalnej strony, aby uniknąć powielania wyników.

  1. Znajdź PreferenceFragment strony, którą pomijasz.
  2. Usuń SearchIndexProvider .

Walidacja

Aby przetestować możliwość wyszukiwania nowego ustawienia:

  1. Zainstaluj najnowszą wersję O na urządzeniu.
  2. Zindeksuj ponownie bazę danych wybierając:
  3. Ustawienia > Aplikacje i powiadomienia > Informacje o aplikacjach > Ustawienia > Pamięć > Wyczyść dane
  4. Sprawdź, czy ustawienia celu pojawiają się w wyszukiwaniu.
    Wyszukiwanie przedrostka tytułu ustawienia spowoduje jego dopasowanie.

W celu sprawdzenia wdrożenia tej funkcji można przeprowadzić następujące testy robotyczne:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

Celem kompilacji jest: RunSettingsRoboTests