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.
Ş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.
Ş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).
Ş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.
Ö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); } }