Evrensel arama

Android 8.0, Ayarlar menüsü için genişletilmiş arama özellikleri ekler. Bu belgede bir ayarın nasıl ekleneceği ve bunun Ayarlar araması için uygun şekilde dizine eklenmesinin nasıl sağlanacağı açıklanmaktadır.

Dizinlenebilir ayarlar oluşturma

Dizine eklenmesi gereken her Ayarlar parçası, Indexable arayüzü uygular VE statik alanı gerektirir:

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Parçanızı indeksleme için ayarladıktan sonra, onu şurada bulunan SearchIndexableResources ekleyin:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

İsteğe bağlı yöntemler

Bu SearchIndexProvider arayüzünün dört isteğe bağlı yöntemi vardır.

getXmlResourcesToIndex

  • Parça içeriğiniz şu kaynaktan geliyorsa bunu geçersiz kılın: preference xml
  • Dizine eklenecek bir liste olarak bir XML tercihini döndürür.

XML kaynakları örneği:

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;
}

getRawDataToIndex

  • Parça içeriğiniz şu kaynaktan DEĞİLSE bunu geçersiz kılın: preference xml
  • Dizine eklenecek Ham verilerin ( SearchIndexableRaw ) listesini döndürür.

Ham veri örneği:

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;
}

getNonIndexableKeys

  • Parçanız bir DashboardFragment ise, bunu nadiren geçersiz kılmanız gerekir.
  • Belirli bir kullanıcı, cihaz, yapılandırma vb. için gösterilmemesi gereken sonuçlara karşılık gelen anahtarların listesini döndürür. Burada sağlanan anahtarlar, SearchIndexableResource ve SearchIndexableRaw içindeki KEY alanıyla eşleşmelidir.
  • Örneğin: Veri Kullanımı, cihazlarında hiç SIM kartı olmayan kullanıcılara görünmemelidir.

Dizine alınamayan anahtarlar örneği:

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

Bu parçayla ilişkili tercih denetleyicilerinin listesini döndürür. Bu liste, satır içi sonuçları oluşturmak, indekslenemeyenleri güncellemek vb. için kullanılır.

Bu nedenle, aramada görünmesini istediğiniz her şeyin getXmlResourcesToIndex veya getRawDataToIndex dahil edilmesi gerekir.

Ayarlarınız için anahtar kelimeler ekleme

Bir ayarın kolayca aranabilmesini sağlamak için kullanıcının ayarı aramak için kullanabileceği, ayarla alakalı anahtar sözcükler ekleyin.

Anahtar kelime eklerken dikkat edilmesi gerekenler:

  • Anahtar kelimeler, kullanıcının mutlaka görmediği ancak ortamın nasıl çalıştığına ilişkin zihinsel modelinin parçası olabilecek kelimelerin bir listesidir.
  • Bunlar, kullanıcının ayarınıza ulaşmak için yazabileceği kelimelerdir.
  • Bunlar eşanlamlı olabilir veya ayarla ilişkili herhangi bir kelime kullanılabilir.
  • Örneğin, Ses ayarını bulmak için "sessiz" kullanılabilir.

Çoğaltmayı önlemek

Bir ayarlar sayfasını koşulsuz olarak gizliyorsanız, sonuçların tekrarlanmasını önlemek için orijinal sayfanın indekslenmesini kaldırın.

  1. Bastırdığınız sayfanın PreferenceFragment bulun.
  2. SearchIndexProvider kaldırın.

Doğrulama

Yeni bir ayarın aranabilirliğini test etmek için:

  1. Cihaza O'nun yeni bir sürümünü yükleyin.
  2. Aşağıdakileri seçerek veritabanını yeniden dizinleyin:
  3. Ayarlar > Uygulamalar ve Bildirimler > Uygulama bilgileri > Ayarlar > Depolama > Verileri Temizle
  4. Hedef ayarların aramada göründüğünü doğrulayın.
    Bir ayarın başlığının önekini aramak, onunla eşleşecektir.

Bu roboelektrik testler, bu özelliğin uygulanmasını doğrulamak için çalıştırılabilir:
packages/apps/Settings/tests/robotests/src/com/android/settings/search

Derleme hedefi şudur: RunSettingsRoboTests