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