Araç Ayarları'nda dikkat dağıtıcı unsurları azaltma

Dikkat dağıtıcı unsurları azaltma (DO), araba hareket halindeyken sürücünün Ayarlar uygulamasıyla etkileşimini azaltmak için bir araç olarak sağlanır. Uygulamanın tamamen engellenmemesi için bazı ayarların araç kullanırken değiştirilmesi gerekebilir. Ancak varsayılan olarak çoğu tercih devre dışıdır. Yalnızca önemli ve kolayca güncellenebilen tercihler etkindir.

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

Şekil 1. Sürüş sırasında etkinleştirilen uygulamalar

Aşağıda gösterildiği gibi, dikkat dağıtıcı öğeler için optimize edilmemiş etkinliklerin tamamı da engellenebilir. Bu yöntem şu anda öncelikle ayarlar araması için kullanılmaktadır.

Tüm etkinlikler engellendi

Şekil 2. Tüm etkinlikler engellendi

DO performansında temel özelleştirmeler yapılandırma yer paylaşımları aracılığıyla yapılabilir. Daha ayrıntılı özelleştirmelere ihtiyacınız varsa kod aracılığıyla ek değişiklikler yapabilirsiniz.

Üst düzey özelleştirme

Bir tercih sürüş sırasında devre dışı bırakıldığında, tercihe dokunulduğunda tercihin sürüş sırasında kullanılamadığını belirten bir pop-up mesaj gösterilir (tercibe bağlı bir tercih denetleyici varsa). Mesajda, yer paylaşımıyla özelleştirilebilen restricted_while_driving dizesi kullanılır (dizenin 60 karakter sınırını aşmaması gerekir).

Özelleştirilmiş yer paylaşımı

Şekil 3. Özelleştirilmiş yer paylaşımı

DO çerçevesinin tamamı config_always_ignore_ux_restrictions kullanılarak devre dışı bırakılabilir. Bu değeri true olarak ayarlamak, sürücünün Ayarlar uygulamasının her yönüyle etkileşim kurabileceğ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ştirileceğini belirlemek için config_ignore_ux_restrictions değerini kullanır. Burada sağlanan dizelerin preference_keys.xml.

içinde listelendiğini tekrar kontrol edin.

Örnek

Bu örnekte, sürüş sırasında derin iç içe yerleştirilmiş bir ayarın nasıl etkinleştirileceği gösterilmektedir. Metin okuma (TTS) çıkış ayarlarının nasıl etkinleştirileceği gösterilmektedir. Bunun işe yaraması için hiyerarşideki tüm ayarları config_ignore_ux_restrictions alanına ekleyin. Sistem->Diller ve Giriş->Metin-Konuşma Çıkışı hiyerarşimiz olduğundan bu, yapılandırmadaki sistem, diller ve giriş ile TTS tercihlerini içerir. Ancak metin okuma parçasındaki tercihler hâlâ devre dışıdır. Bu özellikleri etkinleştirmek için erişilebilir olmasını istediğimiz tercihlerin anahtarlarını eklememiz gerekir. Bu örnekte, oynatma tercihlerini etkinleştirmek ancak motor tercihini etkinleştirmemek 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 göre bir tercihi etkinleştirmekten/devre dışı bırakmaktan daha fazla özelleştirilmiş davranış gerektiren bazı tercihler vardır. Örneğin, Bluetooth ve kablosuz bağlantı, sürüş sırasında kayıtlı Bluetooth cihazları veya kablosuz erişim noktalarını gösterecek şekilde değiştirilmiştir.

Şu anda bu tür düzenlemeler yapmak için yapılandırma tabanlı bir çözüm yoktur. Bunun yerine, PreferenceController'ı genişleten ve istenen değişiklikleri yapmak için onApplyUxRestrictions()'ü geçersiz kılan özel bir sınıf oluşturabilirsiniz.

Özel bir tercih denetleyici oluşturulduğunda, varsayılan tercih denetleyiciyi kendi uygulamanızla değiştirmek için ilgili XML dosyasını yer paylaşımı yapabilirsiniz.

Örnekler

CarSettings'te bazı tercihler bu daha özelleştirilmiş davranışa sahiptir. Bu davranış, ek özelleştirme örnekleri olarak kullanılabilir. Örneğin, Kablosuz erişim noktası listesinde istenen davranış, sürüş sırasında yalnızca kayıtlı erişim noktalarını göstermek (ve geri kalanını gizlemek) şeklindedir. Bunun için aşağıdakileri yapın:

} else if (shouldApplyUxRestrictions(getUxRestrictions())) {
    wifiEntries = getCarWifiManager().getSavedWifiEntries();
} else {
    wifiEntries = getCarWifiManager().getAllWifiEntries();
}

Burada görünen erişim noktaları zaten kısıtlandığından bu tercihlere ek UxRestrictions uygulamak istemiyorsunuz. Bu nedenle, onApplyUxRestrictions değerini geçersiz kılın ve kasıtlı olarak hiçbir işlem yapmayın:

@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.
}

Bluetooth'a bağlı cihazlar bölümünde başka bir örnek verilmiştir. Bluetooth cihazların bağlanmasına ve bağlantılarının kesilmesine izin vermeye devam etmek ancak bu cihazların ek ayarlarına erişme özelliğini devre dışı bırakmak istiyorsanız. Bunu yapmak için onApplyUxRestrictions'ü tekrar geçersiz kılıyoruz ancak bu kez NO_SETUP kısıtlaması etkinse tercihte ikincil işlemi gizliyoruz.

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