Araç Ayarlarında Dikkat Dağıtma Optimizasyonu

Dikkat dağıtma optimizasyonu (DO), araç hareket halindeyken sürücünün Ayarlar uygulamasıyla etkileşimini azaltan bir araç olarak sunuluyor. Uygulamanın tamamen engellenmemesi için bazı ayarların sürüş sırasında değiştirilmesi gerekebilir. Ancak varsayılan olarak çoğu tercih devre dışıdır ve yalnızca temel ve kolayca güncellenen tercihler etkinleştirilir.

Sürüş sırasında etkinleştirilmiş uygulamalar

Şekil 1. Araç kullanırken etkinleştirilen uygulamalar

Aşağıda gösterildiği gibi dikkat dağıtacak şekilde optimize edilmemişlerse etkinliklerin tamamı da engellenebilir. Bu yöntem şu anda öncelikle ayar araması için kullanılmaktadır.

Tüm etkinlikler engellendi

Şekil 2. Tüm etkinlikler engellendi

DO performansına yönelik temel özelleştirmeler, yapılandırma katmanları aracılığıyla yapılabilir. Daha ince taneli özelleştirmeye ihtiyacınız varsa kod aracılığıyla ek değişiklikler yapılabilir.

Üst düzey özelleştirme

Sürüş sırasında bir tercih devre dışı bırakıldığında, tercihe dokunulduğunda, tercihin kendisine bağlı bir tercih denetleyicisi olması koşuluyla, sürüş sırasında tercihin kullanılamadığını belirten bir mesaj görüntülenir. Mesaj, bir yer paylaşımıyla özelleştirilebilen restricted_while_driving dizesini kullanır (dizenin 60 karakter sınırından az olması koşuluyla).

Özelleştirilmiş katman

Şekil 3. Özelleştirilmiş katman

DO çerçevesinin tamamı config_always_ignore_ux_restrictions kullanılarak devre dışı bırakılabilir. Bunu true olarak ayarlamak, sürücünün Ayarlar uygulamasının her yönüyle etkileşimde bulunabileceği anlamına gelir.

<bool name="config_always_ignore_ux_restrictions">true</bool>

Yukarıdaki yapılandırma false olarak ayarlanırsa Ayarlar uygulaması, sürüş sırasında hangi tercihlerin etkinleştirilmesi gerektiğini belirlemek için config_ignore_ux_restrictions ayarına geri döner. Burada sağlanan dizeler, preference_keys.xml.

Örnek

Sürüş sırasında derinlemesine iç içe geçmiş bir ayarın nasıl etkinleştirileceğini göstermek için bu örnek, Metin-Konuşma (TTS) çıkış ayarlarının nasıl etkinleştirileceğini gösterir. Bunun çalışması için hiyerarşideki tüm ayarları config_ignore_ux_restrictions ekleyin. Hiyerarşimiz Sistem->Diller ve Giriş->Metin-konuşma çıkışı olduğundan bu, sistemi, dilleri ve girişi ve yapılandırmaya yönelik TTS tercihlerini içerir. Ancak metinden konuşmaya parçasındaki tercihler hâlâ devre dışıdır. Bunları etkinleştirmek için erişilebilir olmasını istediğimiz tercihlerin anahtarlarını eklememiz gerekir. Bu örnekte, motor tercihini değil, oynatma tercihlerini etkinleştirmek istiyoruz, bu nedenle yapılandırmamıza pk_tts_playback_group ekliyoruz.

<string-array name="config_ignore_ux_restrictions">
    [...]
    <item>@string/pk_system_settings_entry</item>
    <item>@string/pk_languages_and_input_settings</item>
    <item>@string/pk_tts_settings_entry</item>
    <item>@string/pk_tts_playback_group</item>
</string-array>

Ayrıntılı özelleştirme

Sürüş durumuna bağlı olarak bir tercihi basitçe etkinleştirmek/devre dışı bırakmaktan daha fazla özelleştirilmiş davranış gerektirebilecek bazı tercihler vardır. Örneğin, Bluetooth ve Wi-Fi, sürüş sırasında kayıtlı Bluetooth cihazlarını veya Wi-Fi erişim noktalarını gösterecek şekilde zaten değiştirildi.

Şu anda bu tür ayarlamaları yapabilecek konfigürasyona dayalı bir çözüm bulunmamaktadır. Bunun yerine, istenen değişiklikleri yapmak için PreferenceController'ı genişleten ve onApplyUxRestrictions() işlevini geçersiz kılan özel bir sınıf oluşturabilirsiniz.

Özel bir tercih denetleyicisi oluşturulduğunda, varsayılan tercih denetleyicisini kendi uygulamanızla değiştirmek için ilgili XML dosyasını yerleştirebilirsiniz.

Örnekler

CarSettings'te bazı tercihler bu daha özelleştirilmiş davranışa sahiptir ve bu, ek özelleştirme için örnek olarak kullanılabilir. Örneğin, Wi-Fi erişim noktası listesinde istenen davranış, yalnızca sürüş sırasında kayıtlı erişim noktalarının gösterilmesi (ve geri kalanının gizlenmesi) şeklindedir. Bunu başarmak için aşağıdakileri yapın:

mAccessPoints = CarUxRestrictionsHelper.isNoSetup(getUxRestrictions())
               ? getCarWifiManager().getSavedAccessPoints()
               : getCarWifiManager().getAllAccessPoints();

Burada görünen erişim noktaları zaten kısıtlı olduğundan, bu tercihlere ek UxRestrictions uygulamak istemezsiniz. Bu nedenle, onApplyUxRestrictions geçersiz kılın ve kasıtlı olarak işlem yapılmaması işlemini gerçekleştirin:

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    // Since the list dynamically changes based on the UX restrictions, we
    // enable this fragment regardless of the restriction. Intentional no-op.
}

Başka bir örnek ise Bluetooth bağlantılı cihazlarda verilmiştir. Bluetooth cihazlarının bağlanmasını ve bağlantılarının kesilmesini etkinleştirmeye devam etmek, ancak bu cihazlara ilişkin ek ayarlara erişim özelliğini devre dışı bırakmak istedim. Bunu başarmak için yine onApplyUxRestrictions geçersiz kılıyoruz ancak bu sefer NO_SETUP kısıtlaması aktifse tercihteki ikincil eylemi gizleyin.

@Override
protected void onApplyUxRestrictions(CarUxRestrictions uxRestrictions) {
    super.onApplyUxRestrictions(uxRestrictions);
    if (CarUxRestrictionsHelper.isNoSetup(uxRestrictions)) {
        updateActionVisibility(getPreference(), /* isActionVisible= */ false);
    }
}