Genel arama

Android 8.0, Ayarlar menüsüne genişletilmiş arama özellikleri ekledi. Bu dokümanda, bir ayarın nasıl ekleneceği ve Ayarlar'da arama için düzgün şekilde dizine eklendiğinden nasıl emin olunacağı açıklanmaktadır.

Dizine eklenebilir ayarlar oluşturma

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

public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER

Parçanız dizine eklenmek üzere ayarlandıktan sonra şu konumda bulunan SearchIndexableResources klasörüne ekleyin:
packages/apps/Settings/src/com/android/settings/search/SearchIndexableResources.java

İsteğe bağlı yöntemler

Bu SearchIndexProviderarayüzde isteğe bağlı dört yöntem vardır.

getXmlResourcesToIndex

  • Parça içeriğiniz şu kaynaktan geliyorsa bunu geçersiz kıl: preference xml
  • Dizine eklenecek bir liste olarak 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 listesini (SearchIndexableRaw) 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 nadiren bunu geçersiz kılmanız gerekir.
  • Belirtilen kullanıcı, cihaz, yapılandırma vb. için görünmemesi 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 olmamış kullanıcılara gösterilmemelidir.

Dizine eklenemeyen 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şkilendirilmiş tercih denetleyicilerinin listesini döndürür. Bu liste, satır içi sonuçları oluşturmak, dizine eklenemez öğeleri güncellemek vb. için kullanılır.

Bu nedenle, aramada görünmesini istediğiniz her şey getXmlResourcesToIndex veya getRawDataToIndex içinde yer almalıdır.

Ayarlarınız için anahtar kelimeler ekleyin

Bir ayarın kolayca aranabilir olmasını sağlamak için kullanıcının ayarı aramak için kullanabileceği ayarla alakalı anahtar kelimeler ekleyin.

Anahtar kelime eklerken göz önünde bulundurulması gereken noktalar:

  • Anahtar kelimeler, kullanıcının her zaman görmediği ancak ayarın işleyiş şekliyle ilgili zihinsel modelinin bir parçası olabilecek kelimelerin bir listesidir.
  • Bunlar, kullanıcının ayarınıza ulaşmak için yazabileceği kelimelerdir.
  • Bunlar, eş anlamlılar olabilir veya ayarla ilişkilendirilmiş tüm kelimeler kullanılabilir.
  • Örneğin, Ses düzeyi ayarını bulmak için "sesi kapat" kullanılabilir.

Yinelenenlerden kaçının

Bir ayarlar sayfasını koşulsuz olarak atıyorsanız sonuçların yinelenmesini önlemek için orijinal sayfanın dizine eklenmesini kaldırın.

  1. Engellemekte olduğunuz sayfanın PreferenceFragment kısmını bulun.
  2. SearchIndexProvider kaldırın.

Doğrulama

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

  1. Cihaza O'nun son sürümünü yükleyin.
  2. Aşağıdakileri seçerek veritabanını yeniden dizine ekleyin:
  3. Ayarlar > Uygulamalar ve Bildirimler > Uygulama bilgileri > Ayarlar > Depolama > Verileri Temizle
  4. Hedef ayarlarının aramada göründüğünü doğrulayın.
    Bir ayarın başlığının ön ekini aradığınızda bu ön ekle eşleşir.

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

Derleme hedefi: RunSettingsRoboTests