Merge "Removed flag from environment" into main
diff --git a/Android.bp b/Android.bp
index 575f051..087030b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -108,7 +108,6 @@
"fuelgauge-protos-lite",
"settings-logtags",
"statslog-settings",
- "telephony_flags_core_java_lib",
"setupdesign-lottie-loading-layout",
"device_policy_aconfig_flags_lib",
"keyboard_flags_lib",
@@ -133,6 +132,7 @@
flags_packages: [
"aconfig_settings_flags",
"android.app.flags-aconfig",
+ "android.provider.flags-aconfig",
],
}
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 11d9779..cdd9535 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -5297,7 +5297,7 @@
android:name="Settings$ContactsStorageSettingsActivity"
android:label="@string/contacts_storage_settings_title"
android:exported="true"
- android:featureFlag="com.android.settings.flags.enable_contacts_default_account_in_settings">
+ android:featureFlag="android.provider.new_default_account_api_enabled">
<intent-filter>
<action android:name="android.provider.action.SET_DEFAULT_ACCOUNT" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/aconfig/catalyst/accessibility.aconfig b/aconfig/catalyst/accessibility.aconfig
new file mode 100644
index 0000000..7837067
--- /dev/null
+++ b/aconfig/catalyst/accessibility.aconfig
@@ -0,0 +1,16 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+ name: "catalyst_accessibility_color_and_motion"
+ namespace: "android_settings"
+ description: "Migrate Color and motion screen to the Catalyst infrastructure"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_text_reading_screen"
+ namespace: "android_settings"
+ description: "Flag for Display size and text"
+ bug: "323791114"
+}
diff --git a/aconfig/catalyst/battery.aconfig b/aconfig/catalyst/battery.aconfig
index ce5c5c5..cec40f3 100644
--- a/aconfig/catalyst/battery.aconfig
+++ b/aconfig/catalyst/battery.aconfig
@@ -2,8 +2,15 @@
container: "system"
flag {
+ name: "catalyst_power_usage_summary_screen"
+ namespace: "android_settings"
+ description: "Flag for Battery screen"
+ bug: "323791114"
+}
+
+flag {
name: "catalyst_battery_saver_screen"
namespace: "android_settings"
description: "Flag for Battery Saver"
bug: "323791114"
-}
+}
\ No newline at end of file
diff --git a/aconfig/catalyst/connected_devices.aconfig b/aconfig/catalyst/connected_devices.aconfig
new file mode 100644
index 0000000..7a335fa
--- /dev/null
+++ b/aconfig/catalyst/connected_devices.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+ name: "catalyst_bluetooth_switchbar_screen"
+ namespace: "android_settings"
+ description: "Flag for Bluetooth"
+ bug: "323791114"
+}
diff --git a/aconfig/catalyst/display.aconfig b/aconfig/catalyst/display.aconfig
index f722f74..038a9b0 100644
--- a/aconfig/catalyst/display.aconfig
+++ b/aconfig/catalyst/display.aconfig
@@ -7,3 +7,18 @@
description: "Flag for Display"
bug: "323791114"
}
+
+flag {
+ name: "catalyst_screen_timeout"
+ namespace: "android_settings"
+ description: "Flag for Screen Timeout settings"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_dark_ui_mode"
+ namespace: "android_settings"
+ description: "Flag for Dark theme"
+ bug: "323791114"
+}
+
diff --git a/aconfig/catalyst/location.aconfig b/aconfig/catalyst/location.aconfig
new file mode 100644
index 0000000..c656bf3
--- /dev/null
+++ b/aconfig/catalyst/location.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+ name: "catalyst_location_settings"
+ namespace: "android_settings"
+ description: "Flag for Location"
+ bug: "323791114"
+}
diff --git a/aconfig/catalyst/lockscreen.aconfig b/aconfig/catalyst/lockscreen.aconfig
new file mode 100644
index 0000000..9a84f66
--- /dev/null
+++ b/aconfig/catalyst/lockscreen.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+ name: "catalyst_lockscreen_from_display_settings"
+ namespace: "android_settings"
+ description: "Flag for Display & touch > Lock screen"
+ bug: "323791114"
+}
diff --git a/aconfig/catalyst/network_and_internet.aconfig b/aconfig/catalyst/network_and_internet.aconfig
new file mode 100644
index 0000000..e8943e6
--- /dev/null
+++ b/aconfig/catalyst/network_and_internet.aconfig
@@ -0,0 +1,45 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+ name: "catalyst_network_provider_and_internet_screen"
+ namespace: "android_settings"
+ description: "Flag for Network & Internet"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_internet_settings"
+ namespace: "android_settings"
+ description: "Flag for Internet"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_mobile_network_list"
+ namespace: "android_settings"
+ description: "Flag for SIMs"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_adaptive_connectivity"
+ namespace: "android_settings"
+ description: "Flag for Adaptive connectivity"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_wifi_calling"
+ namespace: "android_settings"
+ description: "Flag for Wi-Fi calling screen"
+ bug: "323791114"
+}
+
+flag {
+ name: "catalyst_restrict_background_parent_entry"
+ namespace: "android_settings"
+ description: "Flag for Data Saver"
+ bug: "323791114"
+}
+
diff --git a/aconfig/catalyst/sound_screen.aconfig b/aconfig/catalyst/sound_screen.aconfig
index ea5f771..ac7f8bc 100644
--- a/aconfig/catalyst/sound_screen.aconfig
+++ b/aconfig/catalyst/sound_screen.aconfig
@@ -6,4 +6,11 @@
namespace: "android_settings"
description: "Flag for sound and vibration page"
bug: "323791114"
+}
+
+flag {
+ name: "catalyst_vibration_intensity_screen"
+ namespace: "android_settings"
+ description: "Flag for vibration and haptics page"
+ bug: "323791114"
}
\ No newline at end of file
diff --git a/aconfig/catalyst/system.aconfig b/aconfig/catalyst/system.aconfig
new file mode 100644
index 0000000..f87ff44
--- /dev/null
+++ b/aconfig/catalyst/system.aconfig
@@ -0,0 +1,9 @@
+package: "com.android.settings.flags"
+container: "system"
+
+flag {
+ name: "catalyst_language_setting"
+ namespace: "android_settings"
+ description: "Flag for System -> Languages screen"
+ bug: "323791114"
+}
diff --git a/aconfig/settings_display_flag_declarations.aconfig b/aconfig/settings_display_flag_declarations.aconfig
index 9fe587b..a85d967 100644
--- a/aconfig/settings_display_flag_declarations.aconfig
+++ b/aconfig/settings_display_flag_declarations.aconfig
@@ -8,3 +8,10 @@
bug: "315937886"
}
+flag {
+ name: "screen_timeout_settings_dashboard"
+ namespace: "android_settings"
+ description: "Use dashboard style settings"
+ bug: "368359967"
+}
+
diff --git a/aconfig/settings_telephony_flag_declarations.aconfig b/aconfig/settings_telephony_flag_declarations.aconfig
index dab1b45..0279125 100644
--- a/aconfig/settings_telephony_flag_declarations.aconfig
+++ b/aconfig/settings_telephony_flag_declarations.aconfig
@@ -14,3 +14,19 @@
description: "Control the Dual SIM onobarding feature"
bug: "298898436"
}
+
+# OWNER=yomna TARGET=25Q2
+flag {
+ name: "mobile_network_security_2g"
+ namespace: "cellular_security"
+ description: "Exposing 2G toggles in Mobile Network Security page"
+ bug: "355062720"
+}
+
+# OWNER=yomna TARGET=25Q2
+flag {
+ name: "add_security_transparency_to_eng_menu"
+ namespace: "cellular_security"
+ description: "Exposing security transparency features to field engineering menu"
+ bug: "355062720"
+}
diff --git a/res-product/values-ar/strings.xml b/res-product/values-ar/strings.xml
index 131d746..86f9b1a 100644
--- a/res-product/values-ar/strings.xml
+++ b/res-product/values-ar/strings.xml
@@ -220,7 +220,7 @@
<string name="bluetooth_unpair_dialog_body" product="default" msgid="176620413491664050">"لن يتم إقران هاتفك بعد الآن بجهاز <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="8098078685596880647">"لن يتم إقران جهازك اللوحي بعد الآن بجهاز <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_body" product="device" msgid="563640675231461703">"لن يتم إقران جهازك بعد الآن بجهاز <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"السماح باستخدام الاتصال القصير المدى (NFC) عندما تكون الشاشة مفتوحة فقط"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"السماح باستخدام NFC عندما تكون الشاشة مفتوحة فقط"</string>
<string name="wifi_add_app_single_network_summary" product="default" msgid="7742934005022827107">"يريد التطبيق <xliff:g id="APPNAME">%1$s</xliff:g> حفظ شبكة على هاتفك."</string>
<string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"يريد تطبيق <xliff:g id="APPNAME">%1$s</xliff:g> حفظ شبكة على جهازك اللوحي."</string>
<string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"يريد التطبيق <xliff:g id="APPNAME">%1$s</xliff:g> حفظ هذه الشبكات على هاتفك."</string>
diff --git a/res-product/values-es-rUS/strings.xml b/res-product/values-es-rUS/strings.xml
index b3ab141..fdf6e0d 100644
--- a/res-product/values-es-rUS/strings.xml
+++ b/res-product/values-es-rUS/strings.xml
@@ -356,7 +356,7 @@
<string name="auto_rotate_summary_a11y" product="tablet" msgid="4708833814245913981">"Cuando muevas la tablet entre el modo vertical y el horizontal"</string>
<string name="daltonizer_feature_summary" product="default" msgid="3940653889277283702">"Ajusta cómo se muestran los colores en tu teléfono"</string>
<string name="daltonizer_feature_summary" product="tablet" msgid="4006596881671077623">"Ajusta cómo se muestran los colores en tu tablet"</string>
- <string name="spatial_audio_speaker" product="default" msgid="7148176677982615792">"Altavoces del teléfono"</string>
+ <string name="spatial_audio_speaker" product="default" msgid="7148176677982615792">"Bocinas del teléfono"</string>
<string name="spatial_audio_speaker" product="tablet" msgid="5452617980485166854">"Bocinas de la tablet"</string>
<string name="spatial_audio_speaker" product="device" msgid="6204289590128303795">"Altavoces del dispositivo"</string>
<string name="audio_sharing_dialog_share_content" product="default" msgid="708698992481271057">"La música y los videos de este teléfono se reproducirán en ambos pares de auriculares"</string>
diff --git a/res-product/values-hi/strings.xml b/res-product/values-hi/strings.xml
index b92defd..87c4de3 100644
--- a/res-product/values-hi/strings.xml
+++ b/res-product/values-hi/strings.xml
@@ -265,7 +265,7 @@
<string name="bluetooth_tethering_subtext" product="default" msgid="3638886236597805392">"ब्लूटूथ से फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
<string name="ethernet_tethering_subtext" product="default" msgid="8652438909365718644">"ईथरनेट से फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
<string name="ethernet_tethering_subtext" product="tablet" msgid="2227710549796706455">"ईथरनेट का इस्तेमाल करके टैबलेट का इंटरनेट कनेक्शन शेयर करें"</string>
- <string name="about_settings" product="tablet" msgid="1471390492111370330">"टैबलेट के बारे में"</string>
+ <string name="about_settings" product="tablet" msgid="1471390492111370330">"टैबलेट के बारे में जानकारी"</string>
<string name="about_settings" product="default" msgid="2621311564780208250">"फ़ोन के बारे में जानकारी"</string>
<string name="about_settings" product="device" msgid="7595574154492383452">"डिवाइस के बारे में जानकारी"</string>
<string name="about_settings" product="emulator" msgid="1099246296173401003">"एम्युलेट किए गए डिवाइस के बारे में"</string>
@@ -316,7 +316,7 @@
<string name="user_confirm_remove_self_message" product="tablet" msgid="6880861846664267876">"आप इस टैबलेट पर जगह और डेटा को खो देंगे. आप इस कार्रवाई को पहले जैसा नहीं कर सकते."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="3209762447055039706">"आप इस फ़ोन पर अपनी जगह और डेटा को खो देंगे. आप इस कार्रवाई को पहले जैसा नहीं कर सकते."</string>
<string name="support_summary" product="default" msgid="2044721479256103419">"सहायता लेख, फ़ोन और चैट"</string>
- <string name="support_summary" product="tablet" msgid="2588832599234347108">"सहायता लेख, टैबलेट और चैट"</string>
+ <string name="support_summary" product="tablet" msgid="2588832599234347108">"सहायता लेख, टैबलेट, और चैट"</string>
<string name="support_summary" product="device" msgid="6821511162132497205">"सहायता लेख, डिवाइस, और चैट"</string>
<string name="ambient_display_title" product="default" msgid="8027137727044125809">"फ़ोन देखने के लिए दो बार टैप करें"</string>
<string name="ambient_display_title" product="tablet" msgid="2347746118188465334">"टैबलेट देखने के लिए दो बार छूएं"</string>
diff --git a/res-product/values-it/strings.xml b/res-product/values-it/strings.xml
index f0dddcf..7cfce22 100644
--- a/res-product/values-it/strings.xml
+++ b/res-product/values-it/strings.xml
@@ -20,7 +20,7 @@
<string name="bluetooth_disconnect_all_profiles" product="default" msgid="5845431621920557637">"Il telefono verrà scollegato da <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_disconnect_all_profiles" product="tablet" msgid="4247757468465328774">"Il tablet verrà scollegato da <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="1632553419566947403">"Il dispositivo verrà scollegato da <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_footer_mac_message" product="default" msgid="1640339352473051542">"Indirizzo Bluetooth del telefono: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="default" msgid="1640339352473051542">"Indirizzo Bluetooth dello smartphone: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="7338607486971997745">"Indirizzo Bluetooth del tablet: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="device" msgid="8944917742814573320">"Indirizzo Bluetooth del dispositivo: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_ask_discovery" product="tablet" msgid="7430581669309228387">"<xliff:g id="APP_NAME">%1$s</xliff:g> chiede di rendere il tuo tablet visibile ad altri dispositivi Bluetooth per <xliff:g id="TIMEOUT">%2$d</xliff:g> secondi."</string>
@@ -338,13 +338,13 @@
<string name="no_5g_in_dsds_text" product="device" msgid="2081735896122371350">"Se vengono usate due SIM, questo dispositivo può usare soltanto la rete 4G. "<annotation id="url">"Ulteriori informazioni"</annotation></string>
<string name="reset_internet_text" product="default" msgid="8672305377652449075">"La telefonata verrà terminata"</string>
<string name="reset_internet_text" product="tablet" msgid="8672305377652449075">"La telefonata verrà terminata"</string>
- <string name="lockpassword_confirm_your_pattern_details_frp" product="default" msgid="8795084788352126815">"Impostazioni di fabbrica ripristinate. Per usare il telefono, inserisci la sequenza precedente."</string>
+ <string name="lockpassword_confirm_your_pattern_details_frp" product="default" msgid="8795084788352126815">"Impostazioni di fabbrica ripristinate. Per usare lo smartphone, inserisci la sequenza precedente."</string>
<string name="lockpassword_confirm_your_pattern_details_frp" product="tablet" msgid="1816846183732787701">"Impostazioni di fabbrica ripristinate. Per usare il tablet, inserisci la sequenza precedente."</string>
<string name="lockpassword_confirm_your_pattern_details_frp" product="device" msgid="7897925268003690167">"Impostazioni di fabbrica ripristinate. Per usare il dispositivo, inserisci la sequenza precedente."</string>
- <string name="lockpassword_confirm_your_pin_details_frp" product="default" msgid="2027547169650312092">"Impostazioni di fabbrica ripristinate. Per usare il telefono, inserisci il PIN precedente."</string>
+ <string name="lockpassword_confirm_your_pin_details_frp" product="default" msgid="2027547169650312092">"Impostazioni di fabbrica ripristinate. Per usare lo smartphone, inserisci il PIN precedente."</string>
<string name="lockpassword_confirm_your_pin_details_frp" product="tablet" msgid="8264086895022779707">"Impostazioni di fabbrica ripristinate. Per usare il tablet, inserisci il PIN precedente."</string>
<string name="lockpassword_confirm_your_pin_details_frp" product="device" msgid="1654340132011802578">"Impostazioni di fabbrica ripristinate. Per usare il dispositivo, inserisci il PIN precedente."</string>
- <string name="lockpassword_confirm_your_password_details_frp" product="default" msgid="1465326741724776281">"Impostazioni di fabbrica ripristinate. Per usare il telefono, inserisci la password precedente."</string>
+ <string name="lockpassword_confirm_your_password_details_frp" product="default" msgid="1465326741724776281">"Impostazioni di fabbrica ripristinate. Per usare lo smartphone, inserisci la password precedente."</string>
<string name="lockpassword_confirm_your_password_details_frp" product="tablet" msgid="1333164951750797865">"Impostazioni di fabbrica ripristinate. Per usare il tablet, inserisci la password precedente."</string>
<string name="lockpassword_confirm_your_password_details_frp" product="device" msgid="116667646012224967">"Impostazioni di fabbrica ripristinate. Per usare il dispositivo, inserisci la password precedente."</string>
<string name="battery_tip_incompatible_charging_message" product="default" msgid="5097154279720383707">"Lo smartphone potrebbe ricaricarsi lentamente o non ricaricarsi affatto. Per velocizzare la ricarica, usa un cavo e un alimentatore consigliati."</string>
diff --git a/res-product/values-ko/strings.xml b/res-product/values-ko/strings.xml
index 0b3b5b6..ae37f7c 100644
--- a/res-product/values-ko/strings.xml
+++ b/res-product/values-ko/strings.xml
@@ -220,7 +220,7 @@
<string name="bluetooth_unpair_dialog_body" product="default" msgid="176620413491664050">"휴대전화가 더 이상 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>과(와) 페어링되지 않습니다."</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="8098078685596880647">"태블릿이 더 이상 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>과(와) 페어링되지 않습니다."</string>
<string name="bluetooth_unpair_dialog_body" product="device" msgid="563640675231461703">"기기가 더 이상 <xliff:g id="DEVICE_NAME">%1$s</xliff:g>과(와) 페어링되지 않습니다."</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"화면이 잠금 해제되어 있을 때만 NFC 사용 허용"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"화면이 잠금 해제되어 있을 때만 NFC 사용을 허용합니다."</string>
<string name="wifi_add_app_single_network_summary" product="default" msgid="7742934005022827107">"<xliff:g id="APPNAME">%1$s</xliff:g>에서 네트워크를 휴대전화에 저장하려고 합니다."</string>
<string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"<xliff:g id="APPNAME">%1$s</xliff:g>에서 네트워크를 태블릿에 저장하려고 합니다."</string>
<string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"<xliff:g id="APPNAME">%1$s</xliff:g>에서 이 네트워크를 휴대전화에 저장하려고 합니다."</string>
diff --git a/res-product/values-or/strings.xml b/res-product/values-or/strings.xml
index 34407e7..04b5f4d 100644
--- a/res-product/values-or/strings.xml
+++ b/res-product/values-or/strings.xml
@@ -20,7 +20,7 @@
<string name="bluetooth_disconnect_all_profiles" product="default" msgid="5845431621920557637">"ଆପଣଙ୍କ ଫୋନ୍ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ଠାରୁ ବିଚ୍ଛିନ୍ନ ହେବ।"</string>
<string name="bluetooth_disconnect_all_profiles" product="tablet" msgid="4247757468465328774">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>ଠାରୁ ଆପଣଙ୍କ ଟାବ୍ଲେଟ୍ ବିଚ୍ଛିନ୍ନ ହେବ।"</string>
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="1632553419566947403">"ଆପଣଙ୍କ ଡିଭାଇସ୍ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ରୁ ବିଚ୍ଛିନ୍ନ ହେବ।"</string>
- <string name="bluetooth_footer_mac_message" product="default" msgid="1640339352473051542">"ଫୋନ୍ର ବ୍ଲୁଟୂଥ୍ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="default" msgid="1640339352473051542">"ଫୋନର ବ୍ଲୁଟୂଥ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="7338607486971997745">"ଟାବଲେଟର ବ୍ଲୁଟୁଥ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="device" msgid="8944917742814573320">"ଡିଭାଇସର ବ୍ଲୁଟୁଥ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_ask_discovery" product="tablet" msgid="7430581669309228387">"<xliff:g id="TIMEOUT">%2$d</xliff:g> ସେକେଣ୍ଡ ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g> ଆପଣଙ୍କ ଟାବ୍ଲେଟ୍କୁ ଅନ୍ୟ ବ୍ଲୁଟୂଥ୍ ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ଦେଖାଇବାକୁ ଚାହୁଁଛି।"</string>
@@ -220,7 +220,7 @@
<string name="bluetooth_unpair_dialog_body" product="default" msgid="176620413491664050">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହିତ ଆପଣଙ୍କ ଫୋନ୍ ଆଉ ପେୟାର୍ ହେବନାହିଁ"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="8098078685596880647">"ଆପଣଙ୍କ ଟାବଲେଟ୍ ଏବେ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର୍ ହୋଇ ରହିବନାହିଁ"</string>
<string name="bluetooth_unpair_dialog_body" product="device" msgid="563640675231461703">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ଆପଣଙ୍କ ଡିଭାଇସ୍ ଆଉ ପେୟାର୍ ହୋଇପାରିବ ନାହିଁ"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"ସ୍କ୍ରିନ ଅନଲକ୍ ହେଲେ ହିଁ କେବଳ NFCର ବ୍ୟବହାରକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"ସ୍କ୍ରିନ ଅନଲକ ହେଲେ ହିଁ କେବଳ NFCର ବ୍ୟବହାରକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="wifi_add_app_single_network_summary" product="default" msgid="7742934005022827107">"<xliff:g id="APPNAME">%1$s</xliff:g> ଆପଣଙ୍କ ଫୋନରେ ଏକ ନେଟୱାର୍କ ସେଭ୍ କରିବାକୁ ଚାହେଁ"</string>
<string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"<xliff:g id="APPNAME">%1$s</xliff:g> ଆପଣଙ୍କ ଟାବଲେଟରେ ଏକ ନେଟୱାର୍କ ସେଭ୍ କରିବାକୁ ଚାହେଁ"</string>
<string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"<xliff:g id="APPNAME">%1$s</xliff:g> ଆପଣଙ୍କ ଫୋନରେ ଏହିସବୁ ନେଟୱାର୍କକୁ ସେଭ୍ କରିବାକୁ ଚାହେଁ"</string>
@@ -315,7 +315,7 @@
<string name="user_cannot_manage_message" product="default" msgid="8596259161937605316">"କେବଳ ଫୋନ୍ର ମାଲିକ ଉପଯୋଗକର୍ତ୍ତାଙ୍କୁ ପରିଚାଳନା କରିପାରିବେ।"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="6880861846664267876">"ଏହି ଟାବ୍ଲେଟ୍ରେ ଥିବା ଆପଣଙ୍କର ସ୍ଥାନ ଓ ଡାଟା ହରାଇବେ। ଆପଣ ଏହିଗୁଡ଼ିକୁ ପୁଣି ଫେରି ପାଇବେ ନାହିଁ।"</string>
<string name="user_confirm_remove_self_message" product="default" msgid="3209762447055039706">"ଆପଣ, ଏହି ଫୋନ୍ରେ ନିଜସ୍ୱ ସ୍ଥାନ ଓ ଡାଟା ହରାଇବେ। ଏହାକୁ ଆପଣ ପୂର୍ବାବସ୍ଥାକୁ ଫେରାଇ ଆଣିପାରିବେ ନାହିଁ।"</string>
- <string name="support_summary" product="default" msgid="2044721479256103419">"ସହାୟତା ଆର୍ଟିକିଲ୍, ଫୋନ୍ ଓ ଚାଟ୍"</string>
+ <string name="support_summary" product="default" msgid="2044721479256103419">"ସହାୟତା ଆର୍ଟିକିଲ, ଫୋନ ଓ ଚାଟ"</string>
<string name="support_summary" product="tablet" msgid="2588832599234347108">"ସହାୟତା ଆର୍ଟିକିଲ, ଟାବଲେଟ ଏବଂ ଚାଟ"</string>
<string name="support_summary" product="device" msgid="6821511162132497205">"ସହାୟତା ଆର୍ଟିକିଲ, ଡିଭାଇସ ଏବଂ ଚାଟ"</string>
<string name="ambient_display_title" product="default" msgid="8027137727044125809">"ଫୋନ୍ ଚେକ୍ କରିବାକୁ ଦୁଇଥର-ଟାପ୍ କରନ୍ତୁ"</string>
diff --git a/res-product/values-pt-rBR/strings.xml b/res-product/values-pt-rBR/strings.xml
index e5b8d4c..2db3469 100644
--- a/res-product/values-pt-rBR/strings.xml
+++ b/res-product/values-pt-rBR/strings.xml
@@ -106,7 +106,7 @@
<string name="security_settings_face_settings_footer_class3_attention_not_supported" product="default" msgid="5512898803063743303">"Use seu rosto para desbloquear o smartphone, fazer fazer login em apps ou finalizar compras.\n\nNão se esqueça:\nSó é possível configurar um rosto por vez. Para adicionar outro rosto, exclua o registrado atualmente.\n\nOlhar para o smartphone pode desbloquear o dispositivo, mesmo sem intenção.\n\nEle pode ser desbloqueado por outra pessoa se ele for apontado para seu rosto, mesmo que você esteja com os olhos fechados.\n\nO desbloqueio também pode ser feito por alguém que se pareça muito com você, como um gêmeo idêntico."</string>
<string name="security_settings_face_settings_footer_class3_attention_not_supported" product="tablet" msgid="6790505667764631343">"Use seu rosto para desbloquear o tablet, fazer login em apps ou finalizar compras.\n\nNão se esqueça:\nSó é possível configurar um rosto por vez. Para adicionar outro rosto, exclua o registrado atualmente.\n\nOlhar para o tablet pode desbloquear o dispositivo, mesmo sem intenção.\n\nEle pode ser desbloqueado por outra pessoa se for direcionado para seu rosto, mesmo que você esteja de olhos fechados.\n\nTambém pode ser desbloqueado por alguém que se pareça muito com você, como, por exemplo, um gêmeo idêntico."</string>
<string name="security_settings_face_settings_footer_class3_attention_not_supported" product="device" msgid="7858917821957779752">"Use seu rosto para desbloquear o dispositivo ou confirmar sua identidade, fazer login ou finalizar compras.\n\nNão se esqueça:\nSó é possível configurar um rosto por vez. Para adicionar outro, exclua o registrado atualmente.\n\nOlhar para o dispositivo pode desbloquear mesmo sem intenção.\n\nEle pode ser desbloqueado por outra pessoa se for direcionado para seu rosto, mesmo com os olhos fechados.\n\nO desbloqueio também pode ser feito por alguém que se pareça muito com você, como um gêmeo idêntico."</string>
- <string name="security_settings_fingerprint_enroll_introduction_v3_message" msgid="2145273491174234191">"Use sua impressão digital para desbloquear o dispositivo <xliff:g id="DEVICENAME">%s</xliff:g> ou confirmar sua identidade e acessar apps ou aprovar uma compra"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v3_message" msgid="2145273491174234191">"Use sua impressão digital para desbloquear o dispositivo <xliff:g id="DEVICENAME">%s</xliff:g> ou confirmar sua identidade, como ao acessar apps ou aprovar uma compra"</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" product="default" msgid="5101253231118659496">"Permita que a criança use a impressão digital para desbloquear o smartphone ou confirmar a identidade dela. Isso acontece quando ela faz login em apps, aprova uma compra, entre outras ocasiões."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" product="tablet" msgid="3063978167545799342">"Permita que a criança use a impressão digital para desbloquear o tablet ou confirmar a identidade dela. Isso acontece quando ela faz login em apps, aprova uma compra, entre outras ocasiões."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" product="device" msgid="4399560001732497632">"Permita que a criança use a impressão digital para desbloquear o dispositivo ou confirmar a identidade dela. Isso acontece quando ela faz login em apps, aprova uma compra, entre outras ocasiões."</string>
diff --git a/res-product/values-pt-rPT/strings.xml b/res-product/values-pt-rPT/strings.xml
index 67c7b74..b82be6e 100644
--- a/res-product/values-pt-rPT/strings.xml
+++ b/res-product/values-pt-rPT/strings.xml
@@ -220,7 +220,7 @@
<string name="bluetooth_unpair_dialog_body" product="default" msgid="176620413491664050">"O telemóvel deixará de estar sincronizado com o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="8098078685596880647">"O tablet deixará de estar sincronizado com o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_body" product="device" msgid="563640675231461703">"O dispositivo deixará de estar sincronizado com o <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"Permite a utilização do NFC apenas quando o ecrã está desbloqueado"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="3515508978581011683">"Só permite usar o NFC quando o ecrã está desbloqueado"</string>
<string name="wifi_add_app_single_network_summary" product="default" msgid="7742934005022827107">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar uma rede no seu telemóvel."</string>
<string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar uma rede no seu tablet."</string>
<string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"A app <xliff:g id="APPNAME">%1$s</xliff:g> quer guardar estas redes no seu telemóvel."</string>
diff --git a/res-product/values-pt/strings.xml b/res-product/values-pt/strings.xml
index e5b8d4c..2db3469 100644
--- a/res-product/values-pt/strings.xml
+++ b/res-product/values-pt/strings.xml
@@ -106,7 +106,7 @@
<string name="security_settings_face_settings_footer_class3_attention_not_supported" product="default" msgid="5512898803063743303">"Use seu rosto para desbloquear o smartphone, fazer fazer login em apps ou finalizar compras.\n\nNão se esqueça:\nSó é possível configurar um rosto por vez. Para adicionar outro rosto, exclua o registrado atualmente.\n\nOlhar para o smartphone pode desbloquear o dispositivo, mesmo sem intenção.\n\nEle pode ser desbloqueado por outra pessoa se ele for apontado para seu rosto, mesmo que você esteja com os olhos fechados.\n\nO desbloqueio também pode ser feito por alguém que se pareça muito com você, como um gêmeo idêntico."</string>
<string name="security_settings_face_settings_footer_class3_attention_not_supported" product="tablet" msgid="6790505667764631343">"Use seu rosto para desbloquear o tablet, fazer login em apps ou finalizar compras.\n\nNão se esqueça:\nSó é possível configurar um rosto por vez. Para adicionar outro rosto, exclua o registrado atualmente.\n\nOlhar para o tablet pode desbloquear o dispositivo, mesmo sem intenção.\n\nEle pode ser desbloqueado por outra pessoa se for direcionado para seu rosto, mesmo que você esteja de olhos fechados.\n\nTambém pode ser desbloqueado por alguém que se pareça muito com você, como, por exemplo, um gêmeo idêntico."</string>
<string name="security_settings_face_settings_footer_class3_attention_not_supported" product="device" msgid="7858917821957779752">"Use seu rosto para desbloquear o dispositivo ou confirmar sua identidade, fazer login ou finalizar compras.\n\nNão se esqueça:\nSó é possível configurar um rosto por vez. Para adicionar outro, exclua o registrado atualmente.\n\nOlhar para o dispositivo pode desbloquear mesmo sem intenção.\n\nEle pode ser desbloqueado por outra pessoa se for direcionado para seu rosto, mesmo com os olhos fechados.\n\nO desbloqueio também pode ser feito por alguém que se pareça muito com você, como um gêmeo idêntico."</string>
- <string name="security_settings_fingerprint_enroll_introduction_v3_message" msgid="2145273491174234191">"Use sua impressão digital para desbloquear o dispositivo <xliff:g id="DEVICENAME">%s</xliff:g> ou confirmar sua identidade e acessar apps ou aprovar uma compra"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_v3_message" msgid="2145273491174234191">"Use sua impressão digital para desbloquear o dispositivo <xliff:g id="DEVICENAME">%s</xliff:g> ou confirmar sua identidade, como ao acessar apps ou aprovar uma compra"</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" product="default" msgid="5101253231118659496">"Permita que a criança use a impressão digital para desbloquear o smartphone ou confirmar a identidade dela. Isso acontece quando ela faz login em apps, aprova uma compra, entre outras ocasiões."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" product="tablet" msgid="3063978167545799342">"Permita que a criança use a impressão digital para desbloquear o tablet ou confirmar a identidade dela. Isso acontece quando ela faz login em apps, aprova uma compra, entre outras ocasiões."</string>
<string name="security_settings_fingerprint_enroll_introduction_consent_message" product="device" msgid="4399560001732497632">"Permita que a criança use a impressão digital para desbloquear o dispositivo ou confirmar a identidade dela. Isso acontece quando ela faz login em apps, aprova uma compra, entre outras ocasiões."</string>
diff --git a/res-product/values-ta/strings.xml b/res-product/values-ta/strings.xml
index bb5bf49..5a7b9be 100644
--- a/res-product/values-ta/strings.xml
+++ b/res-product/values-ta/strings.xml
@@ -265,7 +265,7 @@
<string name="bluetooth_tethering_subtext" product="default" msgid="3638886236597805392">"புளூடூத் மூலம் ஃபோனின் இண்டர்நெட்டைப் பகிரும்"</string>
<string name="ethernet_tethering_subtext" product="default" msgid="8652438909365718644">"ஈத்தர்நெட் மூலம் மொபைலின் இணைய இணைப்பைப் பகிரும்"</string>
<string name="ethernet_tethering_subtext" product="tablet" msgid="2227710549796706455">"டேப்லெட்டின் இணைய இணைப்பை ஈதர்நெட் மூலம் பகிருங்கள்"</string>
- <string name="about_settings" product="tablet" msgid="1471390492111370330">"டேப்லெட் அறிமுகம்"</string>
+ <string name="about_settings" product="tablet" msgid="1471390492111370330">"டேப்லெட் விவரம்"</string>
<string name="about_settings" product="default" msgid="2621311564780208250">"மொபைல் விவரம்"</string>
<string name="about_settings" product="device" msgid="7595574154492383452">"சாதனம் பற்றிய அறிமுகம்"</string>
<string name="about_settings" product="emulator" msgid="1099246296173401003">"சாதனம் பற்றிய தகவல்"</string>
diff --git a/res/drawable-night/mouse_keys_click.xml b/res/drawable-night/mouse_keys_click.xml
new file mode 100644
index 0000000..e5e8d5a
--- /dev/null
+++ b/res/drawable-night/mouse_keys_click.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#171216"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#F1B3E6"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_directional.xml b/res/drawable-night/mouse_keys_directional.xml
new file mode 100644
index 0000000..fd49f1e
--- /dev/null
+++ b/res/drawable-night/mouse_keys_directional.xml
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#171216"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M172.4,18h12v12h-12z"/>
+ <path
+ android:pathData="M181.24,27.41L176.46,22.64V26.69H174.99V20.11H181.56V21.59H177.51L182.29,26.36L181.24,27.41Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M194.63,18h12v12h-12z"/>
+ <path
+ android:pathData="M199.89,28.02V22.81L197.66,25.05L196.61,24L200.63,19.98L204.66,24L203.61,25.05L201.37,22.81V28.02H199.89Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M216.86,18h12v12h-12z"/>
+ <path
+ android:pathData="M220.02,27.41L218.98,26.36L223.75,21.59H219.7V20.11H226.27V26.69H224.8V22.64L220.02,27.41Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.66,14 282.77,14H297C298.1,14 299,14.9 299,16V32C299,33.1 298.1,34 297,34H282.77C281.66,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.3,42 121.2,42.9 121.2,44V60C121.2,61.1 120.3,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M180.79,46h12v12h-12z"/>
+ <path
+ android:pathData="M185.6,52.74L187.84,54.97L186.79,56.03L182.76,52L186.79,47.97L187.84,49.03L185.6,51.26H190.81V52.74H185.6Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M231.59,46h12v12h-12z"/>
+ <path
+ android:pathData="M238.77,52.74H233.56V51.26H238.77L236.54,49.03L237.59,47.97L241.61,52L237.59,56.03L236.54,54.97L238.77,52.74Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M187.67,74h12v12h-12z"/>
+ <path
+ android:pathData="M190.09,83.59V78.51H191.56V81.07L196.64,76L197.67,77.04L192.6,82.11H195.16V83.59H190.09Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.44C229.55,70 230.44,70.9 230.44,72V88C230.44,89.1 229.55,90 228.44,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M213.45,74h12v12h-12z"/>
+ <path
+ android:pathData="M218.71,75.97H220.19V81.19L222.43,78.95L223.48,80L219.45,84.03L215.43,80L216.48,78.95L218.71,81.19V75.97Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#F1B3E6"/>
+ <group>
+ <clip-path
+ android:pathData="M239.23,74h12v12h-12z"/>
+ <path
+ android:pathData="M243.84,83.69V82.21H246.4L241.21,77.01L242.24,75.97L247.44,81.18V78.61H248.92V83.69H243.84Z"
+ android:fillColor="#4C1F49"/>
+ </group>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.44C243.55,98 244.44,98.9 244.44,100V116C244.44,117.11 243.55,118 242.44,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_press_hold.xml b/res/drawable-night/mouse_keys_press_hold.xml
new file mode 100644
index 0000000..eb85602
--- /dev/null
+++ b/res/drawable-night/mouse_keys_press_hold.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#171216"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#F1B3E6"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_release.xml b/res/drawable-night/mouse_keys_release.xml
new file mode 100644
index 0000000..4fb7c4a
--- /dev/null
+++ b/res/drawable-night/mouse_keys_release.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#171216"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#F1B3E6"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_release2.xml b/res/drawable-night/mouse_keys_release2.xml
new file mode 100644
index 0000000..e844bc9
--- /dev/null
+++ b/res/drawable-night/mouse_keys_release2.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#171216"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#F1B3E6"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable-night/mouse_keys_toggle_scroll.xml b/res/drawable-night/mouse_keys_toggle_scroll.xml
new file mode 100644
index 0000000..3d6cbf3
--- /dev/null
+++ b/res/drawable-night/mouse_keys_toggle_scroll.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#171216"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#F1B3E6"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#554151"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#4E444B"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#3A3338"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#3A3338"/>
+</vector>
diff --git a/res/drawable/accessibility_contrast_button_background.xml b/res/drawable/accessibility_contrast_button_background.xml
index 281fcef..7e41aae 100644
--- a/res/drawable/accessibility_contrast_button_background.xml
+++ b/res/drawable/accessibility_contrast_button_background.xml
@@ -32,7 +32,7 @@
<item
android:width="24dp"
android:height="24dp"
- android:left="57dp"
+ android:start="57dp"
android:top="57dp">
<vector
android:width="24dp"
diff --git a/res/drawable/audio_sharing_rounded_bg.xml b/res/drawable/audio_sharing_rounded_bg.xml
deleted file mode 100644
index 35517ea..0000000
--- a/res/drawable/audio_sharing_rounded_bg.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2023 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<shape
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- android:shape="rectangle">
- <solid android:color="?androidprv:attr/colorAccentPrimary" />
- <corners android:radius="12dp" />
-</shape>
\ No newline at end of file
diff --git a/res/drawable/audio_sharing_rounded_bg_ripple.xml b/res/drawable/audio_sharing_rounded_bg_ripple.xml
deleted file mode 100644
index 18696c6..0000000
--- a/res/drawable/audio_sharing_rounded_bg_ripple.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2023 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="?android:attr/colorControlHighlight">
- <item android:drawable="@drawable/audio_sharing_rounded_bg"/>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable/bt_header_circle_outline.xml b/res/drawable/bt_header_circle_outline.xml
new file mode 100644
index 0000000..ef7a532
--- /dev/null
+++ b/res/drawable/bt_header_circle_outline.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="@color/settingslib_materialColorSurfaceBright"/>
+ <stroke
+ android:width="1dp"
+ android:color="@color/settingslib_materialColorOutlineVariant"/>
+</shape>
diff --git a/res/drawable/ic_zen_mode_trigger_with_settings.xml b/res/drawable/ic_zen_mode_trigger_with_settings.xml
new file mode 100644
index 0000000..7dd81f1
--- /dev/null
+++ b/res/drawable/ic_zen_mode_trigger_with_settings.xml
@@ -0,0 +1,26 @@
+<!--
+Copyright (C) 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:tint="?android:attr/colorControlNormal"
+ android:viewportHeight="960"
+ android:viewportWidth="960"
+ android:autoMirrored="true">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M370,880L354,752Q341,747 329.5,740Q318,733 307,725L188,775L78,585L181,507Q180,500 180,493.5Q180,487 180,480Q180,473 180,466.5Q180,460 181,453L78,375L188,185L307,235Q318,227 330,220Q342,213 354,208L370,80L590,80L606,208Q619,213 630.5,220Q642,227 653,235L772,185L882,375L779,453Q780,460 780,466.5Q780,473 780,480Q780,487 780,493.5Q780,500 778,507L881,585L771,775L653,725Q642,733 630,740Q618,747 606,752L590,880L370,880ZM440,800L519,800L533,694Q564,686 590.5,670.5Q617,655 639,633L738,674L777,606L691,541Q696,527 698,511.5Q700,496 700,480Q700,464 698,448.5Q696,433 691,419L777,354L738,286L639,328Q617,305 590.5,289.5Q564,274 533,266L520,160L441,160L427,266Q396,274 369.5,289.5Q343,305 321,327L222,286L183,354L269,418Q264,433 262,448Q260,463 260,480Q260,496 262,511Q264,526 269,541L183,606L222,674L321,632Q343,655 369.5,670.5Q396,686 427,694L440,800ZM482,620Q540,620 581,579Q622,538 622,480Q622,422 581,381Q540,340 482,340Q423,340 382.5,381Q342,422 342,480Q342,538 382.5,579Q423,620 482,620ZM480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480Q480,480 480,480L480,480L480,480L480,480Q480,480 480,480Q480,480 480,480L480,480Z" />
+</vector>
\ No newline at end of file
diff --git a/res/drawable/mouse_keys_click.xml b/res/drawable/mouse_keys_click.xml
new file mode 100644
index 0000000..2dd6238
--- /dev/null
+++ b/res/drawable/mouse_keys_click.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#FFF7F9"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#804D7A"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_directional.xml b/res/drawable/mouse_keys_directional.xml
new file mode 100644
index 0000000..ae79563
--- /dev/null
+++ b/res/drawable/mouse_keys_directional.xml
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#FFF7F9"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#804D7A"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M172.4,18h12v12h-12z"/>
+ <path
+ android:pathData="M181.24,27.41L176.46,22.64V26.69H174.99V20.11H181.56V21.59H177.51L182.29,26.36L181.24,27.41Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M194.63,18h12v12h-12z"/>
+ <path
+ android:pathData="M199.89,28.02V22.81L197.66,25.05L196.61,24L200.63,19.98L204.66,24L203.61,25.05L201.37,22.81V28.02H199.89Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M216.86,18h12v12h-12z"/>
+ <path
+ android:pathData="M220.02,27.41L218.98,26.36L223.75,21.59H219.7V20.11H226.27V26.69H224.8V22.64L220.02,27.41Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.66,14 282.77,14H297C298.1,14 299,14.9 299,16V32C299,33.1 298.1,34 297,34H282.77C281.66,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.3,42 121.2,42.9 121.2,44V60C121.2,61.1 120.3,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M180.79,46h12v12h-12z"/>
+ <path
+ android:pathData="M185.6,52.74L187.84,54.97L186.79,56.03L182.76,52L186.79,47.97L187.84,49.03L185.6,51.26H190.81V52.74H185.6Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M231.59,46h12v12h-12z"/>
+ <path
+ android:pathData="M238.77,52.74H233.56V51.26H238.77L236.54,49.03L237.59,47.97L241.61,52L237.59,56.03L236.54,54.97L238.77,52.74Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M187.67,74h12v12h-12z"/>
+ <path
+ android:pathData="M190.09,83.59V78.51H191.56V81.07L196.64,76L197.67,77.04L192.6,82.11H195.16V83.59H190.09Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.44C229.55,70 230.44,70.9 230.44,72V88C230.44,89.1 229.55,90 228.44,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M213.45,74h12v12h-12z"/>
+ <path
+ android:pathData="M218.71,75.97H220.19V81.19L222.43,78.95L223.48,80L219.45,84.03L215.43,80L216.48,78.95L218.71,81.19V75.97Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#804D7A"/>
+ <group>
+ <clip-path
+ android:pathData="M239.23,74h12v12h-12z"/>
+ <path
+ android:pathData="M243.84,83.69V82.21H246.4L241.21,77.01L242.24,75.97L247.44,81.18V78.61H248.92V83.69H243.84Z"
+ android:fillColor="#ffffff"/>
+ </group>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.44C243.55,98 244.44,98.9 244.44,100V116C244.44,117.11 243.55,118 242.44,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#F2E5EB"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_press_hold.xml b/res/drawable/mouse_keys_press_hold.xml
new file mode 100644
index 0000000..af20290
--- /dev/null
+++ b/res/drawable/mouse_keys_press_hold.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#FFF7F9"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#804D7A"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_release.xml b/res/drawable/mouse_keys_release.xml
new file mode 100644
index 0000000..232d5e7
--- /dev/null
+++ b/res/drawable/mouse_keys_release.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#FFF7F9"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#804D7A"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_release2.xml b/res/drawable/mouse_keys_release2.xml
new file mode 100644
index 0000000..88422cb
--- /dev/null
+++ b/res/drawable/mouse_keys_release2.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#FFF7F9"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#804D7A"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/drawable/mouse_keys_toggle_scroll.xml b/res/drawable/mouse_keys_toggle_scroll.xml
new file mode 100644
index 0000000..1a1a550
--- /dev/null
+++ b/res/drawable/mouse_keys_toggle_scroll.xml
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="348dp"
+ android:height="160dp"
+ android:viewportWidth="348"
+ android:viewportHeight="160">
+ <path
+ android:pathData="M6,14C6,9.58 9.58,6 14,6H334C338.42,6 342,9.58 342,14V146C342,150.42 338.42,154 334,154H14C9.58,154 6,150.42 6,146V14Z"
+ android:fillColor="#FFF7F9"/>
+ <path
+ android:pathData="M14,16C14,14.9 14.9,14 16,14H30.23C31.34,14 32.23,14.9 32.23,16V32C32.23,33.1 31.34,34 30.23,34H16C14.9,34 14,33.1 14,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M36.23,16C36.23,14.9 37.13,14 38.23,14H52.46C53.57,14 54.46,14.9 54.46,16V32C54.46,33.1 53.57,34 52.46,34H38.23C37.13,34 36.23,33.1 36.23,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M58.46,16C58.46,14.9 59.36,14 60.46,14H74.69C75.8,14 76.69,14.9 76.69,16V32C76.69,33.1 75.8,34 74.69,34H60.46C59.36,34 58.46,33.1 58.46,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M80.69,16C80.69,14.9 81.59,14 82.69,14H96.92C98.03,14 98.92,14.9 98.92,16V32C98.92,33.1 98.03,34 96.92,34H82.69C81.59,34 80.69,33.1 80.69,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M102.92,16C102.92,14.9 103.82,14 104.92,14H119.15C120.26,14 121.15,14.9 121.15,16V32C121.15,33.1 120.26,34 119.15,34H104.92C103.82,34 102.92,33.1 102.92,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.15,16C125.15,14.9 126.05,14 127.15,14H141.38C142.49,14 143.38,14.9 143.38,16V32C143.38,33.1 142.49,34 141.38,34H127.15C126.05,34 125.15,33.1 125.15,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M147.38,16C147.38,14.9 148.28,14 149.38,14H163.62C164.72,14 165.62,14.9 165.62,16V32C165.62,33.1 164.72,34 163.62,34H149.38C148.28,34 147.38,33.1 147.38,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M169.62,16C169.62,14.9 170.51,14 171.62,14H185.85C186.95,14 187.85,14.9 187.85,16V32C187.85,33.1 186.95,34 185.85,34H171.62C170.51,34 169.62,33.1 169.62,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M191.85,16C191.85,14.9 192.74,14 193.85,14H208.08C209.18,14 210.08,14.9 210.08,16V32C210.08,33.1 209.18,34 208.08,34H193.85C192.74,34 191.85,33.1 191.85,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M214.08,16C214.08,14.9 214.97,14 216.08,14H230.31C231.41,14 232.31,14.9 232.31,16V32C232.31,33.1 231.41,34 230.31,34H216.08C214.97,34 214.08,33.1 214.08,32V16Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M236.31,16C236.31,14.9 237.2,14 238.31,14H252.54C253.64,14 254.54,14.9 254.54,16V32C254.54,33.1 253.64,34 252.54,34H238.31C237.2,34 236.31,33.1 236.31,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M258.54,16C258.54,14.9 259.43,14 260.54,14H274.77C275.87,14 276.77,14.9 276.77,16V32C276.77,33.1 275.87,34 274.77,34H260.54C259.43,34 258.54,33.1 258.54,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M280.77,16C280.77,14.9 281.67,14 282.77,14H297C298.11,14 299,14.9 299,16V32C299,33.1 298.11,34 297,34H282.77C281.67,34 280.77,33.1 280.77,32V16Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,16C303,14.9 303.89,14 305,14H332C333.11,14 334,14.9 334,16V32C334,33.1 333.11,34 332,34H305C303.89,34 303,33.1 303,32V16Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,44C14,42.9 14.9,42 16,42H43C44.1,42 45,42.9 45,44V60C45,61.1 44.1,62 43,62H16C14.9,62 14,61.1 14,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M49,44C49,42.9 49.9,42 51,42H68.4C69.5,42 70.4,42.9 70.4,44V60C70.4,61.1 69.5,62 68.4,62H51C49.9,62 49,61.1 49,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M74.4,44C74.4,42.9 75.3,42 76.4,42H93.8C94.9,42 95.8,42.9 95.8,44V60C95.8,61.1 94.9,62 93.8,62H76.4C75.3,62 74.4,61.1 74.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M99.8,44C99.8,42.9 100.69,42 101.8,42H119.2C120.31,42 121.2,42.9 121.2,44V60C121.2,61.1 120.31,62 119.2,62H101.8C100.69,62 99.8,61.1 99.8,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M125.2,44C125.2,42.9 126.1,42 127.2,42H144.6C145.71,42 146.6,42.9 146.6,44V60C146.6,61.1 145.71,62 144.6,62H127.2C126.1,62 125.2,61.1 125.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M150.6,44C150.6,42.9 151.5,42 152.6,42H170C171.1,42 172,42.9 172,44V60C172,61.1 171.1,62 170,62H152.6C151.5,62 150.6,61.1 150.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M176,44C176,42.9 176.9,42 178,42H195.4C196.51,42 197.4,42.9 197.4,44V60C197.4,61.1 196.51,62 195.4,62H178C176.9,62 176,61.1 176,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M201.4,44C201.4,42.9 202.29,42 203.4,42H220.8C221.9,42 222.8,42.9 222.8,44V60C222.8,61.1 221.9,62 220.8,62H203.4C202.29,62 201.4,61.1 201.4,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M226.8,44C226.8,42.9 227.7,42 228.8,42H246.2C247.3,42 248.2,42.9 248.2,44V60C248.2,61.1 247.3,62 246.2,62H228.8C227.7,62 226.8,61.1 226.8,60V44Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M252.2,44C252.2,42.9 253.1,42 254.2,42H271.6C272.7,42 273.6,42.9 273.6,44V60C273.6,61.1 272.7,62 271.6,62H254.2C253.1,62 252.2,61.1 252.2,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M277.6,44C277.6,42.9 278.5,42 279.6,42H297C298.11,42 299,42.9 299,44V60C299,61.1 298.11,62 297,62H279.6C278.5,62 277.6,61.1 277.6,60V44Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M303,44C303,42.9 303.89,42 305,42H332C333.11,42 334,42.9 334,44V60C334,61.1 333.11,62 332,62H305C303.89,62 303,61.1 303,60V44Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,72C14,70.9 14.9,70 16,70H48C49.1,70 50,70.9 50,72V88C50,89.1 49.1,90 48,90H16C14.9,90 14,89.1 14,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,72C54,70.9 54.9,70 56,70H73.78C74.88,70 75.78,70.9 75.78,72V88C75.78,89.1 74.88,90 73.78,90H56C54.9,90 54,89.1 54,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M79.78,72C79.78,70.9 80.67,70 81.78,70H99.56C100.66,70 101.56,70.9 101.56,72V88C101.56,89.1 100.66,90 99.56,90H81.78C80.67,90 79.78,89.1 79.78,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M105.56,72C105.56,70.9 106.45,70 107.56,70H125.33C126.44,70 127.33,70.9 127.33,72V88C127.33,89.1 126.44,90 125.33,90H107.56C106.45,90 105.56,89.1 105.56,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M131.33,72C131.33,70.9 132.23,70 133.33,70H151.11C152.22,70 153.11,70.9 153.11,72V88C153.11,89.1 152.22,90 151.11,90H133.33C132.23,90 131.33,89.1 131.33,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M157.11,72C157.11,70.9 158.01,70 159.11,70H176.89C177.99,70 178.89,70.9 178.89,72V88C178.89,89.1 177.99,90 176.89,90H159.11C158.01,90 157.11,89.1 157.11,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M182.89,72C182.89,70.9 183.78,70 184.89,70H202.67C203.77,70 204.67,70.9 204.67,72V88C204.67,89.1 203.77,90 202.67,90H184.89C183.78,90 182.89,89.1 182.89,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M208.67,72C208.67,70.9 209.56,70 210.67,70H228.45C229.55,70 230.45,70.9 230.45,72V88C230.45,89.1 229.55,90 228.45,90H210.67C209.56,90 208.67,89.1 208.67,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M234.44,72C234.44,70.9 235.34,70 236.44,70H254.22C255.33,70 256.22,70.9 256.22,72V88C256.22,89.1 255.33,90 254.22,90H236.44C235.34,90 234.44,89.1 234.44,88V72Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M260.22,72C260.22,70.9 261.12,70 262.22,70H280C281.11,70 282,70.9 282,72V88C282,89.1 281.11,90 280,90H262.22C261.12,90 260.22,89.1 260.22,88V72Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M286,72C286,70.9 286.89,70 288,70H332C333.11,70 334,70.9 334,72V88C334,89.1 333.11,90 332,90H288C286.89,90 286,89.1 286,88V72Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,100C14,98.9 14.9,98 16,98H62C63.1,98 64,98.9 64,100V116C64,117.11 63.1,118 62,118H16C14.9,118 14,117.11 14,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M68,100C68,98.9 68.9,98 70,98H87.78C88.88,98 89.78,98.9 89.78,100V116C89.78,117.11 88.88,118 87.78,118H70C68.9,118 68,117.11 68,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M93.78,100C93.78,98.9 94.67,98 95.78,98H113.56C114.66,98 115.56,98.9 115.56,100V116C115.56,117.11 114.66,118 113.56,118H95.78C94.67,118 93.78,117.11 93.78,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M119.56,100C119.56,98.9 120.45,98 121.56,98H139.33C140.44,98 141.33,98.9 141.33,100V116C141.33,117.11 140.44,118 139.33,118H121.56C120.45,118 119.56,117.11 119.56,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M145.33,100C145.33,98.9 146.23,98 147.33,98H165.11C166.22,98 167.11,98.9 167.11,100V116C167.11,117.11 166.22,118 165.11,118H147.33C146.23,118 145.33,117.11 145.33,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M171.11,100C171.11,98.9 172.01,98 173.11,98H190.89C191.99,98 192.89,98.9 192.89,100V116C192.89,117.11 191.99,118 190.89,118H173.11C172.01,118 171.11,117.11 171.11,116V100Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M196.89,100C196.89,98.9 197.78,98 198.89,98H216.67C217.77,98 218.67,98.9 218.67,100V116C218.67,117.11 217.77,118 216.67,118H198.89C197.78,118 196.89,117.11 196.89,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M222.67,100C222.67,98.9 223.56,98 224.67,98H242.45C243.55,98 244.45,98.9 244.45,100V116C244.45,117.11 243.55,118 242.45,118H224.67C223.56,118 222.67,117.11 222.67,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M248.44,100C248.44,98.9 249.34,98 250.44,98H268.22C269.33,98 270.22,98.9 270.22,100V116C270.22,117.11 269.33,118 268.22,118H250.44C249.34,118 248.44,117.11 248.44,116V100Z"
+ android:fillColor="#804D7A"/>
+ <path
+ android:pathData="M274.22,100C274.22,98.9 275.12,98 276.22,98H294C295.11,98 296,98.9 296,100V116C296,117.11 295.11,118 294,118H276.22C275.12,118 274.22,117.11 274.22,116V100Z"
+ android:fillColor="#F8DAEE"/>
+ <path
+ android:pathData="M300,100C300,98.9 300.89,98 302,98H332C333.11,98 334,98.9 334,100V116C334,117.11 333.11,118 332,118H302C300.89,118 300,117.11 300,116V100Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M14,128C14,126.89 14.9,126 16,126H48C49.1,126 50,126.89 50,128V144C50,145.1 49.1,146 48,146H16C14.9,146 14,145.1 14,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M54,128C54,126.89 54.9,126 56,126H88C89.1,126 90,126.89 90,128V144C90,145.1 89.1,146 88,146H56C54.9,146 54,145.1 54,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M94,128C94,126.89 94.9,126 96,126H248C249.1,126 250,126.89 250,128V144C250,145.1 249.1,146 248,146H96C94.9,146 94,145.1 94,144V128Z"
+ android:fillColor="#D1C2CB"/>
+ <path
+ android:pathData="M254,128C254,126.89 254.9,126 256,126H276C277.11,126 278,126.89 278,128V144C278,145.1 277.11,146 276,146H256C254.9,146 254,145.1 254,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M282,128C282,126.89 282.89,126 284,126H304C305.11,126 306,126.89 306,128V144C306,145.1 305.11,146 304,146H284C282.89,146 282,145.1 282,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M310,128C310,126.89 310.89,126 312,126H332C333.11,126 334,126.89 334,128V144C334,145.1 333.11,146 332,146H312C310.89,146 310,145.1 310,144V128Z"
+ android:fillColor="#ECDFE5"/>
+ <path
+ android:pathData="M18,3C9.72,3 3,9.72 3,18V142C3,150.28 9.72,157 18,157H330C338.28,157 345,150.28 345,142V18C345,9.72 338.28,3 330,3H18Z"
+ android:strokeWidth="6"
+ android:fillColor="#00000000"
+ android:strokeColor="#ECDFE5"/>
+</vector>
diff --git a/res/layout/advanced_bt_entity_sub.xml b/res/layout/advanced_bt_entity_sub.xml
index dd8e43a..252ab47 100644
--- a/res/layout/advanced_bt_entity_sub.xml
+++ b/res/layout/advanced_bt_entity_sub.xml
@@ -34,7 +34,7 @@
android:layout_height="72dp"
android:layout_gravity="center"
android:antialias="true"
- android:background="@drawable/circle_outline"
+ android:background="@drawable/bt_header_circle_outline"
android:padding="8dp"
android:scaleType="fitCenter" />
diff --git a/res/layout/audio_sharing_password_dialog.xml b/res/layout/audio_sharing_password_dialog.xml
index 2bdf505..a862f3b 100644
--- a/res/layout/audio_sharing_password_dialog.xml
+++ b/res/layout/audio_sharing_password_dialog.xml
@@ -35,6 +35,17 @@
android:layout_marginEnd="20dp"
android:minHeight="48dp" />
+ <TextView
+ android:id="@+id/edit_alert_message"
+ style="?android:attr/textAppearanceSmall"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="24dp"
+ android:layout_marginEnd="24dp"
+ android:visibility="gone"
+ android:text="@string/audio_streams_main_page_password_dialog_format_alert"
+ android:textColor="?android:attr/colorError" />
+
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/res/layout/dialog_custom_body_audio_sharing.xml b/res/layout/dialog_custom_body_audio_sharing.xml
index ba7f643..5e9f239 100644
--- a/res/layout/dialog_custom_body_audio_sharing.xml
+++ b/res/layout/dialog_custom_body_audio_sharing.xml
@@ -64,7 +64,7 @@
android:layout_gravity="center"
android:layout_marginTop="4dp"
android:textColor="?androidprv:attr/textColorOnAccent"
- android:background="@drawable/audio_sharing_rounded_bg_ripple"
+ android:background="@drawable/audio_sharing_rounded_bg_ripple_top"
android:visibility="gone" />
<Button
@@ -75,7 +75,7 @@
android:layout_gravity="center"
android:layout_marginTop="4dp"
android:textColor="?androidprv:attr/textColorOnAccent"
- android:background="@drawable/audio_sharing_rounded_bg_ripple"
+ android:background="@drawable/audio_sharing_rounded_bg_ripple_bottom"
android:visibility="gone" />
</LinearLayout>
</ScrollView>
\ No newline at end of file
diff --git a/res/layout/dialog_a11y_bounce_key.xml b/res/layout/dialog_keyboard_a11y_input_setting_keys.xml
similarity index 80%
rename from res/layout/dialog_a11y_bounce_key.xml
rename to res/layout/dialog_keyboard_a11y_input_setting_keys.xml
index da3ebde..dfa3c46 100644
--- a/res/layout/dialog_a11y_bounce_key.xml
+++ b/res/layout/dialog_keyboard_a11y_input_setting_keys.xml
@@ -22,47 +22,45 @@
android:orientation="vertical">
<TextView
- android:id="@+id/bounce_key_dialog_title"
+ android:id="@+id/input_setting_keys_dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="20sp"
android:gravity="center_horizontal"
- android:text="@string/bounce_keys_dialog_title"
android:textColor="?android:attr/textColorPrimary"
android:fontFamily="@*android:string/config_headlineFontFamilyMedium"
/>
<TextView
- android:id="@+id/bounce_key_dialog_subtitle"
+ android:id="@+id/input_setting_keys_dialog_subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="26dp"
android:layout_marginTop="8dp"
android:textSize="16sp"
android:gravity="center"
- android:text="@string/bounce_keys_dialog_subtitle"
android:textColor="?android:attr/textColorSecondary"
/>
<RadioGroup
- android:id="@+id/bounce_key_value_group"
+ android:id="@+id/input_setting_keys_value_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="16dp">
<RadioButton
- android:id="@+id/bounce_key_value_200"
- android:text="@string/bounce_keys_dialog_option_200"
+ android:id="@+id/input_setting_keys_value_200"
+ android:text="@string/input_setting_keys_dialog_option_200"
android:paddingStart="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="start|center_vertical"
android:background="@null"/>
<RadioButton
- android:id="@+id/bounce_key_value_400"
- android:text="@string/bounce_keys_dialog_option_400"
+ android:id="@+id/input_setting_keys_value_400"
+ android:text="@string/input_setting_keys_dialog_option_400"
android:paddingStart="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -70,8 +68,8 @@
android:layout_marginTop="12dp"
android:background="@null"/>
<RadioButton
- android:id="@+id/bounce_key_value_600"
- android:text="@string/bounce_keys_dialog_option_600"
+ android:id="@+id/input_setting_keys_value_600"
+ android:text="@string/input_setting_keys_dialog_option_600"
android:paddingStart="12dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -85,14 +83,14 @@
android:layout_height="wrap_content"
android:layout_marginVertical="12dp">
<RadioButton
- android:id="@+id/bounce_key_value_custom"
+ android:id="@+id/input_setting_keys_value_custom"
android:paddingStart="12dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="@null"/>
<LinearLayout
- android:id="@+id/custom_value_option"
+ android:id="@+id/input_setting_keys_custom_value_option"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -100,15 +98,15 @@
android:gravity="center_vertical"
android:paddingEnd="16dp">
<TextView
- android:id="@+id/bounce_key_value_custom_title"
- android:text="Custom"
+ android:id="@+id/input_setting_keys_value_custom_title"
+ android:text="@string/input_setting_keys_custom_title"
android:textColor="?android:attr/textColorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"/>
<TextView
- android:id="@+id/bounce_key_value_custom_value"
- android:text="custom value"
+ android:id="@+id/input_setting_keys_value_custom_value"
+ android:text="@string/input_setting_keys_custom_value"
android:textColor="?android:attr/textColorPrimary"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -116,7 +114,7 @@
android:layout_marginTop="8dp"
android:visibility="gone"/>
<SeekBar
- android:id="@+id/bounce_key_value_custom_slider"
+ android:id="@+id/input_setting_keys_value_custom_slider"
android:paddingStart="8dp"
android:paddingEnd="36dp"
android:min="1"
diff --git a/res/layout/mouse_keys_image_item.xml b/res/layout/mouse_keys_image_item.xml
new file mode 100644
index 0000000..36b9992
--- /dev/null
+++ b/res/layout/mouse_keys_image_item.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/layout_description"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_marginEnd="20dp"
+ android:layout_marginBottom="20dp"
+ android:textAppearance="?android:attr/textAppearanceListItemSmall"
+ android:drawablePadding="8dp"/>
diff --git a/res/layout/mouse_keys_image_list.xml b/res/layout/mouse_keys_image_list.xml
new file mode 100644
index 0000000..f111736
--- /dev/null
+++ b/res/layout/mouse_keys_image_list.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <androidx.recyclerview.widget.RecyclerView
+ android:id="@+id/mouse_keys_image_recycler_list"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:clipToPadding="true"
+ android:nestedScrollingEnabled="false"
+ android:padding="12dp"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"/>
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/res/layout/preference_category_bluetooth_no_padding.xml b/res/layout/preference_category_bluetooth_no_padding.xml
new file mode 100644
index 0000000..9868eb4
--- /dev/null
+++ b/res/layout/preference_category_bluetooth_no_padding.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:orientation="horizontal"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+ android:paddingTop="0dp"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+</LinearLayout>
diff --git a/res/layout/preference_credential_manager_with_buttons.xml b/res/layout/preference_credential_manager_with_buttons.xml
index 24096f7..e27bd50 100644
--- a/res/layout/preference_credential_manager_with_buttons.xml
+++ b/res/layout/preference_credential_manager_with_buttons.xml
@@ -18,6 +18,7 @@
<!-- Based off preference_single_target.xml with buttons added below text. -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -95,18 +96,29 @@
android:gravity="center"
android:orientation="vertical" />
- <LinearLayout
+ <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/credman_button_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="start|center_vertical"
android:minWidth="56dp"
- android:orientation="horizontal"
android:clipToPadding="false"
android:paddingTop="4dp"
android:paddingLeft="76dp"
android:paddingBottom="4dp">
+ <androidx.constraintlayout.helper.widget.Flow
+ android:id="@+id/button_flow"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ app:constraint_referenced_ids="change_button, open_button"
+ app:flow_horizontalStyle="spread_inside"
+ app:flow_wrapMode="chain"
+ app:flow_verticalGap = "16dp"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
<Button
android:id="@+id/change_button"
android:layout_width="match_parent"
@@ -122,6 +134,6 @@
android:visibility="gone"
android:text="@string/credman_button_open"/>
- </LinearLayout>
+ </androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
\ No newline at end of file
diff --git a/res/values-af/arrays.xml b/res/values-af/arrays.xml
index 4b51726..01f6f3a 100644
--- a/res/values-af/arrays.xml
+++ b/res/values-af/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Sneeuvlokkie"</item>
<item msgid="7952183800501346803">"Strandsambreel"</item>
<item msgid="799139025758265891">"Werkswinkelgereedskap"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Klavier"</item>
<item msgid="3861584909935022342">"Filmspoel"</item>
<item msgid="5827426100157335512">"Boek"</item>
<item msgid="8585828346253128384">"Egiptiese waterlelie"</item>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 56a239f..b95a22d 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Deaktiveer Bluetooth LE-oudio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Deaktiveer Bluetooth LE-oudio-kenmerk as die toestel LE oudiohardewarevermoëns ondersteun."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE-oudiomodus"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Wys LE-oudiowisselaar in Toestelbesonderhede"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omseil Bluetooth LE-oudiotoelaatlys"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Gebruik LE-oudio by verstek, selfs as LE-oudio se randtoestel nie geverifieer is vir voldoening aan toelaatlyskriteria nie."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Stel outomaties deur jou netwerk- en draadloosinstellings"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Outomatiese tydsone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Stel outomaties op grond van mobiele netwerke naby jou"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Stel outomaties met jou toestelligging, indien beskikbaar. ’n Aktiewe wi-fi-verbinding kan vereis word."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Stel outomaties met jou toestelligging, indien beskikbaar"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gebruik verstek vir locale"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gebruik 24-uur-formaat"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Tyd"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Toeganklikheid"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fisiese sleutelbord"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Hopsleutels"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Die sleutelbord ignoreer vinnig herhaalde drukke van dieselfde sleutel"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Bonssleuteldrempel"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Kies vir hoe lank jou sleutelbord herhaalde sleuteldrukke ignoreer"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2s."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4s."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6s."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Gepasmaak"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"gepasmaakte waarde"</string>
<string name="slow_keys" msgid="2891452895499690837">"Stadige sleutels"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Verstel die tyd wat dit neem vir ’n sleuteldruk om geaktiveer te word"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Taaisleutels"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Druk een sleutel op ’n slag vir kortpaaie pleks van om die sleutels saam in te hou"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Muissleutels"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Gebruik jou sleutelbord om die wyser te beheer"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Muis – omgekeerde rollees"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Rollees op om die bladsy af te beweeg"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Ruil linker- en regterknoppies om"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Gebruik die muis se linkerknoppie as jou regterknoppie"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Kortpadsleutels"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Wys lys met kortpaaie"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Kies ’n nuwe sleutel vir <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Toeganklikheid vir fisieke sleutelbord"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Taaisleutels, hopsleutels, muissleutels"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Herhaalsleutels"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Vertraging voor herhaling"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Herhaalkoers"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hou ’n sleutel in om sy karakter te herhaal totdat die sleutel gelos word"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g>-uitleg"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Verstek"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Outomaties: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Voorskou"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standaardopsies"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Taal"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Onderskrifgrootte"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Onderskrifstyl"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Gepasmaakte opsies"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Agtergrondkleur"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Verstel kraggebruik"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Ingeslote pakkette"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Programme werk normaal"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Batteryvlak is laag"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Skakel Batterybespaarder aan om batterylewe te verleng"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Verbeter batterylewe"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Ontkoppel hierdie VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ontkoppel"</string>
<string name="vpn_version" msgid="6344167191984400976">"Weergawe"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Weergawe <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Vergeet VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vervang bestaande VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Stel altyd-aan VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00-17:00 weeksdae\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalendergeleenthede"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} is aktief}=2{{mode_1} en {mode_2} is aktief}=3{{mode_1}, {mode_2} en {mode_3} is aktief}other{{mode_1}, {mode_2} en nog # is aktief}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modus kan outomaties aanskakel}other{# modusse kan outomaties aanskakel}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AAN"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nie gestel nie"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Gedeaktiveer"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Soekinstellings"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakte, berging, rekening"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontakte-berging"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Geen verstek gestel nie"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Net toestel"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nuwe kontakte sal nie met ’n rekening gesinkroniseer word nie"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakte sal by verstek op jou toestel gestoor en met jou rekening gesinkroniseer word"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Daar was ’n fout met die stel van die verstekrekening"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Geen verstek gestel nie"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Net toestel"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Voeg ’n rekening by om te begin"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Omkring en Soek"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Raak en hou die Tuisknoppie of die navigasiehandvatsel om met gebruik van die inhoud op jou skerm te soek."</string>
</resources>
diff --git a/res/values-am/arrays.xml b/res/values-am/arrays.xml
index f2996ac..d0a748b 100644
--- a/res/values-am/arrays.xml
+++ b/res/values-am/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"የበረዶ ቅንጣት"</item>
<item msgid="7952183800501346803">"የባህር ዳርቻ ዣንጥላ"</item>
<item msgid="799139025758265891">"የሥራ ቦታ መሣሪያዎች"</item>
- <item msgid="1330084588359129896">"ድንኳን"</item>
+ <item msgid="8112685757657659269">"ፒያኖ"</item>
<item msgid="3861584909935022342">"የፊልም ሪል"</item>
<item msgid="5827426100157335512">"መጽሐፍ"</item>
<item msgid="8585828346253128384">"የሎተስ አበባ"</item>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index fd47a2c..47c4432 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"የብሉቱዝ LE ኦዲዮን ያሰናክሉ"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"መሣሪያው የLE ኦዲዮ ሃርድዌር ችሎታዎችን የሚደግፍ ከሆነ የብሉቱዝ ኦዲዮ ባህሪን ያሰናክላል።"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"የብሉቱዝ LE ኦዲዮ ሁነታ"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"በመሣሪያ ዝርዝሮች ውስጥ LE ኦዲዮ መቀያየሪያን አሳይ"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"የብሉቱዝ LE ኦዲዮ የተፈቀዱ ዝርዝርን እለፍ"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE ኦዲዮ ተቀጥላ የተፈቀዱ ዝርዝር መስፈርቶችን እንደሚያሟላ ባይረጋገጥም እንኳን LE ኦዲዮን በነባሪ መጠቀም።"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"አውታረ መረቡን እና ገመድ አልባ ምልክቶችን በመጠቀም በራስ-ሰር ያቀናብሩ"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ራስ-ሰር የሰዓት ሰቅ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"በአቅራቢያዎ ባሉ የተንቀሳቃሽ ስልክ አውታረ መረቦች መሰረት በራስ-ሰር ያቀናብሩ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"የሚገኝ ከሆነ የመሣሪያዎን አካባቢ በመጠቀም በራስ-ሰር ያቀናብሩ። እንዲሁም ንቁ የWifi ግንኙነት ሊያስፈልግ ይችላል።"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"የሚገኝ ከሆነ የመሣሪያዎን አካባቢ በመጠቀም በራስ-ሰር ያቀናብሩ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"የቋንቋ ነባሪ ይጠቀሙ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 ሰዓት ቅርፀት ተጠቀም"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"ሰዓት"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"ተደራሽነት"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"አካላዊ ቁልፍ ሰሌዳ"</string>
<string name="bounce_keys" msgid="7419450970351743904">"የመንጠሪያ ቁልፎች"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"ቁልፍ ሰሌዳው ተመሳሳዩ ቁልፍ በፍጥነት መጫኖችን ችላ ይላል"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"የወጡ ቁልፎች መባቻ"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"የቁልፍ ሰሌዳዎ ተደጋጋሚ የቁልፍ መጫኖችን ችላ የሚልበትን የቆይታ ጊዜ ይምረጡ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2ሰ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4ሰ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6ሰ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"ብጁ"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ብጁ እሴት"</string>
<string name="slow_keys" msgid="2891452895499690837">"ቀርፋፋ ቁልፎች"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"የቁልፍ መጫኖችን ለማግበር የሚወስደውን ጊዜ ያስተካክላል"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ተጣባቂ ቁልፎች"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"አቋራጮችን ለማግኘት ቁልፎችን በአንድ ላይ ከመያዝ ይልቅ ቁልፎችን አንድ በአንድ ይጫኑ"</string>
<string name="mouse_keys" msgid="6237254627808525540">"የመዳፊት ቁልፎች"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"ነጥቦቹን ለመቆጣጠር የቁልፍ ሰሌዳዎን ይጠቀሙ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"የመዳፊት ወደኋላ መሸብለል"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"ገፁን ወደ ታች ለማንቀሳቀስ ወደ ላይ ይሸብልሉ"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"የግራ እና የቀኝ አዝራሮችን ያለዋውጡ"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"የግራ የመዳፊት አዝራሩን እንደ የእርስዎ ቀኝ ይጠቀሙ"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"የቁልፍ ሰሌዳ አቋራጮች"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"የአቋራጭ ዝርዝርን አሳይ"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"ለ<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> አዲስ ቁልፍ ይምረጡ፦"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"የአካላዊ ቁልፍ ሰሌዳ ተደራሽነት"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ተለጣፊ ቁልፎች፣ አንጥር ቁልፎች፣ የመዳፊት ቁልፎች"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"የሚደጋገሙ አዝራሮች"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ከመድገም በፊት አዘግይ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"የድግግሞሽ ፍጥነት"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"አንድ አዝራር እስከሚለቀቅ ድረስ ቁምፊውን ለመደጋገም አዝራሩን ተጭነው ይያዙ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"የ<xliff:g id="IME_LABEL">%s</xliff:g> አቀማመጥ"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ነባሪ"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ራስ-ሰር፦ <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ቅድመ-ዕይታ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"መደበኛ አማራጮች"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ቋንቋ"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"የመግለጫ ጽሁፍ መጠን"</string>
<string name="captioning_preset" msgid="4174276086501638524">"የመግለጫ ጽሁፍ ቅጥ"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ብጁ አማራጮች"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"የጀርባ ቀለም"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"የኃይል አጠቃቀም አስተካክል"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"የታከሉ አካታቾች"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"መተግበሪያዎች በመደበኝነት እያሄዱ ናቸው"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"የባትሪ ደረጃ ዝቅተኛ ነው"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"የባትሪ ዕድሜን ለማራዘም የባትሪ ቆጣቢን ያብሩ"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"የባትሪ ዕድሜን ያሻሽሉ"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"የዚህ ቪፒኤን ግንኙነት ይቋረጥ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ግንኙነት አቋርጥ"</string>
<string name="vpn_version" msgid="6344167191984400976">"ስሪት"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ሥሪት <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPNን እርሳ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"አሁን ያለው VPN ይተካ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ሁልጊዜ-የበራ VPN ይቀናበር?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"«9 ጠዋት - 5 ከሰዓት የሥራ ቀናት»"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"የቀን መቁጠሪያ ክስተቶች"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ገቢር ነው}=2{{mode_1} እና {mode_2} ገቢር ናቸው}=3{{mode_1}፣ {mode_2} እና {mode_3} ገቢር ናቸው}one{{mode_1}፣ {mode_2} እና # ተጨማሪ ገቢር ናቸው}other{{mode_1}፣ {mode_2} እና # ተጨማሪ ገቢር ናቸው}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ሁነታ በራስ ሰር መብራት ይችላል}one{# ሁነታ በራስ ሰር መብራት ይችላል}other{# ሁነታዎች በራስ ሰር መብራት ይችላሉ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"በርቷል"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"አልተቀናበረም"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ተሰናክሏል"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"ቅንብሮች ውስጥ ይፈልጉ"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"ዕውቂያዎች፣ ማከማቻ፣ መለያ"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"የዕውቂያዎች ማከማቻ"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ምንም ነባሪ አልተቀናበረም"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"መሣሪያ ብቻ"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"አዳዲስ ዕውቂያዎች በመለያ አይሰምሩም"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"ዕውቂያዎች ወደ መሣሪያዎ ይቀመጣሉ እና በነባሪ ከመለያዎ ጋር ይሰምራሉ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ነባሪ መለያውን በማቀናበር ላይ ስህተት"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ምንም ነባሪ አልተቀናበረም"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"መሣሪያ ብቻ"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ለመጀመር መለያ ያክሉ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ለመፈለግ ክበብ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"በማያ ገፅዎ ላይ ያለውን ይዘት በመጠቀም ለመፈለግ የመነሻ አዝራሩን ወይም የአሰሳ መያዣውን ይንኩ እና ይያዙ።"</string>
</resources>
diff --git a/res/values-ar/arrays.xml b/res/values-ar/arrays.xml
index 5f924b2..11636c3 100644
--- a/res/values-ar/arrays.xml
+++ b/res/values-ar/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ندفة ثلج"</item>
<item msgid="7952183800501346803">"مظلة شاطئ"</item>
<item msgid="799139025758265891">"أدوات ورشة عمل"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"بيانو"</item>
<item msgid="3861584909935022342">"بكرة فيلم"</item>
<item msgid="5827426100157335512">"كتاب"</item>
<item msgid="8585828346253128384">"زهرة لوتس"</item>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 5365903..fdbd893 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"إيقاف ميزة Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"يؤدي هذا الخيار إلى إيقاف ميزة Bluetooth LE audio إذا كان الجهاز متوافقًا مع إمكانيات جهاز الصوت المنخفض الطاقة."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"وضع Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"إظهار خيار تفعيل LE Audio أو إيقافه في تفاصيل الجهاز"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"استبعاد القائمة المسموح بها لتطبيق Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"استخدِم تطبيق LE Audio تلقائيًا حتى إذا لم يتم التأكّد من توافق الجهاز الملحق مع معايير القائمة المسموح بها."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ضبط التاريخ والوقت تلقائيًا باستخدام إشارة الشبكة والإشارة اللاسلكية"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"المنطقة الزمنية التلقائية"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ضبط التاريخ والوقت تلقائيًا استنادًا إلى شبكات الجوّال القريبة منك"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"يمكن ضبط التاريخ والوقت تلقائيًا باستخدام الموقع الجغرافي لجهازك، إذا كان متاحًا. وقد يُطلَب الاتصال بشبكة Wi-Fi نشِطة."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"يمكن ضبط التاريخ والوقت تلقائيًا باستخدام الموقع الجغرافي لجهازك، إذا كان متاحًا"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"استخدام التنسيق التلقائي المحلي"</string>
<string name="date_time_24hour" msgid="286679379105653406">"استخدام تنسيق ٢٤ ساعة"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"الوقت"</string>
@@ -924,7 +928,7 @@
<string name="show_hdr_sdr_ratio" msgid="4188007289024955585">"عرض نسبة نطاق HDR أو نطاق SDR"</string>
<string name="show_hdr_sdr_ratio_summary" msgid="986292785096013733">"عرض نسبة نطاق HDR أو نطاق SDR الحالية"</string>
<string name="nfc_quick_toggle_title" msgid="3607620705230351666">"الاتصال القصير المدى (NFC)"</string>
- <string name="nfc_secure_settings_title" msgid="4906958426927741485">"يجب فتح قفل الجهاز لاستخدام تقنية الاتصال القصير المدى (NFC)"</string>
+ <string name="nfc_secure_settings_title" msgid="4906958426927741485">"يجب فتح قفل الجهاز لاستخدام اتصال NFC"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"شعاع Android"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"جاهز لنقل محتوى التطبيق عبر الاتصالات القريبة المدى (NFC)"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"إيقاف"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"تتجاهل لوحة المفاتيح الضغطات المتكررة بسرعة على المفتاح نفسه"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"حدّ تجاهُل النقرات المتكرّرة"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"اختَر المدة الزمنية التي تتجاهل فيها لوحة المفاتيح الضغطات المتكرّرة على المفاتيح"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 ثانية"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 ثانية"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 ثانية"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 ثانية"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 ثانية"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 ثانية"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"مخصّصة"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"قيمة مخصّصة"</string>
<string name="slow_keys" msgid="2891452895499690837">"المفاتيح البطيئة"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"تضبط هذه الميزة المهلة قبل أن يعمل المفتاح عند الضغط عليه"</string>
<string name="sticky_keys" msgid="7317317044898161747">"تثبيت المفاتيح"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"اضغط على مفتاح واحد في كل مرة للحصول على الاختصارات بدلاً من الضغط باستمرار على المفاتيح معًا"</string>
<string name="mouse_keys" msgid="6237254627808525540">"مفاتيح الماوس"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"يمكنك استخدام لوحة المفاتيح للتحكّم في المؤشر"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"الانتقال العكسي عبر الماوس"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"يمكنك الانتقال للأعلى لتحريك محتوى الصفحة للأسفل"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"تبديل الزرَّين الأيمن والأيسر"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"يمكنك استخدام زر الماوس الأيسر كزر الماوس الأيمن"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"اختصارات لوحة المفاتيح"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"إظهار قائمة الاختصارات"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"لوحات مفاتيح وأدوات ملف العمل"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"اختيار مفتاح جديد لـ \"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>\":"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"تسهيل استخدام لوحة المفاتيح الخارجية"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ميزة \"تثبيت المفاتيح\" وميزة \"تجاهُل النقرات المتكرّرة\" ومفاتيح الماوس"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"تكرار الحرف الذي يكتبه المفتاح"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"مدة التأخير قبل التكرار"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"معدّل التكرار"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"اضغط مع الاستمرار على أحد المفاتيح لتكرار الحرف الذي يكتبه هذا المفتاح إلى أن ترفع إصبعك عنه"</string>
<string name="ime_label_title" msgid="8994569521516807168">"التنسيق <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"تلقائي"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"تلقائي: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"معاينة"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"خيارات عادية"</string>
<string name="captioning_locale" msgid="5533303294290661590">"اللغة"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"حجم نص الترجمة والشرح"</string>
<string name="captioning_preset" msgid="4174276086501638524">"نمط الشرح"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"خيارات مخصصة"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"لون الخلفية"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ضبط استخدام الطاقة"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"الحزم المضمنة"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"التطبيقات تعمل بشكل طبيعي"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"مستوى شحن البطارية منخفض"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"يمكنك تفعيل خيار \"توفير شحن البطارية\" لإطالة عمر البطارية."</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"إطالة عمر البطارية"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"هل تريد قطع الاتصال بهذه شبكة VPN؟"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"قطع الاتصال"</string>
<string name="vpn_version" msgid="6344167191984400976">"الإصدار"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"الإصدار <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"نسيان شبكة VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"هل تريد استبدال شبكة VPN الحالية؟"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"هل تريد تشغيل شبكة VPN باستمرار؟"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"أيام الأسبوع من 9 صباحًا إلى 5 بعد الظهر\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"أحداث التقويم"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{تمّ تفعيل الوضع \"{mode_1}\"}=2{تمّ تفعيل الوضعَين \"{mode_1}\" و\"{mode_2}\"}=3{تمّ تفعيل الأوضاع \"{mode_1}\" و\"{mode_2}\" و\"{mode_3}\"}few{تمّ تفعيل الوضعَين \"{mode_1}\" و\"{mode_2}\" و# أوضاع أخرى}many{تمّ تفعيل الوضعَين \"{mode_1}\" و\"{mode_2}\" و# وضعًا آخرًا}other{تمّ تفعيل الوضعَين \"{mode_1}\" و\"{mode_2}\" و# وضع آخر}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{يمكن تفعيل وضع واحد تلقائيًا}two{يمكن تفعيل وضعَين تلقائيًا}few{يمكن تفعيل # أوضاع تلقائيًا}many{يمكن تفعيل # وضعًا تلقائيًا}other{يمكن تفعيل # وضع تلقائيًا}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"مفعَّل"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"لم يتم ضبط الوضع"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"غير مفعَّل"</string>
@@ -5149,7 +5180,7 @@
<string name="wireless_debugging_main_switch_title" msgid="8463499572781441719">"استخدام ميزة \"تصحيح الأخطاء اللاسلكي\""</string>
<string name="graphics_driver_main_switch_title" msgid="6125172901855813790">"استخدام الإعدادات المفضّلة لبرنامج تشغيل الرسومات"</string>
<string name="night_light_main_switch_title" msgid="3428298022467805219">"استخدام ميزة \"الإضاءة الليلية\""</string>
- <string name="nfc_main_switch_title" msgid="6295839988954817432">"استخدام الاتصال القصير المدى (NFC)"</string>
+ <string name="nfc_main_switch_title" msgid="6295839988954817432">"استخدام اتصال NFC"</string>
<string name="adaptive_brightness_main_switch_title" msgid="2681666805191642737">"استخدام ميزة \"السطوع التكيُّفي\""</string>
<string name="wifi_calling_main_switch_title" msgid="4070224008346815634">"استخدام ميزة \"الاتصال عبر Wi-Fi\""</string>
<string name="default_see_all_apps_title" msgid="7481113230662612178">"عرض كل التطبيقات"</string>
@@ -5461,6 +5492,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"الجهاز فقط"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"لن تتم مزامنة جهات الاتصال الجديدة مع أحد الحسابات"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"سيتم حفظ جهات الاتصال على جهازك ومزامَنتها مع حسابك تلقائيًا"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"لم يتم ضبط حساب تلقائي"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"حدث خطأ أثناء ضبط الحساب التلقائي"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"لم يتم ضبط حساب تلقائي"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"الجهاز فقط"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"يُرجى إضافة حساب للبدء"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"دائرة البحث"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"انقر مع الاستمرار على زر الشاشة الرئيسية أو مؤشر التنقُّل للبحث باستخدام المحتوى الذي يظهر على شاشتك."</string>
</resources>
diff --git a/res/values-as/arrays.xml b/res/values-as/arrays.xml
index bddefce..992508f 100644
--- a/res/values-as/arrays.xml
+++ b/res/values-as/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"তুষাৰ কণিকা"</item>
<item msgid="7952183800501346803">"সমুদ্ৰতীৰৰ ছাতি"</item>
<item msgid="799139025758265891">"কৰ্মশালাৰ সঁজুলি"</item>
- <item msgid="1330084588359129896">"তম্বু"</item>
+ <item msgid="8112685757657659269">"পিয়ান’"</item>
<item msgid="3861584909935022342">"ফিল্মৰ ৰীল"</item>
<item msgid="5827426100157335512">"কিতাপ"</item>
<item msgid="8585828346253128384">"পদুম ফুল"</item>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index a0ded4d..2d853a2 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ব্লুটুথ LE অডিঅ’ অক্ষম কৰক"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ডিভাইচটোৱে LE অডিঅ’ হাৰ্ডৱেৰ ক্ষমতাসমূহ সমৰ্থন কৰিলে ই ব্লুটুথ LE অডিঅ’ সুবিধাসমূহ অক্ষম কৰে।"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ব্লুটুথ LE অডিঅ’ ম’ড"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ডিভাইচৰ সবিশেষত LE অডিঅ’ৰ ট’গল দেখুৱাওক"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ব্লুটুথ LE অডিঅ’ৰ অনুমতি দিয়া সূচী বাইপাছ কৰক"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE অডিঅ’ৰ পৰিধীয় ডিভাইচে অনুমতি দিয়া সূচীৰ যোগ্যতাৰ মাপকাঠী মানি চলিছে বুলি সত্যাপন নকৰিলেও ডিফ’ল্ট হিচাপে LE অডিঅ’ ব্যৱহাৰ কৰক।"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"আপোনাৰ নেটৱৰ্ক আৰু বেতাঁৰ ছিগনেল ব্যৱহাৰ কৰি স্বয়ংক্ৰিয়ভাৱে ছেট কৰক"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"স্বয়ংক্ৰিয় সময় মণ্ডল"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"আপোনাৰ নিকটৱৰ্তী ম’বাইল নেটৱৰ্ক অনুযায়ী স্বয়ংক্ৰিয়ভাৱে ছেট কৰক"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"উপলব্ধ হ’লে আপোনাৰ ডিভাইচৰ অৱস্থান ব্যৱহাৰ কৰি স্বয়ংক্ৰিয়ভাৱে ছেট কৰক। সক্ৰিয় ৱাইফাই সংযোগৰ প্ৰয়োজন হ’ব পাৰে।"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"উপলব্ধ হ’লে আপোনাৰ ডিভাইচৰ অৱস্থান ব্যৱহাৰ কৰি স্বয়ংক্ৰিয়ভাৱে ছেট কৰক"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"স্থানীয় ডিফ’ল্ট ব্যৱহাৰ কৰক"</string>
<string name="date_time_24hour" msgid="286679379105653406">"২৪ ঘণ্টীয়া সজ্জা ব্যৱহাৰ কৰক"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"সময়"</string>
@@ -563,7 +567,7 @@
<string name="private_space_title" msgid="1752064212078238723">"প্ৰাইভেট স্পে\'চ"</string>
<string name="private_space_summary" msgid="2274405892301976238">"ব্যক্তিগত এপ্ লক কৰি লুকুৱাই ৰাখক"</string>
<string name="private_space_description" msgid="4059594203775816136">"ব্যক্তিগত এপ্সমূহ আপুনি লুকুৱাই ৰাখিব বা লক কৰিব পৰা এটা পৃথক স্পে’চত ৰাখক"</string>
- <string name="private_space_lock_title" msgid="7230836881433350526">"ব্যক্তিগত স্পে’চৰ লক"</string>
+ <string name="private_space_lock_title" msgid="7230836881433350526">"প্ৰাইভেট স্পে’চৰ লক"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"আপুনি আপোনাৰ ডিভাইচটো আনলক কৰিবলৈ ব্যৱহাৰ কৰা একেটা পদ্ধতি ব্যৱহাৰ কৰি আপোনাৰ প্ৰাইভেট স্পে\'চ আনলক কৰিব পাৰে অথবা অন্য কোনো লক বাছনি কৰিব পাৰে"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"ডিভাইচৰ স্ক্ৰীন লক ব্যৱহাৰ কৰক"</string>
<string name="private_space_biometric_title" msgid="3934339826674553174">"মুখাৱয়ব আৰু ফিংগাৰপ্ৰিণ্টৰ দ্বাৰা আনলক কৰা"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"কীব’ৰ্ডে একেটা কী ক্ষিপ্ৰতাৰে বাবে বাৰে টিপাটো আওকাণ কৰে"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"বাউন্স কীৰ সীমা"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"সেই সময় অৱধি বাছনি কৰক যেতিয়া আপোনাৰ কীব’ৰ্ডে বাৰে বাৰে কী টিপাটো আওকাণ কৰে"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"০.২ ছেকেণ্ড"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"০.৪ ছেকেণ্ড"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"০.৬ ছেকেণ্ড"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"০.২ ছেকেণ্ড"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"০.৪ ছেকেণ্ড"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"০.৬ ছেকেণ্ড"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"কাষ্টম"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"কাষ্টম মান"</string>
<string name="slow_keys" msgid="2891452895499690837">"ধীৰ গতিৰ কী"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"সক্ৰিয় কৰিবলৈ এটা কী টিপাৰ বাবে লগা সময় মিলায়"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ষ্টিকী কী"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"একেলগে কীসমূহ টিপি ধৰি থকাৰ সলনি শ্বৰ্টকাটৰ বাবে এবাৰত এটা কী টিপক"</string>
<string name="mouse_keys" msgid="6237254627808525540">"মাউছ কীসমূহ"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"পইণ্টাৰ নিয়ন্ত্ৰণ কৰিবলৈ আপোনাৰ কীব’ৰ্ড ব্যৱহাৰ কৰক"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"মাউছ ওলোটাকৈ স্ক্ৰ’ল কৰাৰ সুবিধা"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"পৃষ্ঠাটো তললৈ নিবলৈ ওপৰলৈ স্ক্ৰ’ল কৰক"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"বাওঁ আৰু সোঁফালৰ বুটাম সলনা-সলনি কৰক"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"মাউছৰ বাওঁফালৰ বুটামটো আপোনাৰ সোঁফালৰ হিচাপে ব্যৱহাৰ কৰক"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"কীব’ৰ্ডৰ শ্বৰ্টকাটসমূহ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"শ্বৰ্টকাটৰ সূচী দেখুৱাওক"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"কৰ্মস্থানৰ প্ৰ’ফাইল আৰু সঁজুলি"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>ৰ বাবে এটা নতুন চাবি বাছনি কৰক:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"কায়িক কীব’ৰ্ডৰ সাধ্য সুবিধা"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ষ্টিকী কী, বাউন্স কী, মাউছ কী"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"কী পুনৰাবৃত্তি কৰক"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"পুনৰাবৃত্তিৰ পূৰ্বে হোৱা বিলম্ব"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"পুনৰাবৃত্তিৰ হাৰ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"কীটো এৰি নিদিয়ালৈকে কোনো কীৰ বৰ্ণটো পুনৰাবৃত্তি কৰিবলৈ সেই কীটো টিপি ধৰক"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> লে’আউট"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ডিফ\'ল্ট"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"স্বয়ংক্ৰিয়: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"পূৰ্বদৰ্শন"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"মান্য বিকল্পসমূহ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ভাষা"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"কেপশ্বনৰ আকাৰ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"কেপশ্বন শৈলী"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"কাষ্টম বিকল্পসমূহ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"বেকগ্ৰাউণ্ডৰ ৰং"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"পাৱাৰৰ ব্যৱহাৰ খাপ খুৱাওক"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"পেকেজসমূহ অন্তৰ্ভুক্ত আছে"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"এপ্সমূহ স্বাভাৱিকভাৱে চলি আছে"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"বেটাৰী কমিছে"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"বেটাৰীৰ জীৱনকাল বৃদ্ধি কৰিবলৈ বেটাৰী সঞ্চয়কাৰী অন কৰক"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"বেটাৰীৰ জীৱনকাল উন্নত কৰক"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"এই ভিপিএনটোৰ সৈতে সংযোগ বিচ্ছিন্ন কৰিবনে?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"সংযোগ বিচ্ছিন্ন কৰক"</string>
<string name="vpn_version" msgid="6344167191984400976">"সংস্কৰণ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"সংস্কৰণ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"ভিপিএন পাহৰক"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"পূৰ্বৰ ভিপিএনটো সলনি কৰেনে?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ভিপিএনক যিকোনো সময়ত অন থকা অবস্থাত ছেট কৰিবনে?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"কৰ্মদিনত পুৱা ৯ বজা - সন্ধিয়া ৫ বজা\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"কেলেণ্ডাৰৰ অনুষ্ঠান"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} সক্ৰিয় আছে}=2{{mode_1} আৰু {mode_2} সক্ৰিয় আছে}=3{{mode_1}, {mode_2}, আৰু {mode_3} সক্ৰিয় আছে}one{{mode_1}, {mode_2}, আৰু # টা সক্ৰিয় আছে}other{{mode_1}, {mode_2}, আৰু # টা সক্ৰিয় আছে}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{১ টা ম’ড স্বয়ংক্ৰিয়ভাৱে অন হ’ব পাৰে}one{# টা ম’ড স্বয়ংক্ৰিয়ভাৱে অন হ’ব পাৰে}other{# টা ম’ড স্বয়ংক্ৰিয়ভাৱে অন হ’ব পাৰে}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"অন আছে"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"ছেট কৰা হোৱা নাই"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"অক্ষম কৰা আছে"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"ডিভাইচ মাত্ৰ"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"নতুন সম্পৰ্কসমূহ একাউণ্টৰ সৈতে ছিংক কৰা নহ’ব"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"সম্পৰ্কসমূহ আপোনাৰ ডিভাইচত ছেভ কৰা হ’ব আৰু ডিফ’ল্টভাৱে আপোনাৰ একাউণ্টত ছিংক কৰা হ’ব"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"কোনো ডিফ\'ল্ট ছেট কৰা হোৱা নাই"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ডিফ’ল্ট একাউণ্ট ছেট কৰোঁতে আসোঁৱাহ হৈছে"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"কোনো ডিফ’ল্ট ছেট কৰা হোৱা নাই"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"ডিভাইচ মাত্ৰ"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"আৰম্ভ কৰিবলৈ এটা একাউণ্ট যোগ দিয়ক"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"সন্ধান কৰিবৰ বাবে বৃত্ত"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"আপোনাৰ স্ক্ৰীনত থকা সমলটো ব্যৱহাৰ কৰি সন্ধান কৰিবলৈ গৃহ বুটামটো বা নেভিগেশ্বন হেণ্ডেল স্পৰ্শ কৰি ধৰি ৰাখক।"</string>
</resources>
diff --git a/res/values-az/arrays.xml b/res/values-az/arrays.xml
index e035d4e..6293141 100644
--- a/res/values-az/arrays.xml
+++ b/res/values-az/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Qar uçqunu"</item>
<item msgid="7952183800501346803">"Çimərlik çətiri"</item>
<item msgid="799139025758265891">"Emalatxana alətləri"</item>
- <item msgid="1330084588359129896">"Çadır"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Kinolent"</item>
<item msgid="5827426100157335512">"Kitab"</item>
<item msgid="8585828346253128384">"Lotus çiçəyi"</item>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index b2bc577..95d6224 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE audionu deaktiv edin"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Cihaz LE audio avadanlıq imkanlarını dəstəkləyirsə, Bluetooth LE audio funksiyasını deaktiv edir."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio rejimi"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE audio açarı görünsün: Cihaz detalları"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio üzrə icazə verilənlər siyahısına qoşulmayın"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio periferik cihazının icazə verilənlər siyahısı üzrə meyarlara cavab verdiyi doğrulanmasa da, defolt olaraq LE Audio istifadə edin."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Şəbəkə və simsiz siqnallarınızdan istifadə edərək avtomatik təyin edin"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Avtomatik saat qurşağı"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Yaxınlıqdakı mobil şəbəkələrə əsasən avtomatik təyin edin"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Mümkünsə, cihaz məkanı vasitəsilə avtomatik təyin edin. Aktiv Wi-Fi bağlantısı da tələb oluna bilər."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Mümkünsə, cihaz məkanı vasitəsilə avtomatik təyin edin"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Regional defolt ayarlar tətbiq olunsun"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 saat formatından istifadə et"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Vaxt"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Əlçatımlıq"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fiziki klaviatura"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Sıçrama düymələri"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Klaviatura eyni düymənin təkrarən basılmasını nəzərə almır"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Sıçrayan klaviş üzrə hədd"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Klaviaturanızın təkrarlanan düymə basılmalarını nəzərə almayacağı müddəti seçin"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Fərdi"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"fərdi qiymət"</string>
<string name="slow_keys" msgid="2891452895499690837">"Asta düymələr"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Düyməyə basmağın aktivləşdirilməsi üçün tələb olunan vaxtı tənzimləyir"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Əvəzedici düymələr"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Qısayollar üçün düymələri birlikdə basıb saxlamaq əvəzinə hər dəfə bir düyməyə basın"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Maus düymələri"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Poynteri idarə etmək üçün klaviaturadan istifadə edin"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Mausun geri sürüşdürülməsi"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Səhifəni aşağı hərəkət etdirmək üçün yuxarı sürüşdürün"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Sol və sağ düymələri dəyişin"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Mausun sol düyməsini sağ kimi istifadə edin"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Klaviatura qısayolları"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Qısayolların siyahısını göstərin"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> üçün yeni açar seçin:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Fiziki klaviatura əlçatanlığı"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Əvəzedici düymələr, sıçrama düymələri, maus düymələri"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Düymələri təkrarlayın"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Təkrardan əvvəlki gecikmə"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Təkrar sürəti"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Düymə buraxılana qədər simvolu təkrarlamaq üçün düyməni basıb saxlayın"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> düzəni"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Defolt"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Avtomatik: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Önizləmə"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standart seçimlər"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Dil"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Subtitr ölçüsü"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Subtitr üslubu"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Fərdi seçimlər"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Arxa plan rəngi"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Enerji istifadəsini idarə edin"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Daxil edilmiş paketlər"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Tətbiqlər normal işləyir"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Enerji qurtarır"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Enerjiyə qənaət etmək üçün qənaət rejimini aktivləşdirin"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Batareya ömrünü artırın"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Bu VPN bağlantısı kəsilsin?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Bağlantını kəsin"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versiya"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versiya <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN\'i unudun"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Mövcud VPN əvəz edilsin?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Hər zaman aktiv VPN quraşdırılsın?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"09:00 - 17:00 həftəiçi\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Təqvim tədbirləri"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} aktivdir}=2{{mode_1} və {mode_2} aktivdir}=3{{mode_1}, {mode_2} və {mode_3} aktivdir}other{{mode_1}, {mode_2} və daha # rejim aktivdir}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 rejim avtomatik işə düşə bilər}other{# rejim avtomatik işə düşə bilər}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AKTİV"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ayarlanmayıb"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Deaktiv"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Axtarış Ayarları"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontaktlar, yaddaş, hesab"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontakt yaddaşı"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Defolt ayarlanmayıb"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Yalnız cihaz"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Yeni kontaktlar hesab ilə sinxronlaşdırılmayacaq"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontaktlar cihazınızda saxlanılacaq və defolt olaraq hesabınız ilə sinxronlaşdırılacaq"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Defolt hesabı ayarlayarkən xəta baş verdi"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Defolt ayarlanmayıb"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Yalnız cihaz"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Başlamaq üçün hesab əlavə edin"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Dairəyə alaraq axtarın"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Ekrandakı kontentdən istifadə edərək axtarış etmək üçün Əsas ekran düyməsinə və ya naviqasiya tutacağına basıb saxlayın."</string>
</resources>
diff --git a/res/values-b+sr+Latn/arrays.xml b/res/values-b+sr+Latn/arrays.xml
index 9536100..0a97d19 100644
--- a/res/values-b+sr+Latn/arrays.xml
+++ b/res/values-b+sr+Latn/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Pahulja"</item>
<item msgid="7952183800501346803">"Suncobran"</item>
<item msgid="799139025758265891">"Alat iz radionice"</item>
- <item msgid="1330084588359129896">"Šator"</item>
+ <item msgid="8112685757657659269">"Klavir"</item>
<item msgid="3861584909935022342">"Rolna filma"</item>
<item msgid="5827426100157335512">"Knjiga"</item>
<item msgid="8585828346253128384">"Cvet lotosa"</item>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index a66625c..7af2eb6 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Onemogući Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Onemogućava funkciju Bluetooth LE audio ako uređaj podržava mogućnosti LE audio hardvera."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio režim"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE Audio prekidač u detaljima o uređaju"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Zaobiđi Bluetooth LE Audio listu dozvoljenih"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Podrazumevano koristi LE Audio čak i ako nije potvrđeno da LE Audio periferni uređaj zadovoljava kriterijume liste dozvoljenih."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Automatsko podešavanje pomoću mreže i bežičnih signala"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatska vremenska zona"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Automatsko podešavanje na osnovu mobilnih mreža u blizini"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Automatsko podešavanje pomoću lokacije uređaja, ako je dostupna. Možda je potrebna i aktivna WiFi veza."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Automatsko podešavanje pomoću lokacije uređaja, ako je dostupna"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Koristi podrazumevanu vrednost za lokalitet"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Koristi 24-časovni format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Vreme"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Tastatura zanemaruje brze pritiske istog tastera koji se ponavljaju"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Prag za duži odziv tastera"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Odaberite koliko dugo tastatura zanemaruje ponavljane pritiske tastera"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 sek"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 sek"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 sek"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 sek"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 sek"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 sek"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Prilagođeno"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"prilagođena vrednost"</string>
<string name="slow_keys" msgid="2891452895499690837">"Spori tasteri"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Prilagodite vreme za aktiviranje tastera posle pritiska"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Lepljivi tasteri"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Pritiskajte jedan po jedan taster da biste koristili prečice umesto da istovremeno držite tastere"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tasteri miša"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Kontrolišite pokazivač pomoću tastature"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Obrnuto skrolovanje mišem"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Skrolujte nagore da biste pomerili stranicu nadole"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Zamenite dugmad nalevo i nadesno"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Koristite levi taster miša kao desni"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Tasterske prečice"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Prikazuje listu prečica"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Tastature i alatke za poslovni profil"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Odaberite novi taster za <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Pristupačnost fizičke tastature"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Lepljivi tasteri, duži odziv tastera, tasteri miša"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Ponavljanje tastera"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Odlaganje pre ponavljanja"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Brzina ponavljanja"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pritisnite i zadržite taster da biste ponavljali unos znaka sve dok ne pustite taster"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Raspored <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Podrazumevano"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatski: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Pregled"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardne opcije"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Jezik"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Veličina titla"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stil titla"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Prilagođene opcije"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Boja pozadine"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Prilagođavanje korišćenja napajanja"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Sadržani paketi"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikacije rade uobičajeno"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nizak nivo napunjenosti baterije"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Uključite uštedu baterije da biste produžili trajanje baterije"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Produžite trajanje baterije"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Želite li da prekinete vezu sa ovim VPN-om?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini vezu"</string>
<string name="vpn_version" msgid="6344167191984400976">"Verzija"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Verzija <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Zaboravi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite li da zamenite postojeći VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Želite li da podesite uvek uključeni VPN?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"9:00–17:00 radnim danima"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Događaji u kalendaru"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Aktivan je {mode_1}}=2{Aktivni su {mode_1} i {mode_2}}=3{Aktivni su {mode_1}, {mode_2} i {mode_3}}one{Aktivni su {mode_1}, {mode_2} i još # režim}few{Aktivni su {mode_1}, {mode_2} i još # režima}other{Aktivni su {mode_1}, {mode_2} i još # režima}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 režim može da se uključuje automatski}one{# režim može da se uključuje automatski}few{# režima mogu da se uključuju automatski}other{# režima može da se uključuje automatski}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"UKLJUČENO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nije podešeno"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Onemogućeno"</string>
@@ -5458,6 +5489,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Samo uređaj"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Novi kontakti se neće sinhronizovati sa nalogom"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakti se podrazumevano čuvaju na uređaju i sinhronizuju sa nalogom"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nije podešen podrazumevani nalog"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Greška pri podešavanju podrazumevanog naloga"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nije podešen podrazumevani nalog"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Samo uređaj"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Dodajte nalog da biste započeli"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Pretraga zaokruživanjem"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Dodirnite i zadržite dugme Početak ili marker za kretanje da biste pretraživali pomoću sadržaja na ekranu."</string>
</resources>
diff --git a/res/values-be/arrays.xml b/res/values-be/arrays.xml
index ab14c2b..932a172 100644
--- a/res/values-be/arrays.xml
+++ b/res/values-be/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Сняжынка"</item>
<item msgid="7952183800501346803">"Пляжны парасон"</item>
<item msgid="799139025758265891">"Інструменты майстэрні"</item>
- <item msgid="1330084588359129896">"Палатка"</item>
+ <item msgid="8112685757657659269">"Піяніна"</item>
<item msgid="3861584909935022342">"Кінаплёнка"</item>
<item msgid="5827426100157335512">"Кніга"</item>
<item msgid="8585828346253128384">"Кветка лотаса"</item>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 4b6de65..946c419 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Адключыць Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Адключае функцыю Bluetooth LE audio, калі прылада падтрымлівае апаратнае забеспячэнне LE audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Рэжым Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Паказ пераключальніка LE audio у Звестках пра прыладу"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Абыходзіць белы спіс Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Выкарыстоўваць LE Audio стандартна, нават калі перыферыйная прылада LE Audio не адпавядае крытэрыям белага спіса."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Задаваць аўтаматычна, выкарыстоўваючы сігналы сеткі і бесправадныя сігналы прылады"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Аўтавызначэнне часавага пояса"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Задаваць аўтаматычна па даных бліжэйшых мабільных сетак"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Задаваць аўтаматычна па месцазнаходжанню прылады, калі яно вызначаецца. Можа спатрэбіцца актыўнае падключэнне да Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Задаваць аўтаматычна па месцазнаходжанні прылады, калі яно вызначаецца"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Выкарыстоўваць стандартныя рэгіянальныя налады"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Выкарыстоўваць 24-гадзінны фармат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Час"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Спецыяльныя магчымасці"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Фізічная клавіятура"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Ігнараванне паўторнага націскання"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Хуткія паўторныя націсканні адной і той жа клавішы ігнаруюцца"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Ігнараванне паўторнага націскання"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Выберыце час, на працягу якога паўторныя націсканні адной і той жа клавішы будуць ігнаравацца"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 с"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 с"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 с"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Карыстальніцкае значэнне"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"карыстальніцкае значэнне"</string>
<string name="slow_keys" msgid="2891452895499690837">"Запавольванне рэакцыі на націсканне"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Адрэгулюйце час, неабходны для актывацыі націскання клавішы"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Заліпанне клавіш"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Замест таго каб утрымліваць усе клавішы са спалучэння, націскайце іх па адной"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Кнопкі мышы"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Выкарыстоўвайце клавіятуру, каб кіраваць паказальнікам"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Адваротная прагортка мышшу"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Калі прагортваць уверх, старонка будзе перамяшчацца ўніз"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Замена месцамі функцый левай і правай кнопак"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Прызначце для левай кнопкі мышы функцыі правай"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Гарачыя клавішы"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Паказаць спіс спалучэнняў клавіш"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Выберыце новы ключ для \"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>\":"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Спецыяльныя магчымасці з выкарыстаннем фізічнай клавіятуры"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Заліпанне клавіш, ігнараванне паўторнага націскання, клавішы мышы"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Паўторны ўвод сімвала"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Затрымка перад паўторам"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Частата паўтораў"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Паўтараць увод сімвала, пакуль клавіша націснута"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Раскладка \"<xliff:g id="IME_LABEL">%s</xliff:g>\""</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Стандартная"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Аўтаматычна: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Перадпрагляд"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандартныя опцыі"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Мова"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Памер субцітраў"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Стыль субцітраў"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Карыстальніцкія параметры"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Колер фону"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Адрэгуляваць спажыванне энергіі"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Уключаныя пакеты"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Праграмы працуюць нармальна"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Нізкі ўзровень зараду акумулятара"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Уключыце Эканомію зараду, каб павялічыць час працы ад акумулятара"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Павялічце час працы ад акумулятара"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Адключыць гэту VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Адключыць"</string>
<string name="vpn_version" msgid="6344167191984400976">"Версія"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Версія <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Забыць VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Замяніць існуючую VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Наладзіць заўсёды ўключаную VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"з 9:00 да 17:00 па будных днях\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Падзеі ў календары"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Рэжым \"{mode_1}\" актыўны}=2{Рэжымы \"{mode_1}\" і \"{mode_2}\" актыўныя}=3{Рэжымы \"{mode_1}\", \"{mode_2}\" і \"{mode_3}\" актыўныя}one{Рэжымы \"{mode_1}\", \"{mode_2}\" і яшчэ # актыўныя}few{Рэжымы \"{mode_1}\", \"{mode_2}\" і яшчэ # актыўныя}many{Рэжымы \"{mode_1}\", \"{mode_2}\" і яшчэ # актыўныя}other{Рэжымы \"{mode_1}\", \"{mode_2}\" і яшчэ # актыўныя}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Можна аўтаматычна ўключыць 1 рэжым}one{Можна аўтаматычна ўключыць # рэжым}few{Можна аўтаматычна ўключыць # рэжымы}many{Можна аўтаматычна ўключыць # рэжымаў}other{Можна аўтаматычна ўключыць # рэжыму}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"УКЛЮЧАНА"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Не зададзена"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Адключана"</string>
@@ -5464,13 +5487,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Шукаць у наладах"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"кантакты, сховішча, уліковы запіс"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Сховішча кантактаў"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Стандарт не вызначаны"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Толькі прылада"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Новыя кантакты не будуць сінхранізавацца з уліковым запісам"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Кантакты будуць стандартна захоўвацца на прыладзе і сінхранізавацца з уліковым запісам"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Падчас вызначэння стандартнага ўліковага запісу адбылася памылка"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Стандартны ўліковы запіс не вызначаны"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Толькі прылада"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Каб пачаць, дадайце ўліковы запіс"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Абвесці для пошуку"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Каб запусціць пошук з выкарыстаннем змесціва экрана, націсніце і ўтрымлівайце кнопку галоўнага экрана або маркер навігацыі."</string>
</resources>
diff --git a/res/values-bg/arrays.xml b/res/values-bg/arrays.xml
index 631450e..b736ea3 100644
--- a/res/values-bg/arrays.xml
+++ b/res/values-bg/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Снежинка"</item>
<item msgid="7952183800501346803">"Плажен чадър"</item>
<item msgid="799139025758265891">"Инструменти за работилница"</item>
- <item msgid="1330084588359129896">"Палатка"</item>
+ <item msgid="8112685757657659269">"Пиано"</item>
<item msgid="3861584909935022342">"Филмов видеоколаж"</item>
<item msgid="5827426100157335512">"Книга"</item>
<item msgid="8585828346253128384">"Лотос"</item>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index d3ddd40..367e8a2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Деактивиране на Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Деактивира Bluetooth LE Audio, ако устройството поддържа хардуер с възможност за LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Режим за Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Показване на превключват. за LE Audio в подробн. за у-вото"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Заобикаляне на списъка на разрешените устройства с Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Използване на LE Audio по подразбиране дори ако не е потвърдено, че периферното устройство с LE Audio отговаря на критериите на списъка на разрешените устройства."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Автоматично задаване чрез мрежата и безжичните сигнали"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Автоматична часова зона"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Автоматично задаване въз основа на мобилните мрежи в близост до вас"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Авт. задаване чрез местоп. на у-вото ви, ако е налице. Може да се изисква и активна връзка с Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Автоматично задаване чрез местоположението на устройството ви, ако е налице"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Използване на стандартния формат за локала"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-часов формат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Час"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Достъпност"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Физическа клавиатура"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Игнориране на многократ. натискане"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Клавиатурата игнорира бързите повтарящи се натискания на един и същ клавиш"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Игнор. на многокр. натискане (праг)"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Изберете периода от време, през който клавиатурата ви ще игнорира повтарящите се натискания на даден клавиш"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 сек"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 сек"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 сек"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Персонализирано"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"персонализирана стойност"</string>
<string name="slow_keys" msgid="2891452895499690837">"Забавяне на сигнала от клавишите"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Коригира времето, необходимо за активиране след натискане на даден клавиш"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Фиксирани клавиши"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Натискайте клавишите от съответните комбинации един по един, вместо да ги задържате заедно"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Бутони на мишката"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Използвайте клавиатурата, за да управлявате курсора"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Обратно превъртане с мишката"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Превъртете нагоре, за да преместите страницата надолу"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Размяна на левия и десния бутон"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Използвайте левия бутон на мишката като десен"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Клавишни комбинации"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Показване на списък с клавишните комбинации"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Изберете нов ключ за <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Достъпност чрез физическата клавиатура"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Фиксирани клавиши, игнориране на многократни натискания, бутони на мишката"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Повтаряне на клавишите"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Забавяне преди повтаряне"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Честота на повторение"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Задържане на клавиш с цел повтаряне на съответния знак, докато клавишът не бъде пуснат"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Подредба: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"По подразбиране"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автоматично: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2236,7 +2254,7 @@
<string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"Докоснете бутона за достъпност <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> в долната част на екрана. За превключване между функциите докоснете и задръжте бутона за достъпност."</string>
<string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Плъзнете пръст нагоре от долната част на екрана. За превключване между функциите плъзнете пръст нагоре и задръжте.}other{Плъзнете # пръста нагоре от долната част на екрана. За превключване между функциите плъзнете # пръста нагоре и задръжте.}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_floating" msgid="4459254227203203324"><annotation id="link">"Още опции"</annotation></string>
- <string name="footer_learn_more_content_description" msgid="8843798273152131341">"Научете повече за <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
+ <string name="footer_learn_more_content_description" msgid="8843798273152131341">"Научете повече за: <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"Бързи настройки"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings" msgid="739883998754165940">"{count,plural, =1{Плъзнете пръст надолу от горната част на екрана}other{Плъзнете # пръста надолу от горната част на екрана}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw" msgid="4216628328191609785">"{count,plural, =1{Плъзнете пръст надолу от горната част на екрана. Този пряк път ще бъде налице, след като завършите настройването на устройството.}other{Плъзнете # пръста надолу от горната част на екрана. Този пряк път ще бъде налице, след като завършите настройването на устройството.}}"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Визуализация"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандартни опции"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Език"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Размер на надписите"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Стил на надписите"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Персонализирани опции"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Цвят на фона"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Настройване на захранването"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Включени пакети"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Приложенията работят нормално"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Нивото на батерията е ниско"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Включете режима за запазване на батерията, за да удължите живота ѝ"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Удължаване на живота на батерията"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Да се прекрати ли връзката с тази виртуална частна мрежа (VPN)?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Прекратяване на връзката"</string>
<string name="vpn_version" msgid="6344167191984400976">"Версия"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Версия <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Забравяне на вирт. частна мрежа (VPN)"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Да се замени ли съществуващата VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Да се зададе ли винаги включена виртуална частна мрежа (VPN)?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„9:00 – 17:00 ч. в делнични дни“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Събития в календара"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Режимът „{mode_1}“ е активен}=2{Режимите „{mode_1}“ и „{mode_2}“ са активни}=3{Режимите „{mode_1}“, „{mode_2}“ и „{mode_3}“ са активни}other{Режимите „{mode_1}“, „{mode_2}“ и още # са активни}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режим може да се включва автоматично}other{# режима могат да се включват автоматично}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ВКЛ."</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Не е зададено"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Деактивирано"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Търсене в настройките"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"контакти, хранилище, профил"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Хранилище на контакти"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Няма профил по подразбиране"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Само на устройството"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Новите контакти няма да се синхронизират с профил"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"По подразбиране контактите ще се запазват на устройството ви и ще се синхронизират с профила ви"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Грешка при задаването на стандартния профил"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Няма стандартен профил"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Само чрез устройството"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"За да започнете, добавете профил"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Търсене с ограждане"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Докоснете и задръжте бутона „Начало“ или манипулатора за навигация, за да потърсите съдържанието на екрана."</string>
</resources>
diff --git a/res/values-bn/arrays.xml b/res/values-bn/arrays.xml
index 5b14f56..d260c02 100644
--- a/res/values-bn/arrays.xml
+++ b/res/values-bn/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"বরফের কণা"</item>
<item msgid="7952183800501346803">"বিচ আমব্রেলা"</item>
<item msgid="799139025758265891">"ওয়ার্কশপ টুল"</item>
- <item msgid="1330084588359129896">"তাঁবু"</item>
+ <item msgid="8112685757657659269">"পিয়ানো"</item>
<item msgid="3861584909935022342">"ফিল্ম রিল"</item>
<item msgid="5827426100157335512">"বই"</item>
<item msgid="8585828346253128384">"পদ্ম ফুল"</item>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index 042aac7..ac2f40f 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ব্লুটুথ LE অডিও বন্ধ করুন"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ডিভাইসে LE অডিও হার্ডওয়্যার কাজ করলে, ব্লুটুথ LE অডিও ফিচার বন্ধ করে।"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ব্লুটুথ LE অডিও মোড"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ডিভাইসের বিবরণে LE অডিও টগল দেখুন"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ব্লুটুথ LE অডিও-এর সাদাতালিকা বাইপাস করুন"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE অডিও-এর সাদাতালিকার শর্ত পূর্ণ করতে LE অডিও-এর পেরিফেরাল যাাচাই করা না হলেও ডিফল্ট হিসেবে LE অডিও ব্যবহার করুন।"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"আপনার নেটওয়ার্ক ও ওয়্যারলেস সিগন্যাল ব্যবহার করে অটোমেটিক সেট করুন"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"অটোমেটিক টাইম জোন"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"আপনার কাছাকাছি মোবাইল নেটওয়ার্কের উপর নির্ভর করে অটোমেটিক সেট করুন"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"উপলভ্য থাকলে, আপনার ডিভাইসের লোকেশন ব্যবহার করে অটোমেটিক সেট করুন। চালু থাকা একটি ওয়াই-ফাই কানেকশনও প্রয়োজন হতে পারে।"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"উপলভ্য থাকলে, আপনার ডিভাইসের লোকেশন ব্যবহার করে অটোমেটিক সেট করুন"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"লোকেল ডিফল্ট ব্যবহার করুন"</string>
<string name="date_time_24hour" msgid="286679379105653406">"২৪ ঘন্টার ফর্ম্যাট ব্যবহার করুন"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"সময়"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"একই \'কী\' দ্রুত বারবার প্রেস করলে কীবোর্ড তা উপেক্ষা করে"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"বাউন্স কী থ্রেশহোল্ড"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"আপনার কীবোর্ড কতক্ষণ পর্যন্ত কোনও একটি \'কী\' বারবার প্রেস করার ঘটনাকে উপেক্ষা করে সেই সময়সীমা বেছে নিন"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"০.২ সেকেন্ড"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"০.৪ সেকেন্ড"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"০.৬ সেকেন্ড"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"০.২ সেকেন্ড"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"০.৪ সেকেন্ড"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"০.৬ সেকেন্ড"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"কাস্টম"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"কাস্টম ভ্যালু"</string>
<string name="slow_keys" msgid="2891452895499690837">"স্লো \'কী\'"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"কোনও কী প্রেস করলে সেটি অ্যাক্টিভেট হতে যে সময় লাগে তা অ্যাডজাস্ট করে নেয়"</string>
<string name="sticky_keys" msgid="7317317044898161747">"স্টিকি \'কী\'"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"শর্টকাটের জন্য কীগুলি একসাথে ধরে রাখার পরিবর্তে একবারে একটি কী প্রেস করুন"</string>
<string name="mouse_keys" msgid="6237254627808525540">"মাউস \'কী\'"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"পয়েন্টার নিয়ন্ত্রণ করতে আপনার কীবোর্ড ব্যবহার করুন"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"মাউস উল্টো দিকে স্ক্রল করা"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"পৃষ্ঠা নিচের দিকে নামাতে উপরের দিকে স্ক্রল করুন"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"বাঁদিক ও ডানদিকের বোতাম অদলবদল করুন"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"মাউসের বাঁদিকের বোতামটিকে ডানদিকের বোতাম হিসেবে ব্যবহার করুন"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"কীবোর্ড শর্টকাট"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"শর্টকাটের তালিকা দেখান"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"অফিসের প্রোফাইলের কীবোর্ড ও টুল"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>-এর জন্য নতুন \'কী\' বেছে নিন:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ফিজিক্যাল কীবোর্ডের অ্যাক্সেসিবিলিটি"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"স্টিকি কী, বাউন্স কী, মাউস কী"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"\'কী\' রিপিট করুন"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"রিপিট হওয়ার আগে বিলম্ব"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"রিপিটের হার"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"\'কী\' রিলিজ না হওয়া পর্যন্ত কোনও \'কী\'-এর অক্ষর রিপিট করতে সেই \'কী\' প্রেস করে ধরে থাকুন"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> লেআউট"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ডিফল্ট"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"অটোমেটিক: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"প্রিভিউ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"মানক বিকল্পগুলি"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ভাষা"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"ক্যাপশনের সাইজ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"ক্যাপশনের স্টাইল"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"কাস্টম বিকল্পগুলি"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"পশ্চাদপটের রঙ"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"বিদ্যুতের ব্যবহার সামঞ্জস্য করুন"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"অন্তর্ভুক্ত প্যাকেজগুলি"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"অ্যাপগুলি স্বাভাবিকভাবে কাজ করছে"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ব্যাটারির লেভেল কমে গেছে"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ব্যাটারির আয়ু বাড়াতে ব্যাটারি সেভার চালু করুন"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ব্যাটারির আয়ু বাড়ান"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"এই VPN থেকে ডিসকানেক্ট করবেন?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ডিসকানেক্ট করুন"</string>
<string name="vpn_version" msgid="6344167191984400976">"ভার্সন"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ভার্সন <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN সরিয়ে দিন"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"বিদ্যমান VPN প্রতিস্থাপন করতে চান?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"সর্বদা-চালু VPN সেট করতে চান?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"কাজের দিন ৯ AM - ৫ PM\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"ক্যালেন্ডার ইভেন্ট"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} চালু আছে}=2{{mode_1} ও {mode_2} চালু আছে}=3{{mode_1}, {mode_2} ও {mode_3} চালু আছে}one{{mode_1}, {mode_2} ও আরও #টি মোড চালু আছে}other{{mode_1}, {mode_2} ও আরও #টি মোড চালু আছে}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{১টি মোড অটোমেটিক চালু হতে পারে}one{#টি মোড অটোমেটিক চালু হতে পারে}other{#টি মোড অটোমেটিক চালু হতে পারে}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"চালু আছে"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"সেট করা নেই"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"বন্ধ করা হয়েছে"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"শুধুমাত্র ডিভাইস"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"অ্যাকাউন্টের সাথে নতুন পরিচিতি সিঙ্ক হবে না"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"সাধারণত, পরিচিতি আপনার ডিভাইসে সেভ হবে এবং আপনার অ্যাকাউন্টের সাথে সিঙ্ক হবে"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"কোনও ডিফল্ট অ্যাকাউন্ট সেট করা নেই"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ডিফল্ট অ্যাকাউন্ট সেট করার সময় কোনও সমস্যা হয়েছে"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"কোনও ডিফল্ট অ্যাকাউন্ট সেট করা নেই"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"শুধুমাত্র ডিভাইস"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"শুরু করতে একটি অ্যাকাউন্ট যোগ করুন"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"খোঁজার জন্য সার্কেল বানান"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"আপনার স্ক্রিনে কন্টেন্ট ব্যবহার করে সার্চ করতে হোম বোতাম বা নেভিগেশন হ্যান্ডেল টাচ করে ধরে রাখুন।"</string>
</resources>
diff --git a/res/values-bs/arrays.xml b/res/values-bs/arrays.xml
index 6b5a498..7fc43fb 100644
--- a/res/values-bs/arrays.xml
+++ b/res/values-bs/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Pahuljica"</item>
<item msgid="7952183800501346803">"Suncobran"</item>
<item msgid="799139025758265891">"Alati radionice"</item>
- <item msgid="1330084588359129896">"Šator"</item>
+ <item msgid="8112685757657659269">"Klavir"</item>
<item msgid="3861584909935022342">"Filmska traka"</item>
<item msgid="5827426100157335512">"Knjiga"</item>
<item msgid="8585828346253128384">"Cvijet lotosa"</item>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 4d34680..34ba0ed 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Onemogući Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Onemogućava funkciju Bluetooth LE Audio ako uređaj podržava mogućnosti hardvera za LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Način rada Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Prikaži prekidač za LE Audio u detaljima o uređaju"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Zaobiđi Listu dozvoljenih za Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Koristite LE Audio prema zadanim postavkama čak i ako nije potvrđeno da LE Audio periferni uređaj ispunjava kriterije Liste dozvoljenih."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Automatsko postavljanje putem mreže i bežičnih signala"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatska vremenska zona"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Automatsko postavljanje na osnovu mobilnih mreža u blizini"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Automatsko postavljanje putem lokacije uređaja, ako je dostupna. Može biti potrebna i WiFi veza."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Automatsko postavljanje putem lokacije uređaja, ako je dostupna"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Koristi zadani format jezika/zemlje"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Koristi 24-satni format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Vrijeme"</string>
@@ -1946,18 +1950,40 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Pristupačnost"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fizička tastatura"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Slučajni pritisci tipki"</string>
- <string name="bounce_keys_summary" msgid="7418024428905737729">"Tipkovnica zanemaruje brzo ponovljene pritiske iste tipke"</string>
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Tastatura zanemaruje brzo ponavljane pritiske iste tipke"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Prag zanemarivanja slučajnih pritisaka"</string>
- <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Odaberite koliko dugo će tipkovnica zanemarivati ponovljene pritiske tipki"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Odaberite vrijeme u kojem će tastatura zanemarivati ponovljene pritiske tipki"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Prilagođeno"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"prilagođena vrijednost"</string>
<string name="slow_keys" msgid="2891452895499690837">"Sporo reagiranje tipki"</string>
- <string name="slow_keys_summary" msgid="2914214326648535377">"Prilagođava vrijeme potrebno za aktivaciju pritiska tipke"</string>
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Podešava vrijeme potrebno za aktiviranje pritiskanja tipke"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Ljepljive tipke"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Za prečice pritišćite jednu po jednu tipku umjesto da ih istovremeno zadržavate"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tipke miša"</string>
- <string name="mouse_keys_summary" msgid="7030731235143286467">"Upravljajte pokazivačem pomoću tipkovnice"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Koristite tastaturu da upravljate pokazivačem"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Obrnuto klizanje mišem"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Kliznite nagore da pomjerite stranicu nadolje"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Zamijeni lijevo i desno dugme"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Koristite lijevo dugme miša kao desno dugme"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Prečice tastature"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Prikaz liste prečica"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Tastatura i alati radnog profila"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Odaberite novu tipku za \"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>\":"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Pristupačnost fizičke tastature"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Ljepljive tipke, tipke s dužim odzivom i tipke miša"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Ponavljaj tipke"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Odgodi prije ponavljanja"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Brzina ponavljanja"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Zadržite tipku da ponavljate njen znak dok ne pustite tipku"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Raspored: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Zadano"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatski: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Pregled"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardne opcije"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Jezik"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Veličina titlova"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stil titlova"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Prilagođene opcije"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Boja pozadine"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Podesite potrošnju energije"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Uključeni paketi"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikacije rade uobičajeno"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nivo napunjenosti baterije je nizak"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Uključite uštedu baterije da produžite vijek trajanja baterije"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Poboljšajte vijek trajanja baterije"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Želite li prekinuti vezu s ovim VPN-om?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini vezu"</string>
<string name="vpn_version" msgid="6344167191984400976">"Verzija"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Verzija <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Zaboravi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite li zamijeniti postojeći VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Želite li postaviti uvijek uključen VPN?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00–17:00 radnim danima\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Događaji u kalendaru"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Način rada {mode_1} je aktivan}=2{Načini rada {mode_1} i {mode_2} su aktivni}=3{Načini rada {mode_1}, {mode_2} i {mode_3} su aktivni}one{Načini rada {mode_1} i {mode_2} te još # način rada su aktivni}few{Načini rada {mode_1} i {mode_2} te još # načina rada su aktivni}other{Načini rada {mode_1} i {mode_2} te još # načina rada su aktivni}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 način rada se može automatski uključivati}one{# način rada se može automatski uključivati}few{# načina rada se mogu automatski uključivati}other{# načina rada se može automatski uključivati}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"UKLJUČENO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nije postavljeno"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Onemogućeno"</string>
@@ -3448,8 +3479,8 @@
<string name="mode_grayscale_title" msgid="6027553257331235461">"Nijanse sive"</string>
<string name="mode_grayscale_title_secondary_list" msgid="2662593380253642581">"nijanse sive"</string>
<string name="mode_grayscale_summary" msgid="6682099523626777038">"Promijenite ekran u crno-bijeli"</string>
- <string name="mode_aod_title" msgid="5903435070341237325">"Neka zaslon ostane taman"</string>
- <string name="mode_aod_title_secondary_list" msgid="8268180392811027557">"neka zaslon ostane taman"</string>
+ <string name="mode_aod_title" msgid="5903435070341237325">"Zadržavanje ekrana tamnim"</string>
+ <string name="mode_aod_title_secondary_list" msgid="8268180392811027557">"zadržavanje ekrana tamnim"</string>
<string name="mode_aod_summary" msgid="7516159044827627065">"Onemogućite uvijek uključen ekran"</string>
<string name="mode_wallpaper_title" msgid="5549693923133928374">"Zatamni pozadinsku sliku"</string>
<string name="mode_wallpaper_title_secondary_list" msgid="5034602021811580157">"zatamni pozadinsku sliku"</string>
@@ -3926,7 +3957,7 @@
<string name="zen_mode_confirm_enable_message" msgid="8707142927858064775">"Ovaj način rada će se možda automatski uključiti na osnovu postavki"</string>
<string name="zen_mode_action_enable" msgid="1161480633223176531">"Omogući"</string>
<string name="zen_mode_blurb_schedule_time" msgid="8223898702097484009">"Postavite način rada koji je u skladu s redovnim rasporedom"</string>
- <string name="zen_mode_blurb_schedule_calendar" msgid="382177907856065945">"Postavite način rada da sinhronizirate s događajima u kalendaru i odgovorima na pozive"</string>
+ <string name="zen_mode_blurb_schedule_calendar" msgid="382177907856065945">"Postavite način rada za sinhronizaciju s događajima u kalendaru i odgovorima na pozive"</string>
<string name="zen_mode_blurb_bedtime" msgid="6155075956151013457">"Dizajnirajte opuštajuću rutinu za spavanje. Postavite alarme, zatamnite ekran i blokirajte obavještenja."</string>
<string name="zen_mode_blurb_driving" msgid="1316054379000667305">"Dajte prioritet sigurnosti na putu radi fokusirane vožnje bez ometanja"</string>
<string name="zen_mode_blurb_immersive" msgid="5884004861848687869">"Blokirajte ometanja ili prekide s uređaja radi fokusiranja"</string>
@@ -5456,8 +5487,12 @@
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakti, pohrana, račun"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Pohrana za kontakte"</string>
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Samo uređaj"</string>
- <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Novi kontakti neće se sinkronizirati s računom"</string>
- <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakti će se spremiti na vaš uređaj i prema zadanim postavkama sinkronizirati s vašim računom"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Zadani račun nije postavljen"</string>
- <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Dodajte račun da biste započeli"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Novi kontakti se neće sinhronizirati s računom"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakti će se sačuvati na uređaj i sinhronizirati s računom prema zadanim postavkama"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Došlo je do greške prilikom postavljanja zadanog računa"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Zadani račun nije postavljen"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Samo uređaj"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Dodajte račun da započnete"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Pretraživanje zaokruživanjem"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Dodirnite i zadržite dugme za početnu stranicu ili ručicu za navigaciju da pretražujete pomoću sadržaja na ekranu."</string>
</resources>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
index 9bfaf64..a3c9cef 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Floc de neu"</item>
<item msgid="7952183800501346803">"Para-sol"</item>
<item msgid="799139025758265891">"Eines d\'un taller"</item>
- <item msgid="1330084588359129896">"Tenda de campanya"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Rodet de pel·lícula"</item>
<item msgid="5827426100157335512">"Llibre"</item>
<item msgid="8585828346253128384">"Flor de lotus"</item>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index c81d720..87aaff8 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Desactiva Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Desactiva la funció Bluetooth LE Audio si el dispositiu admet les funcions de maquinari d\'LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Mode Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Botó d\'LE Audio a Detalls del dispositiu"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omet la llista d\'accés permès de Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Utilitza LE Audio de manera predeterminada encara que no s\'hagi verificat si el perifèric d\'LE Audio compleix els criteris de la llista d\'accés permès"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Estableix automàticament amb la xarxa i els senyals sense fil"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Zona horària automàtica"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Estableix automàticament segons les xarxes mòbils properes"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Estableix auto. amb ubicació dispositiu, si disponible. Pot ser que també calgui una connexió Wi‑Fi activa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Estableix automàticament amb la ubicació del dispositiu, si està disponible."</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utilitza la configuració regional predeterminada"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Format de 24 hores"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Hora"</string>
@@ -585,7 +589,7 @@
<string name="private_space_face_settings_footer" msgid="7722256209563543711">"Utilitza la cara per desbloquejar l\'espai privat.\n\nTingues en compte el següent:\nNomés pots tenir configurada una cara. Per afegir-ne una altra, suprimeix l\'actual.\n\nSi mires el telèfon, es pot desbloquejar sense voler.\n\nUna altra persona pot desbloquejar l\'espai privat si et posa el dispositiu davant de la cara.\n\nAlgú que s\'assembli molt a tu, com ara un bessó idèntic, pot desbloquejar l\'espai privat."</string>
<string name="private_space_face_settings_require_confirmation_details" msgid="5406498664903812249">"En utilitzar Desbloqueig facial, sol·licita sempre una confirmació"</string>
<string name="private_space_category_ways_to_unlock" msgid="4356631225316950046">"Formes de desbloqueig"</string>
- <string name="private_space_screen_lock_summary" msgid="394837965365561070">"El mateix bloqueig de pantalla que el del dispositiu"</string>
+ <string name="private_space_screen_lock_summary" msgid="394837965365561070">"El mateix que el bloqueig de pantalla del dispositiu"</string>
<string name="private_space_new_lock_title" msgid="9056139964133004094">"Vols triar un bloqueig nou per a l\'espai privat?"</string>
<string name="private_space_new_lock_message" msgid="3117703578905489206">"Hauràs d\'introduir el PIN, el patró o la contrasenya del dispositiu a la pantalla següent"</string>
<string name="private_space_auto_lock_title" msgid="8663409382910601261">"Bloqueja l\'espai privat automàticament"</string>
@@ -625,12 +629,12 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Amaga o bloqueja les aplicacions privades en un espai separat. Utilitza un Compte de Google dedicat per a més seguretat."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Com funciona"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crea un Compte de Google per a l\'espai"</b>\n"Si utilitzes un compte dedicat, t\'ajudarà a evitar que els fitxers, les fotos i els correus electrònics sincronitzats es mostrin fora de l\'espai"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Defineix un bloqueig"</b>\n"Bloqueja l\'espai per evitar que altres persones l\'obrin."</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Defineix un bloqueig"</b>\n"Bloqueja l\'espai per evitar que altres persones l\'obrin"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instal·la aplicacions"</b>\n"Instal·la aplicacions que vulguis mantenir privades a l\'espai"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Nota important"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Les aplicacions s\'aturen quan bloqueges l\'espai"</b>\n"Quan bloquegis l\'espai, les aplicacions de l\'espai s\'aturaran i no en rebràs notificacions"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Els espais privats no són adequats per a les aplicacions que necessiten executar-se en segon pla o enviar notificacions crítiques, com ara aplicacions de medicina. Això és perquè les notificacions i l\'activitat en segon pla s\'aturen quan l\'espai es bloqueja.\n\nLes aplicacions del teu espai privat no apareixeran al gestor de permisos, al tauler de privadesa ni en altres opcions de configuració quan l\'espai privat estigui bloquejat.\n\nL\'espai privat no es pot moure a un dispositiu nou. Caldrà que configuris un altre espai privat si el vols utilitzar en un altre dispositiu.\n\nQualsevol persona que connecti el teu dispositiu a un ordinador o instal·li aplicacions perjudicials al teu dispositiu podria accedir a l\'espai privat."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Els espais privats no són adequats per a les aplicacions que necessiten executar-se en segon pla o enviar notificacions crítiques, com ara aplicacions de medicina. Això és perquè les notificacions i l\'activitat en segon pla s\'aturen quan l\'espai es bloqueja.\n\nLes aplicacions del teu espai privat no apareixeran al gestor de permisos, al tauler de privadesa ni en altres opcions de configuració quan l\'espai privat estigui bloquejat.\n\nL\'espai privat no es pot restaurar en un dispositiu nou. Hauràs de configurar un altre espai si vols utilitzar-lo en un dispositiu diferent.\n\nÉs possible que qualsevol persona que connecti el teu dispositiu a un ordinador o que instal·li aplicacions malicioses al dispositiu pugui accedir a l\'espai privat."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Els espais privats no són adequats per a les aplicacions que necessiten executar-se en segon pla o enviar notificacions crítiques, com ara aplicacions mèdiques. Això és perquè les notificacions i l\'activitat en segon pla s\'aturen quan l\'espai es bloqueja.\n\nLes aplicacions del teu espai privat no apareixeran al gestor de permisos, al tauler de privadesa ni en altres opcions de configuració quan l\'espai privat estigui bloquejat.\n\nL\'espai privat no es pot moure a un dispositiu nou. Caldrà que configuris un altre espai privat si el vols utilitzar en un dispositiu diferent.\n\nQualsevol persona que connecti el teu dispositiu a un ordinador o instal·li aplicacions perjudicials al teu dispositiu podria accedir a l\'espai privat."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Els espais privats no són adequats per a les aplicacions que necessiten executar-se en segon pla o enviar notificacions crítiques, com ara aplicacions mèdiques. Això és perquè les notificacions i l\'activitat en segon pla s\'aturen quan l\'espai es bloqueja.\n\nLes aplicacions del teu espai privat no apareixeran al gestor de permisos, al tauler de privadesa ni en altres opcions de configuració quan l\'espai privat estigui bloquejat.\n\nL\'espai privat no es pot restaurar en un dispositiu nou. Caldrà que configuris un altre espai si vols utilitzar-lo en un dispositiu diferent.\n\nQualsevol persona que connecti el teu dispositiu a un ordinador o instal·li aplicacions malicioses al dispositiu podria accedir a l\'espai privat."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Més informació sobre l\'espai privat"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Aquesta acció tardarà una estona"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"S\'està configurant l\'espai privat…"</string>
@@ -1127,7 +1131,7 @@
<string name="wifi_p2p_peer_devices" msgid="5158559154640283546">"Altres dispositius"</string>
<string name="wifi_p2p_remembered_groups" msgid="5497007770930525695">"Grups recordats"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6767831720507440027">"No s\'ha pogut connectar."</string>
- <string name="wifi_p2p_failed_rename_message" msgid="1317434386267376606">"S\'ha produït un error en canviar el nom del dispositiu."</string>
+ <string name="wifi_p2p_failed_rename_message" msgid="1317434386267376606">"Hi ha hagut un error en canviar el nom del dispositiu."</string>
<string name="wifi_p2p_disconnect_title" msgid="96361896458072463">"Vols desconnectar?"</string>
<string name="wifi_p2p_disconnect_message" msgid="1208761239498807208">"Si et desconnectes, finalitzarà la teva connexió amb <xliff:g id="PEER_NAME">%1$s</xliff:g>."</string>
<string name="wifi_p2p_disconnect_multiple_message" msgid="4490648217799144078">"Si et desconnectes, finalitzarà la teva connexió amb <xliff:g id="PEER_NAME">%1$s</xliff:g> i amb <xliff:g id="PEER_COUNT">%2$s</xliff:g> dispositius més."</string>
@@ -1659,9 +1663,9 @@
<string name="wallpaper_attributions" msgid="4323659759250650736">"Crèdits de fons de pantalla"</string>
<string name="wallpaper_attributions_values" msgid="987277439026021925">"Proveïdors d\'imatges de satèl·lit:\n©2014 CNES/Astrium, DigitalGlobe, Bluesky"</string>
<string name="settings_manual_activity_title" msgid="1682978148920788484">"Manual"</string>
- <string name="settings_manual_activity_unavailable" msgid="2514549851682321576">"S\'ha produït un problema en carregar el manual."</string>
+ <string name="settings_manual_activity_unavailable" msgid="2514549851682321576">"Hi ha hagut un problema en carregar el manual."</string>
<string name="settings_license_activity_title" msgid="7832071619364734914">"Llicències de tercers"</string>
- <string name="settings_license_activity_unavailable" msgid="9014803774391134570">"S\'ha produït un problema en llegir les llicències."</string>
+ <string name="settings_license_activity_unavailable" msgid="9014803774391134570">"Hi ha hagut un problema en llegir les llicències."</string>
<string name="settings_license_activity_loading" msgid="1653151990366578827">"S\'està carregant…"</string>
<string name="settings_safetylegal_activity_loading" msgid="1757860124583063395">"S\'està carregant…"</string>
<string name="lockpassword_choose_your_password_header" msgid="2407205113298094824">"Defineix una contrasenya"</string>
@@ -1769,7 +1773,7 @@
<string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="8844682343443755895">"El bloqueig del perfil de treball no compleix els requisits de seguretat de la teva organització. Pots fer servir el mateix bloqueig per a la pantalla del dispositiu i per al perfil de treball, però s\'aplicaran les polítiques de bloqueig professionals que hi pugui haver."</string>
<string name="lock_settings_profile_unification_dialog_confirm" msgid="6276915393736137843">"Utilitza un sol bloqueig"</string>
<string name="lock_settings_profile_unification_dialog_uncompliant_confirm" msgid="8509287115116369677">"Utilitza un sol bloqueig"</string>
- <string name="lock_settings_profile_unified_summary" msgid="777095092175037385">"El mateix bloqueig de pantalla que el del dispositiu"</string>
+ <string name="lock_settings_profile_unified_summary" msgid="777095092175037385">"El mateix que el bloqueig de pantalla del dispositiu"</string>
<string name="manageapplications_settings_title" msgid="9198876415524237657">"Gestiona les aplicacions"</string>
<string name="applications_settings" msgid="1941993743933425622">"Informació de les aplicacions"</string>
<string name="applications_settings_header" msgid="3154670675856048015">"Configuració de l\'aplicació"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibilitat"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Teclat físic"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Tecles de rebot"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"El teclat ignora les pulsacions repetides ràpidament de la mateixa tecla"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Llindar de la tecla de rebot"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Tria el temps que vols que el teclat ignori les pulsacions repetides de tecles"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalitzat"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalitzat"</string>
<string name="slow_keys" msgid="2891452895499690837">"Tecles lentes"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Ajusta el temps que tarda la pulsació d\'una tecla en activar-se"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Tecles permanents"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Prem una tecla cada vegada per a les dreceres en lloc de mantenir premudes les tecles alhora"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tecles del ratolí"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Utilitza el teclat per controlar el punter"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Desplaçament invers del ratolí"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Desplaça\'t cap amunt per moure la pàgina cap avall"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Canvia els botons dret i esquerre"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Utilitza el botó esquerre del ratolí com si fos el dret"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Tecles de drecera"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostra la llista de dreceres"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Tria una tecla nova per a <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accessibilitat del teclat físic"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Tecles permanents, tecles de rebot, tecles del ratolí"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repeteix les tecles"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Retard abans de la repetició"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Freqüència de repetició"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Mantén premuda una tecla per repetir-ne el caràcter fins que la deixis anar"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Disseny de <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predeterminat"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automàtic: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2209,7 +2227,7 @@
<string name="accessibility_tutorial_dialog_title_quick_setting" msgid="2905083277641794558">"Drecera de la configuració ràpida"</string>
<string name="accessibility_tutorial_dialog_title_gesture" msgid="4541649734549409614">"Drecera del gest d\'accessibilitat"</string>
<string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Utilitza el gest d\'accessibilitat"</string>
- <string name="accessibility_tutorial_dialog_message_button" msgid="8977286776192770246">"Per utilitzar aquesta funció, toca el botó d\'accessibilitat <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> a la part inferior de la pantalla.\n\nPer canviar entre funcions, mantén premut el botó d\'accessibilitat."</string>
+ <string name="accessibility_tutorial_dialog_message_button" msgid="8977286776192770246">"Per utilitzar aquesta funció, toca el botó d\'accessibilitat <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> a la part inferior de la pantalla.\n\nPer canviar d\'una funció a una altra, mantén premut el botó d\'accessibilitat."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="6631371483819355514">"Per utilitzar aquesta funció, toca el botó d\'accessibilitat de la pantalla"</string>
<string name="accessibility_tutorial_dialog_message_volume" msgid="3785791536286606664">"Per utilitzar aquesta funció, mantén premudes les dues tecles de volum"</string>
<string name="accessibility_tutorial_dialog_message_triple" msgid="5219991116201165146">"Per iniciar o aturar l\'ampliació, fes triple toc en qualsevol punt de la pantalla."</string>
@@ -2217,11 +2235,11 @@
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction" msgid="1007756360115974649">"Per iniciar o aturar l\'ampliació, toca ràpidament la pantalla dues vegades amb %1$d dits"</string>
<string name="accessibility_tutorial_dialog_message_quick_setting" msgid="3715446725334547432">"{count,plural, =1{Per utilitzar aquesta funció, llisca cap avall des de la part superior de la pantalla. A continuació, cerca la icona de {featureName}.}other{Per utilitzar aquesta funció, llisca cap avall amb # dits des de la part superior de la pantalla. A continuació, cerca la icona de {featureName}.}}"</string>
<string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw" msgid="3847728530771929959">"Aquesta drecera estarà disponible quan acabis de configurar el dispositiu."</string>
- <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Per utilitzar aquesta funció, llisca cap amunt amb 2 dits des de la part inferior de la pantalla.\n\nPer canviar entre funcions, llisca cap amunt amb 2 dits i mantén premut."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Per utilitzar aquesta funció, llisca cap amunt amb 2 dits des de la part inferior de la pantalla.\n\nPer canviar d\'una funció a una altra, llisca cap amunt amb 2 dits i mantén premut."</string>
<string name="accessibility_tutorial_dialog_gesture_shortcut_instruction" msgid="7349950768250852308">"{count,plural, =1{Per utilitzar aquesta funció, llisca cap amunt des de la part inferior de la pantalla}other{Per utilitzar aquesta funció, llisca cap amunt amb # dits des de la part inferior de la pantalla}}"</string>
- <string name="accessibility_tutorial_dialog_message_gesture_talkback" msgid="8142847782708562793">"Per utilitzar aquesta funció, llisca cap amunt amb 3 dits des de la part inferior de la pantalla.\n\nPer canviar entre funcions, llisca cap amunt amb 3 dits i mantén premut."</string>
- <string name="accessibility_tutorial_dialog_message_gesture_settings" msgid="40769674586981429">"Per utilitzar una funció d\'accessibilitat, llisca cap amunt amb 2 dits des de la part inferior de la pantalla.\n\nPer canviar entre funcions, llisca cap amunt amb 2 dits i mantén premut."</string>
- <string name="accessibility_tutorial_dialog_message_gesture_settings_talkback" msgid="7292969929578621958">"Per utilitzar una funció d\'accessibilitat, llisca cap amunt amb 3 dits des de la part inferior de la pantalla.\n\nPer canviar entre funcions, llisca cap amunt amb 3 dits i mantén premut."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture_talkback" msgid="8142847782708562793">"Per utilitzar aquesta funció, llisca cap amunt amb 3 dits des de la part inferior de la pantalla.\n\nPer canviar d\'una funció a una altra, llisca cap amunt amb 3 dits i mantén premut."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture_settings" msgid="40769674586981429">"Per utilitzar una funció d\'accessibilitat, llisca cap amunt amb 2 dits des de la part inferior de la pantalla.\n\nPer canviar d\'una funció a una altra, llisca cap amunt amb 2 dits i mantén premut."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture_settings_talkback" msgid="7292969929578621958">"Per utilitzar una funció d\'accessibilitat, llisca cap amunt amb 3 dits des de la part inferior de la pantalla.\n\nPer canviar d\'una funció a una altra, llisca cap amunt amb 3 dits i mantén premut."</string>
<string name="accessibility_tutorial_dialog_button" msgid="2031773187678948436">"Entesos"</string>
<string name="accessibility_tutorial_dialog_link_button" msgid="13364319079385020">"Personalitza el botó"</string>
<string name="accessibility_tutorial_dialog_configure_software_shortcut_type" msgid="8041105223988170653">"Més opcions"</string>
@@ -2233,8 +2251,8 @@
<string name="accessibility_shortcut_edit_dialog_title_software" msgid="6505512764022389951">"Botó d\'accessibilitat"</string>
<string name="accessibility_shortcut_edit_dialog_summary_floating_button" msgid="6266489864614886247">"Toca el botó flotant"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_by_gesture" msgid="4775049370625630546">"Gest d\'accessibilitat"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"Toca el botó d\'accessibilitat <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> a la part inferior de la pantalla. Per canviar entre funcions, mantén premut el botó d\'accessibilitat."</string>
- <string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Llisca cap amunt des de la part inferior de la pantalla. Per canviar entre funcions, llisca cap amunt i mantén premut.}other{Llisca cap amunt amb # dits des de la part inferior de la pantalla. Per canviar entre funcions, llisca cap amunt amb # dits i mantén premut.}}"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"Toca el botó d\'accessibilitat <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> a la part inferior de la pantalla. Per canviar d\'una funció a una altra, mantén premut el botó d\'accessibilitat."</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Llisca cap amunt des de la part inferior de la pantalla. Per canviar d\'una funció a una altra, llisca cap amunt i mantén premut.}other{Llisca cap amunt amb # dits des de la part inferior de la pantalla. Per canviar d\'una funció a una altra, llisca cap amunt amb # dits i mantén premut.}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_floating" msgid="4459254227203203324"><annotation id="link">"Més opcions"</annotation></string>
<string name="footer_learn_more_content_description" msgid="8843798273152131341">"Més informació sobre <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"Configuració ràpida"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Previsualització"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opcions estàndard"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Mida dels subtítols"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estil dels subtítols"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opcions personalitzades"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Color de fons"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Redueix el consum de la bateria"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Paquets inclosos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Les aplicacions funcionen correctament"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nivell de bateria baix"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Activa Estalvi de bateria per allargar la durada de la bateria"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Millora la durada de la bateria"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vols desconnectar aquesta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconnecta"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versió"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versió <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Oblida la VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vols substituir la VPN actual?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vols definir la VPN sempre activa?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"De 9:00 a 17:00 entre setmana\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Esdeveniments del calendari"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} està actiu}=2{{mode_1} i {mode_2} estan actius}=3{{mode_1}, {mode_2} i {mode_3} estan actius}other{{mode_1}, {mode_2} i # més estan actius}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode es pot activar automàticament}other{# modes es poden activar automàticament}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVAT"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"No definit"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Desactivat"</string>
@@ -3997,7 +4020,7 @@
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"Enllaços admesos"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"Altres preferències predeterminades"</string>
<string name="app_launch_add_link" msgid="8622558044530305811">"Afegeix un enllaç"</string>
- <string name="app_launch_footer" msgid="4521865035105622557">"Una aplicació pot verificar els enllaços per obrir-los automàticament."</string>
+ <string name="app_launch_footer" msgid="4521865035105622557">"Una aplicació pot verificar els enllaços perquè s\'obrin automàticament a l\'aplicació."</string>
<string name="app_launch_verified_links_title" msgid="621908751569155356">"{count,plural, =1{# enllaç verificat}other{# enllaços verificats}}"</string>
<string name="app_launch_verified_links_message" msgid="190871133877476176">"{count,plural, =1{Aquest enllaç està verificat i s\'obre automàticament en aquesta aplicació.}other{Aquests enllaços estan verificats i s\'obren automàticament en aquesta aplicació.}}"</string>
<string name="app_launch_dialog_ok" msgid="1446157681861409861">"D\'acord"</string>
@@ -5340,7 +5363,7 @@
<string name="about_phone_device_name_warning" msgid="3243226572404472381">"El nom del dispositiu és visible per a les aplicacions que has instal·lat. També el poden veure altres persones si el connectes a un dispositiu Bluetooth o a una xarxa Wi‑Fi, o si configures un punt d\'accés Wi‑Fi."</string>
<string name="grammatical_gender_title" msgid="8584242850477270828">"Gènere gramatical"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"Selecciona el gènere gramatical"</string>
- <string name="content_protection_preference_title" msgid="5069260032659193074">"S\'estan cercant aplicacions enganyoses"</string>
+ <string name="content_protection_preference_title" msgid="5069260032659193074">"Cerca d\'aplicacions enganyoses"</string>
<string name="content_protection_preference_summary" msgid="2252393849408445391">"Comprova l\'activitat de les aplicacions per detectar pesca de credencials"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"Cerca aplicacions enganyoses"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"Cerca aplicacions de treball enganyoses"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Configuració de la cerca"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contactes, emmagatzematge, compte"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Emmagatzematge de contactes"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Cap compte predeterminat definit"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Només dispositiu"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Els contactes nous no se sincronitzaran amb un compte"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Els contactes es desaran al dispositiu i se sincronitzaran amb el teu compte de manera predeterminada"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Hi ha hagut un error en definir el compte predeterminat"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Cap compte predeterminat definit"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Només dispositiu"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Afegeix un compte per començar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Encercla per cercar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Mantén premut el botó d\'inici o l\'ansa de navegació per cercar utilitzant el contingut de la pantalla."</string>
</resources>
diff --git a/res/values-cs/arrays.xml b/res/values-cs/arrays.xml
index 5bfe008..84386e3 100644
--- a/res/values-cs/arrays.xml
+++ b/res/values-cs/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Sněhová vločka"</item>
<item msgid="7952183800501346803">"Plážový slunečník"</item>
<item msgid="799139025758265891">"Dílenské nástroje"</item>
- <item msgid="1330084588359129896">"Stan"</item>
+ <item msgid="8112685757657659269">"Klavír"</item>
<item msgid="3861584909935022342">"Filmový pás"</item>
<item msgid="5827426100157335512">"Kniha"</item>
<item msgid="8585828346253128384">"Lotosový květ"</item>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index b3a90de..bdc9ea9 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Deaktivovat Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Vypne funkci zvuku přes Bluetooth LE, pokud zařízení podporuje hardwarové zvukové funkce LE."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Režim Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Zobrazit přepínač LE Audio v Podrobnostech o zařízení"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Obejít seznam povolených pro Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Ve výchozím nastavení použít LE Audio i v případě, že u periferního zařízení LE Audio nebylo ověřeno splnění kritérií na seznamu povolených."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Nastavit automaticky pomocí sítě a bezdrátových signálů"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatické časové pásmo"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Nastavit automaticky podle mobilních sítí v okolí"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Nastavit automaticky podle polohy zařízení (pokud je k dispozici). Může být potřeba aktivní Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Nastavit automaticky podle polohy zařízení (pokud je k dispozici)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Používat výchozí nastavení jazyka"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Používat 24hodinový formát"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Čas"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Klávesnice ignoruje opakovaná stisknutí jedné klávesy"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Limit opakovaného stisknutí"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Vyberte dobu, po kterou bude klávesnice ignorovat opakované stisknutí klávesy"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Vlastní"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"vlastní hodnota"</string>
<string name="slow_keys" msgid="2891452895499690837">"Zpomalení kláves"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Upraví čas aktivace po stisknutí klávesy"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Jedním prstem"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Místo držení více kláves aktivujte zkratky postupným tisknutím jednotlivých kláves"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Klávesy pro myš"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Ukazatel můžete ovládat pomocí klávesnice"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Opačné posouvání myší"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Při posunutí nahoru posunout stránku dolů"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Prohodit levé a pravé tlačítko"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Používat levé tlačítko myši jako pravé"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Klávesové zkratky"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Zobrazit seznam zkratek"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Klávesnice a nástroje v pracovním profilu"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Vyberte novou klávesu pro <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Přístupnost na fyzické klávesnici"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Funkce Jedním prstem, klávesy pro opuštění, klávesy pro myš"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Opakovat klávesy"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Prodleva před opakováním"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Rychlost opakování"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Při podržení klávesy se bude znak opakovaně zadávat, dokud klávesu neuvolníte"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Rozvržení <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Výchozí"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatické: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Náhled"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardní možnosti"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Jazyk"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Velikost titulků"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Styl titulků"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Vlastní možnosti"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Barva pozadí"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Upravit spotřebu energie"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Zahrnuté balíčky"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikace běží normálně"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Baterie je slabá"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Pokud chcete prodloužit výdrž baterie, zapněte Spořič baterie"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Prodloužení životnosti baterie"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Odpojit tuto síť VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Odpojit"</string>
<string name="vpn_version" msgid="6344167191984400976">"Verze"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Verze <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Zapomenout VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Nahradit stávající síť VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Nastavit trvalou síť VPN?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„9:00–17:00, pracovní dny“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Události v kalendáři"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Režim {mode_1} je aktivní}=2{Režimy {mode_1} a {mode_2} jsou aktivní}=3{Režimy {mode_1}, {mode_2} a {mode_3} jsou aktivní}few{Režimy {mode_1}, {mode_2} a # další jsou aktivní}many{Režimy {mode_1}, {mode_2} a # dalšího jsou aktivní}other{Režimy {mode_1}, {mode_2} a # dalších je aktivních}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 režim se může zapnout automaticky}few{# režimy se mohou zapnout automaticky}many{# režimu se může zapnout automaticky}other{# režimů se může zapnout automaticky}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ZAPNUTO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nenastaveno"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Vypnuto"</string>
@@ -5453,12 +5484,16 @@
<string name="audio_streams_main_page_password_dialog_cannot_edit" msgid="9020898619297520153">"Heslo nelze upravit během sdílení. Pokud chcete změnit heslo, nejdříve vypněte sdílení zvuku."</string>
<string name="audio_streams_qr_code_scanner_label" msgid="8799703301071378034">"Čtečka QR kódů"</string>
<string name="audio_streams_qr_code_help_with_link" msgid="5542328067190486479"><annotation id="link">"Potřebujete poradit?"</annotation></string>
- <string name="homepage_search" msgid="6759334912284663559">"Vyhledávat v nastavení"</string>
+ <string name="homepage_search" msgid="6759334912284663559">"Vyhledat v nastavení"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakty, úložiště, účet"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Úložiště kontaktů"</string>
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Pouze zařízení"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nové kontakty se nebudou synchronizovat s účtem"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakty se ve výchozím nastavení uloží do zařízení a synchronizují s účtem"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Žádné výchozí nastavení"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Při nastavování výchozího účtu došlo k chybě"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Žádné výchozí nastavení"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Pouze zařízení"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Začněte tím, že přidáte účet"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Zakroužkuj a hledej"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Pokud chcete vyhledávat pomocí obsahu na obrazovce, podržte tlačítko plochy nebo navigační úchyt."</string>
</resources>
diff --git a/res/values-da/arrays.xml b/res/values-da/arrays.xml
index 1ff620f..20c4aba 100644
--- a/res/values-da/arrays.xml
+++ b/res/values-da/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snefnug"</item>
<item msgid="7952183800501346803">"Parasol"</item>
<item msgid="799139025758265891">"Værktøj"</item>
- <item msgid="1330084588359129896">"Telt"</item>
+ <item msgid="8112685757657659269">"Klaver"</item>
<item msgid="3861584909935022342">"Filmspole"</item>
<item msgid="5827426100157335512">"Bog"</item>
<item msgid="8585828346253128384">"Lotusblomst"</item>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 5fc8b0b..aa6cf23 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Deaktiver Bluetooth LE-lyd"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Deaktiverer funktionen Bluetooth LE-lyd, hvis enheden understøtter denne LE-lyd til hardware."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Tilstanden Bluetooth LE-lyd"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Vis kontakten til LE-lyd i Enhedsoplysninger"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omgå tilladelsesliste for Bluetooth LE-lyd"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Brug LE-lyd som standard, selvom det ikke er verificeret, at den eksterne LE-lydenhed opfylder kriterierne for tilladelseslisten."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Indstil automatisk ved hjælp af dit netværk og trådløse signaler"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatisk tidszone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Indstil automatisk baseret på mobilnetværk i nærheden af dig"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Indstil automatisk ved hjælp af din enhedslokation, hvis den er tilgængelig. En aktiv Wi-Fi-forbindelse kan også være påkrævet."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Angiv automatisk ved hjælp af din enhedslokation, hvis det er muligt"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Brug landestandard"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Brug 24-timers format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Klokkeslæt"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Hjælpefunktioner"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fysisk tastatur"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Elastiktaster"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Tastaturet ignorerer gentagende, hurtige tryk på den samme tast"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Grænse for elastiktaster"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Vælg, hvor lang tid dit tastatur skal ignorere gentagne tastetryk"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 sekunder"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 sekunder"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 sekunder"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Tilpasset"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"tilpasset værdi"</string>
<string name="slow_keys" msgid="2891452895499690837">"Langsomtaster"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Justerer den tid, det tager, før et tastetryk aktiveres"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Træge taster"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Tryk på én tast ad gangen for at bruge genveje i stedet for at holde flere taster nede på samme tid"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Musetaster"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Brug dit tastatur til at styre markøren"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Omvendt rulning på mus"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Rul opad for at gå ned på siden"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Byt om på knapperne (venstre og højre)"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Brug venstre museknap som højre"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Tastaturgenveje"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Vis liste over genveje"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Vælg en ny ændringstast til <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Hjælpefunktioner til fysisk tastatur"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Træge taster, elastiktaster, musetaster"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Gentagelsestaster"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Forsinkelse før gentagelse"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Gentagelsesfrekvens"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hold fingeren på en tast for at gentage dens tegn, indtil du slipper tasten"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g>-layout"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Standard"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatisk: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Forhåndsvisning"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardindstillinger"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Sprog"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Underteksternes størrelse"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Underteksttype"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Tilpassede valgmuligheder"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Baggrundsfarve"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Juster strømforbrug"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Inkluderede pakker"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps kører normalt"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Lavt batteriniveau"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Aktivér Batterisparefunktion for at forlænge batteritiden"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Forlæng batteritid"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vil du afbryde dette VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Afbryd forbindelse"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Glem VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Erstat det eksisterende VPN-netværk?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vil du konfigurere konstant VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Kl. 9-17 på hverdage\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalenderbegivenheder"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} er aktiveret}=2{{mode_1} og {mode_2} er aktiveret}=3{{mode_1}, {mode_2} og {mode_3} er aktiveret}one{{mode_1}, {mode_2} og # anden er aktiveret}other{{mode_1}, {mode_2} og # andre er aktiveret}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 tilstand kan aktiveres automatisk}one{# tilstand kan aktiveres automatisk}other{# tilstande kan aktiveres automatisk}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"TIL"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ikke konfigureret"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Deaktiveret"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Søg i Indstillinger"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakter, lagerplads, konto"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Lagerplads for kontakter"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Der er ikke angivet nogen standardkonto"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Kun via GPS"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nye kontakter synkroniseres ikke med en konto"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakter gemmes på din enhed og synkroniseres med din konto som standard"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Der opstod en fejl under konfigurationen af standardkontoen"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Der er ikke angivet nogen standardkonto"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Kun via GPS"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Tilføj en konto for at komme godt i gang"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Hold fingeren på knappen Hjem eller navigationshåndtaget for at søge ved hjælp af indholdet på skærmen."</string>
</resources>
diff --git a/res/values-de/arrays.xml b/res/values-de/arrays.xml
index fd23c5b..bb3241d 100644
--- a/res/values-de/arrays.xml
+++ b/res/values-de/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Schneeflocke"</item>
<item msgid="7952183800501346803">"Sonnenschirm"</item>
<item msgid="799139025758265891">"Workshop-Tools"</item>
- <item msgid="1330084588359129896">"Zelt"</item>
+ <item msgid="8112685757657659269">"Klavier"</item>
<item msgid="3861584909935022342">"70er-Jahre-Film"</item>
<item msgid="5827426100157335512">"Buch"</item>
<item msgid="8585828346253128384">"Lotusblume"</item>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index f2129a6..4c6a056 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audio deaktivieren"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Deaktiviert die Bluetooth LE Audio-Funktion, wenn das Gerät LE Audio-Hardwarefunktionen unterstützt."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio-Modus"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Ein/Aus für LE Audio in Gerätedetails"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio-Zulassungsliste umgehen"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio wird standardmäßig verwendet, selbst wenn ein LE Audio-Peripheriegerät nicht die Kriterien der Zulassungsliste erfüllt."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Einstellung erfolgt automatisch über Netzwerk- und WLAN-Signale"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Zeitzone automatisch einstellen"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Einstellung erfolgt automatisch auf der Grundlage von Mobilfunknetzen in deiner Nähe"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Einstellung erfolgt automatisch anhand des Gerätestandorts, wenn verfügbar. Eventuell ist auch eine aktive WLAN-Verbindung nötig."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Einstellung erfolgt automatisch anhand des Gerätestandorts, wenn verfügbar"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Standardformat für die gewählte Spracheinstellung verwenden"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-Stunden-Format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Uhrzeit"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"Datenschutz"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"Arbeitsprofil"</string>
<string name="private_space_title" msgid="1752064212078238723">"Vertrauliches Profil"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"Hier kannst du Apps vor anderen verbergen und sie für sie sperren"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"Hier kannst du Apps vor anderen verbergen und sie für andere sperren"</string>
<string name="private_space_description" msgid="4059594203775816136">"Du kannst Apps in einem vertraulichen Profil installieren, sodass sie nur für dich sichtbar sind und nur von dir geöffnet werden können"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Sperrmethode für vertrauliches Profil"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Du kannst zum Entsperren des vertraulichen Profils dieselbe Methode wie für das Entsperren deines Geräts verwenden oder aber eine andere Sperrmethode einrichten"</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Muster für vertrauliches Profil einrichten"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Sperren"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Verbergen"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Muster für vertrauliches Profil bestätigen"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"PIN für vertrauliches Profil noch einmal eingeben"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Passwort für vertrauliches Profil noch einmal eingeben"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Du kannst bis zu <xliff:g id="COUNT">%d</xliff:g> Fingerabdrücke hinzufügen."</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Du hast die maximale Anzahl an Fingerabdrücken hinzugefügt"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"Es können keine Fingerabdrücke mehr hinzugefügt werden"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Prüfe das Passwort und versuch es noch einmal"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Wende dich an den Hersteller des Geräts"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Prüfe die Verbindung und versuche es noch einmal"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Dieses WLAN ist momentan nicht verfügbar"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Es gibt ein Problem mit diesem QR‑Code. Versuche es mit einer anderen Methode."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Netzwerk auswählen"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Wenn du dein Gerät verbinden möchtest, wähle ein Netzwerk"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Dieses Gerät zu \"<xliff:g id="SSID">%1$s</xliff:g>\" hinzufügen?"</string>
@@ -1951,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Barrierefreiheit"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Physische Tastatur"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Bounce-Tasten"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Schnell aufeinanderfolgende Betätigungen derselben Taste auf der Tastatur werden ignoriert"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Grenzwert für Bounce-Tasten"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Wähle aus, wie lange wiederholtes Drücken der Tasten auf der Tastatur ignoriert werden soll"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 Sek."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 Sek."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 Sek."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Benutzerdefiniert"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"benutzerdefinierter Wert"</string>
<string name="slow_keys" msgid="2891452895499690837">"Anschlagverzögerung"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Passt die Zeit an, die eine Taste gedrückt werden muss, um sie zu aktivieren"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Einfingerbedienung"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Bei Tastenkombinationen Tasten einzeln drücken, statt sie zusammen gedrückt zu halten"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Maustasten"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Zum Steuern des Mauszeigers die Tastatur verwenden"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Mausrad-Scrollrichtung umkehren"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Wenn du nach oben scrollst, wird die Seite nach unten verschoben"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Linke und rechte Taste tauschen"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Die linke Maustaste übernimmt die Funktion der rechten Maustaste (und umgekehrt)"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Tastenkürzel"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Liste der Tastenkombinationen anzeigen"</string>
@@ -2039,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Wähle eine neue Taste für <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Bedienungshilfen für physische Tastaturen"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Einfingerbedienung, Bounce-Tasten, Maustasten"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Tasteneingabewiederholung"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Verzögerung vor Wiederholung"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Wiederholungsrate"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Wenn du eine Taste gedrückt hältst, wird das entsprechende Zeichen so lange immer wieder eingegeben, bis du die Taste loslässt"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Layout: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Standard"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatisch: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2230,7 +2243,7 @@
<string name="accessibility_tutorial_dialog_button" msgid="2031773187678948436">"OK"</string>
<string name="accessibility_tutorial_dialog_link_button" msgid="13364319079385020">"Schaltfläche anpassen"</string>
<string name="accessibility_tutorial_dialog_configure_software_shortcut_type" msgid="8041105223988170653">"Weitere Optionen"</string>
- <string name="accessibility_shortcut_title" msgid="8125867833704517463">"Kurzbefehl für „<xliff:g id="SERVICE">%1$s</xliff:g>“"</string>
+ <string name="accessibility_shortcut_title" msgid="8125867833704517463">"Kurzbefehl für <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_edit_summary_software" msgid="48978719406821294">"Schaltfläche „Bedienungshilfen“"</string>
<string name="accessibility_shortcut_edit_summary_software_gesture" msgid="7346399253904683940">"Touch-Geste für Bedienungshilfen"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"Mit zwei Fingern nach oben wischen"</string>
@@ -2447,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Vorschau"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardoptionen"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Sprache"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Größe der Untertitel"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Untertitelstil"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Benutzerdefinierte Optionen"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Hintergrundfarbe"</string>
@@ -2575,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Energieverbrauch anpassen"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Enthaltene Pakete"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps funktionieren normal"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Akkustand niedrig"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Energiesparmodus aktivieren, um Akkulaufzeit zu erhöhen"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Akkulaufzeit optimieren"</string>
@@ -2992,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Verbindung zu diesem VPN trennen?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Verbindung trennen"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN entfernen"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Aktuelles VPN ersetzen?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Durchgehend aktives VPN aktivieren?"</string>
@@ -3414,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„Von 9 Uhr bis 17 Uhr an Wochentagen“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalendertermine"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ist aktiv}=2{{mode_1} und {mode_2} sind aktiv}=3{{mode_1}, {mode_2} und {mode_3} sind aktiv}other{{mode_1}, {mode_2} und # weitere Modi sind aktiv}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 Modus kann automatisch aktiviert werden}other{# Modi können automatisch aktiviert werden}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AN"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nicht festgelegt"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Deaktiviert"</string>
@@ -3924,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Modus erstellen"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Benutzerdefinierter Modus"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Modusname"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Der Name des Modus darf nicht leer sein"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Symbol auswählen"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Kalendertermine"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Ablauf „Schlafenszeit“"</string>
@@ -5468,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"In Einstellungen suchen"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"Kontakte, Speicher, Konto"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontakte-Speicher"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Kein Standard festgelegt"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Nur Gerät"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Neue Kontakte werden nicht mit einem Konto synchronisiert"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakte werden standardmäßig auf deinem Gerät gespeichert und mit deinem Konto synchronisiert"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Fehler beim Festlegen des Standardkontos"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Kein Standard festgelegt"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Nur Gerät"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Füge ein Konto hinzu, um loszulegen"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Halte die Startbildschirmtaste oder den Navigationsziehpunkt gedrückt, um anhand des Inhalts auf dem Bildschirm zu suchen."</string>
</resources>
diff --git a/res/values-el/arrays.xml b/res/values-el/arrays.xml
index 2bad60e..3765c8b 100644
--- a/res/values-el/arrays.xml
+++ b/res/values-el/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Νιφάδα χιονιού"</item>
<item msgid="7952183800501346803">"Ομπρέλα παραλίας"</item>
<item msgid="799139025758265891">"Εργαλεία εργαστηρίου"</item>
- <item msgid="1330084588359129896">"Σκηνή"</item>
+ <item msgid="8112685757657659269">"Πιάνο"</item>
<item msgid="3861584909935022342">"Ρετρό φιλμ"</item>
<item msgid="5827426100157335512">"Βιβλίο"</item>
<item msgid="8585828346253128384">"Λουλούδι λωτού"</item>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 56ab7f6..5c99586 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Απενεργοποίηση Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Απενεργοποιεί τη λειτουργία Bluetooth LE Audio αν η συσκευή υποστηρίζει δυνατότητες εξοπλισμού LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Λειτουργία Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Εναλλαγή LE Audio στις λεπτομ. συσκευής"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Παράκαμψη λίστας επιτρεπομένων Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Χρήση του LE Audio από προεπιλογή, ακόμα και αν το περιφερειακό LE Audio δεν έχει επαληθευτεί, ώστε να πληροί τα κριτήρια της λίστας επιτρεπομένων."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Αυτόματος ορισμός με χρήση του δικτύου σας και των ασύρματων σημάτων"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Αυτόματη ζώνη ώρας"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Αυτόματος ορισμός με βάση τα δίκτυα κινητής τηλεφωνίας κοντά σας"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Ορίστε αυτόματα με την τοποθεσία συσκευής, αν είναι διαθέσιμη. Ίσως απαιτείται ενεργή σύνδεση Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Αυτόματος ορισμός με χρήση της τοποθεσίας συσκευής, αν είναι διαθέσιμη"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Χρήση προεπιλογής τοπικών ρυθμίσεων"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Χρήση μορφής 24ώρου"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Ώρα"</string>
@@ -600,7 +604,7 @@
<string name="private_space_search_description" msgid="1538155187658429618">"Στη γραμμή αναζήτησης, πληκτρολογήστε \"απόρρητος χώρος\""</string>
<string name="private_space_tap_tile_description" msgid="6173556870938267361">"Πατήστε "<b>"Ιδιωτικός χώρος"</b></string>
<string name="private_space_unlock_description" msgid="5527228922778630361">"Ξεκλείδωμα ιδιωτικού χώρου"</string>
- <string name="private_space_hide_off_summary" msgid="8565973976602078315">"Ανενεργός"</string>
+ <string name="private_space_hide_off_summary" msgid="8565973976602078315">"Ανενεργή"</string>
<string name="private_space_hide_on_summary" msgid="3450844101901438867">"Ενεργός"</string>
<string name="private_space_hide_dialog_title" msgid="6439207708506990156">"Θα γίνει απόκρυψη του ιδιωτικού χώρου στο επόμενο κλείδωμα"</string>
<string name="private_space_hide_dialog_message" msgid="618693520130744836">"Για πρόσβ. στον απόρ. χώρο, πληκτρ. \"απόρρητος χώρος\" στη γραμμή αναζ. στη λίστα εφαρμογ."</string>
@@ -622,7 +626,7 @@
<string name="private_space_cancel_label" msgid="379259667396956886">"Ακύρωση"</string>
<string name="private_space_setup_button_label" msgid="2094882154623560585">"Ρύθμιση"</string>
<string name="private_space_setup_title" msgid="2272968244329821450">"Ιδιωτικός χώρος"</string>
- <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Απόκρυψη ή κλείδωμα ιδιωτικών εφαρμογών σε ξεχωριστό χώρο. Χρησιμοποιήστε έναν αποκλειστικό Λογαριασμό Google για επιπλέον ασφάλεια."</string>
+ <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Αποκρύψτε ή κλειδώστε ιδιωτικές εφαρμογές σε ξεχωριστό χώρο. Χρησιμοποιήστε έναν αποκλειστικό Λογαριασμό Google για επιπλέον ασφάλεια."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Πώς λειτουργεί"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Δημιουργήστε έναν Λογαριασμό Google για τον χώρο σας"</b>\n"Εάν χρησιμοποιείτε έναν αποκλειστικό λογαριασμό, μπορείτε να αποτρέψετε την εμφάνιση συγχρονισμένων αρχείων, φωτογραφιών και μηνυμάτων ηλεκτρονικού ταχυδρομείου εκτός του χώρου σας"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Ρύθμιση κλειδώματος"</b>\n"Κλειδώστε τον χώρο σας για να μην μπορούν να τον ανοίξουν άλλα άτομα"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Το πληκτρολόγιο αγνοεί τα γρήγορα, επαναλαμβανόμενα πατήματα του ίδιου πλήκτρου"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Όριο ελαστικών πλήκτρων"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Επιλέξτε το χρονικό διάστημα κατά το οποίο το πληκτρολόγιο θα παραβλέπει τα επαναλαμβανόμενα πατήματα πλήκτρων"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 δ."</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 δ."</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 δ."</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 δ."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 δ."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 δ."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Προσαρμοσμένη"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"προσαρμοσμένη τιμή"</string>
<string name="slow_keys" msgid="2891452895499690837">"Αργά πλήκτρα"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Προσαρμόζει τον χρόνο που απαιτείται για την ενεργοποίηση ενός πατήματος πλήκτρου"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Ασύγχρονα πλήκτρα"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Για τις συντομεύσεις, αντί να πατάτε παρατεταμένα όλα τα κουμπιά μαζί, φροντίστε να πατάτε ένα πλήκτρο κάθε φορά"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Πλήκτρα ποντικιού"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Χρησιμοποιήστε το πληκτρολόγιο, για να ελέγξετε τον δείκτη"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Αντίστροφη κύλιση με το ποντίκι"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Κάντε κύλιση προς τα επάνω, για να μετακινήσετε τη σελίδα προς τα κάτω."</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Εναλλαγή αριστερού και δεξιού κουμπιού"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Χρησιμοποιήστε το αριστερό κουμπί του ποντικιού ως δεξί κουμπί"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Συντομεύσεις πληκτρολογίου"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Εμφάνιση λίστας συντομεύσεων"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Πληκτρολόγιο και εργαλεία προφίλ εργασίας"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Επιλέξτε ένα νέο κλειδί για <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Προσβασιμότητα φυσικού πληκτρολογίου"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Ασύγχρονα πλήκτρα, Ελαστικά πλήκτρα, Πλήκτρα ποντικιού"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Επανάληψη πλήκτρων"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Καθυστέρηση πριν από την επανάληψη"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Ρυθμός επανάληψης"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Κρατήστε πατημένο ένα πλήκτρο, για επανάληψη του χαρακτήρα του μέχρι να αφήσετε το πλήκτρο"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Διάταξη <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Προεπιλογή"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Αυτόματο: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Προεπισκόπηση"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Βασικές επιλογές"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Γλώσσα"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Μέγεθος υπότιτλων"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Στιλ υποτίτλων"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Προσαρμοσμένες επιλογές"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Χρώμα φόντου"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Προσαρμογή χρήσης ισχύος"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Συμπεριλαμβανόμενα πακέτα"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Οι εφαρμογές εκτελούνται κανονικά"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Χαμηλή ισχύς μπαταρίας"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Ενεργοποιήστε την Εξοικονόμηση μπαταρίας για να επεκτείνετε τη διάρκεια ζωής της μπαταρίας"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Βελτιώστε τη διάρκεια ζωής της μπαταρίας"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Να αποσυνδεθεί αυτό το VPN;"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Αποσύνδεση"</string>
<string name="vpn_version" msgid="6344167191984400976">"Έκδοση"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Έκδοση <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Διαγραφή VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Αντικατάσταση υπάρχοντος VPN;"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ενεργοποίηση του μονίμως ενεργού VPN;"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 π.μ.-5 μ.μ. τις εργάσιμες ημέρες\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Συμβάντα ημερολογίου"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Η λειτουργία {mode_1} είναι ενεργή}=2{Οι λειτουργίες {mode_1} και {mode_2} είναι ενεργές}=3{Οι λειτουργίες {mode_1}, {mode_2} και {mode_3} είναι ενεργές}other{Οι λειτουργίες {mode_1}, {mode_2} και # ακόμη είναι ενεργές}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 λειτουργία μπορεί να ενεργοποιηθεί αυτόματα}other{# λειτουργίες μπορούν να ενεργοποιηθούν αυτόματα}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ΕΝΕΡΓΗ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Δεν έχει οριστεί"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Απενεργοποιημένη"</string>
@@ -3950,7 +3981,7 @@
<string name="nfc_setting_on" msgid="7701896496026725772">"Ενεργό"</string>
<string name="nfc_setting_off" msgid="7142103438532732309">"Ανενεργό"</string>
<string name="screen_pinning_switch_on_text" msgid="6971386830247542552">"Ενεργή"</string>
- <string name="screen_pinning_switch_off_text" msgid="5032105155623003875">"Ανενεργή"</string>
+ <string name="screen_pinning_switch_off_text" msgid="5032105155623003875">"Ανενεργό"</string>
<string name="screen_pinning_title" msgid="6927227272780208966">"Καρφίτσωμα εφαρμογών"</string>
<string name="app_pinning_intro" msgid="6409063008733004245">"Το καρφίτσωμα εφαρμογών σάς επιτρέπει να διατηρείτε την τρέχουσα εφαρμογή ορατή έως ότου την ξεκαρφιτσώσετε. Για παράδειγμα, αυτή η λειτουργία μπορεί να χρησιμοποιηθεί για να επιτρέψετε σε έναν έμπιστο φίλο να παίξει ένα συγκεκριμένο παιχνίδι."</string>
<string name="screen_pinning_description" msgid="5822120806426139396">"Όταν μια εφαρμογή έχει καρφιτσωθεί, η συγκεκριμένη εφαρμογή μπορεί να ανοίξει άλλες εφαρμογές και να είναι δυνατή η πρόσβαση σε προσωπικά δεδομένα. \n\nΓια να χρησιμοποιήσετε το καρφίτσωμα εφαρμογών: \n{0,number,integer}. Ενεργοποιήστε το καρφίτσωμα εφαρμογών \n{1,number,integer}. Ανοίξτε την Επισκόπηση \n{2,number,integer}. Πατήστε το εικονίδιο εφαρμογής στο επάνω μέρος της οθόνης και έπειτα πατήστε Καρφίτσωμα."</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Μόνο στη συσκευή"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Οι νέες επαφές δεν θα συγχρονίζονται με κάποιον λογαριασμό"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Οι επαφές θα αποθηκεύονται στη συσκευή σας και θα συγχρονίζονται με τον λογαριασμό σας από προεπιλογή"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Δεν ορίστηκε προεπιλογή"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Σφάλμα κατά τον ορισμό προεπιλεγμένου λογαριασμού"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Δεν ορίστηκε προεπιλογή"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Μόνο από συσκευή"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Για να ξεκινήσετε, προσθέστε λογαριασμό"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Κυκλώστε για αναζήτηση"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Πατήστε παρατεταμένα το κουμπί αρχικής οθόνης ή τη λαβή πλοήγησης, για να κάνετε αναζήτηση χρησιμοποιώντας το περιεχόμενο στην οθόνη σας."</string>
</resources>
diff --git a/res/values-en-rAU/arrays.xml b/res/values-en-rAU/arrays.xml
index 53465e7..9cb3e27 100644
--- a/res/values-en-rAU/arrays.xml
+++ b/res/values-en-rAU/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snowflake"</item>
<item msgid="7952183800501346803">"Beach umbrella"</item>
<item msgid="799139025758265891">"Workshop tools"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Film reel"</item>
<item msgid="5827426100157335512">"Book"</item>
<item msgid="8585828346253128384">"Lotus flower"</item>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index ef44048..66421df 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Disable Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Disables the Bluetooth LE audio feature if the device supports LE audio hardware capabilities."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio mode"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Show LE Audio toggle in Device details"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bypass Bluetooth LE Audio allowlist"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Use LE Audio by default even if LE Audio peripheral hasn\'t been verified to meet allowlist criteria."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Set automatically using your network and wireless signals"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatic time zone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Set automatically based on mobile networks near you"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Set automatically using your device location, if available. An active Wi-Fi connection may also be required."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Set automatically using your device location, if available"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Time"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibility"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Physical keyboard"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Bounce keys"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"The keyboard ignores quickly repeated presses of the same key"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Bounce key threshold"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Choose the duration of time that your keyboard ignores repeated key presses"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Custom"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"custom value"</string>
<string name="slow_keys" msgid="2891452895499690837">"Slow keys"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Adjusts the time that it takes for a key press to activate"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Sticky keys"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Press one key at a time for shortcuts instead of holding keys down together"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Mouse keys"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Use your keyboard to control the pointer"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Mouse reverse scrolling"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scroll up to move the page down"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Swap left and right buttons"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use the left mouse button as your right"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Keyboard shortcuts"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Show list of shortcuts"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Choose a new key for <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Physical keyboard accessibility"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Sticky keys, bounce keys, mouse keys"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repeat keys"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Delay before repeat"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Repeat rate"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hold down a key to repeat its character until the key is released"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> layout"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Default"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatic: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Preview"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standard options"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Language"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Caption size"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Caption style"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Customisation options"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Background colour"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Adjust power use"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Included packages"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps are running normally"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Battery level low"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Turn on Battery Saver to extend battery life"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Improve battery life"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\'9.00 a.m. – 5.00 p.m. weekdays\'"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Calendar events"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} is active}=2{{mode_1} and {mode_2} are active}=3{{mode_1}, {mode_2} and {mode_3} are active}other{{mode_1}, {mode_2} and # more are active}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode can turn on automatically}other{# modes can turn on automatically}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Not set"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Disabled"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Search settings"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, storage, account"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Contacts storage"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"No default set"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Device only"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"New contacts won\'t be synced with an account"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Contacts will be saved to your device and synced to your account by default"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Error setting the default account"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"No default set"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Device only"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Add an account to get started"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Touch and hold the home button or the navigation handle to search using the content on your screen."</string>
</resources>
diff --git a/res/values-en-rCA/arrays.xml b/res/values-en-rCA/arrays.xml
index 4682432..19cf1b9 100644
--- a/res/values-en-rCA/arrays.xml
+++ b/res/values-en-rCA/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snowflake"</item>
<item msgid="7952183800501346803">"Beach umbrella"</item>
<item msgid="799139025758265891">"Workshop tools"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Film reel"</item>
<item msgid="5827426100157335512">"Book"</item>
<item msgid="8585828346253128384">"Lotus flower"</item>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index a1ab150..93aa43f 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Disable Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Disables Bluetooth LE audio feature if the device supports LE audio hardware capabilities."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio mode"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Show LE audio toggle in Device Details"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bypass Bluetooth LE Audio Allowlist"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Use LE Audio by default even if LE Audio peripheral hasn\'t been verified to meet Allowlist criteria."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Set automatically using your network and wireless signals"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatic time zone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Set automatically based on mobile networks near you"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Set automatically using your device location, if available. An active Wifi connection may also be required."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Set automatically using your device location, if available"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Time"</string>
@@ -1949,15 +1953,29 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"The keyboard ignores quickly repeated presses of the same key"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Bounce key threshold"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Choose the duration of time your keyboard ignores repeated key presses"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Custom"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"custom value"</string>
<string name="slow_keys" msgid="2891452895499690837">"Slow keys"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Adjusts the time it takes for a key press to activate"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Sticky keys"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Press one key at a time for shortcuts instead of holding keys down together"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Mouse keys"</string>
+ <string name="mouse_keys_main_title" msgid="3570638931365221460">"Use mouse keys"</string>
<string name="mouse_keys_summary" msgid="7030731235143286467">"Use your keyboard to control the pointer"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Mouse reverse scrolling"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scroll up to move the page down"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Swap left and right buttons"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use the left mouse button as your right"</string>
+ <string name="mouse_key_main_page_title" msgid="8051692181770475257">"Mouse keys for <xliff:g id="KEYBOARD_NAME">%s</xliff:g>"</string>
+ <string name="mouse_keys_directional_summary" msgid="8108444346340180562">"Use the <xliff:g id="DIRECTIONAL_LABEL">%s</xliff:g> keys to move the mouse pointer"</string>
+ <string name="mouse_keys_click_summary" msgid="1642125742164614577">"Use the <xliff:g id="CLICK_LABEL">%s</xliff:g> key to click the primary mouse button"</string>
+ <string name="mouse_keys_press_hold_summary" msgid="2313418505798763112">"Use the <xliff:g id="PRESS_HOLD_LABEL">%s</xliff:g> key to press & hold the primary mouse button"</string>
+ <string name="mouse_keys_release_summary" msgid="2379239679203818720">"Use the <xliff:g id="RELEASE_LABEL">%s</xliff:g> key to release the primary mouse button"</string>
+ <string name="mouse_keys_toggle_scroll_summary" msgid="8129249227018251990">"Use the <xliff:g id="RELEASE_LABEL_1">%1$s</xliff:g> key to toggle scroll mode. This will make the <xliff:g id="RELEASE_LABEL_2">%2$s</xliff:g> keys scroll the view top, down, left or right"</string>
+ <string name="mouse_keys_release2_summary" msgid="2395196580659122185">"Use the <xliff:g id="RELEASE_2_LABEL">%s</xliff:g> key to click the secondary mouse button"</string>
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Keyboard shortcuts"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Show list of shortcuts"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Work profile keyboards & tools"</string>
@@ -2026,8 +2044,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Choose a new key for <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Physical keyboard accessibility"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Sticky keys, Bounce keys, Mouse keys"</string>
- <string name="keyboard_repeat_key_title" msgid="3641350808120194549">"Repeat Keys"</string>
- <string name="keyboard_repeat_key_summary" msgid="3970350989341158854">"Hold down a key to repeat its character until the key is released"</string>
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repeat Keys"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Delay before repeat"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Repeat Rate"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hold down a key to repeat its character until the key is released"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> layout"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Default"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatic: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2559,6 +2579,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Adjust power use"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Included packages"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps are running normally"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Battery level low"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Turn on Battery Saver to extend battery life"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Improve battery life"</string>
@@ -2976,6 +3000,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -3398,7 +3423,7 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 AM - 5 PM weekdays\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Calendar events"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} is active}=2{{mode_1} and {mode_2} are active}=3{{mode_1}, {mode_2}, and {mode_3} are active}other{{mode_1}, {mode_2}, and # more are active}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode can turn on automatically}other{# modes can turn on automatically}}"</string>
+ <string name="zen_modes_summary" msgid="2576893588489258390">"{count,plural, =0{Do Not Disturb}=1{{mode_1}}=2{{mode_1}, {mode_2}}other{{mode_1}, {mode_2}, {mode_3}}}"</string>
<string name="zen_mode_active_text" msgid="5002406772481439437">"ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Not set"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Disabled"</string>
@@ -5454,6 +5479,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Device only"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"New contacts won\'t be synced with an account"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Contacts will be saved to your device and synced to your account by default"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"No default set"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Error setting the default account"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"No default set"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Device only"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Add an account to get started"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Touch and hold the Home button or the navigation handle to search using the content on your screen."</string>
</resources>
diff --git a/res/values-en-rGB/arrays.xml b/res/values-en-rGB/arrays.xml
index 53465e7..9cb3e27 100644
--- a/res/values-en-rGB/arrays.xml
+++ b/res/values-en-rGB/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snowflake"</item>
<item msgid="7952183800501346803">"Beach umbrella"</item>
<item msgid="799139025758265891">"Workshop tools"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Film reel"</item>
<item msgid="5827426100157335512">"Book"</item>
<item msgid="8585828346253128384">"Lotus flower"</item>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 0f428c2..f0a1e21 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Disable Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Disables the Bluetooth LE audio feature if the device supports LE audio hardware capabilities."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio mode"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Show LE Audio toggle in Device details"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bypass Bluetooth LE Audio allowlist"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Use LE Audio by default even if LE Audio peripheral hasn\'t been verified to meet allowlist criteria."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Set automatically using your network and wireless signals"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatic time zone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Set automatically based on mobile networks near you"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Set automatically using your device location, if available. An active Wi-Fi connection may also be required."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Set automatically using your device location, if available"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Time"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibility"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Physical keyboard"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Bounce keys"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"The keyboard ignores quickly repeated presses of the same key"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Bounce key threshold"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Choose the duration of time that your keyboard ignores repeated key presses"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Custom"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"custom value"</string>
<string name="slow_keys" msgid="2891452895499690837">"Slow keys"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Adjusts the time that it takes for a key press to activate"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Sticky keys"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Press one key at a time for shortcuts instead of holding keys down together"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Mouse keys"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Use your keyboard to control the pointer"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Mouse reverse scrolling"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scroll up to move the page down"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Swap left and right buttons"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use the left mouse button as your right"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Keyboard shortcuts"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Show list of shortcuts"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Choose a new key for <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Physical keyboard accessibility"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Sticky keys, bounce keys, mouse keys"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repeat keys"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Delay before repeat"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Repeat rate"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hold down a key to repeat its character until the key is released"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> layout"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Default"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatic: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Preview"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standard options"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Language"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Caption size"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Caption style"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Customisation options"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Background colour"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Adjust power use"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Included packages"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps are running normally"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Battery level low"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Turn on Battery Saver to extend battery life"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Improve battery life"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\'9.00 a.m. – 5.00 p.m. weekdays\'"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Calendar events"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} is active}=2{{mode_1} and {mode_2} are active}=3{{mode_1}, {mode_2} and {mode_3} are active}other{{mode_1}, {mode_2} and # more are active}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode can turn on automatically}other{# modes can turn on automatically}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Not set"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Disabled"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Search settings"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, storage, account"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Contacts storage"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"No default set"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Device only"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"New contacts won\'t be synced with an account"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Contacts will be saved to your device and synced to your account by default"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Error setting the default account"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"No default set"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Device only"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Add an account to get started"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Touch and hold the home button or the navigation handle to search using the content on your screen."</string>
</resources>
diff --git a/res/values-en-rIN/arrays.xml b/res/values-en-rIN/arrays.xml
index 53465e7..9cb3e27 100644
--- a/res/values-en-rIN/arrays.xml
+++ b/res/values-en-rIN/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snowflake"</item>
<item msgid="7952183800501346803">"Beach umbrella"</item>
<item msgid="799139025758265891">"Workshop tools"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Film reel"</item>
<item msgid="5827426100157335512">"Book"</item>
<item msgid="8585828346253128384">"Lotus flower"</item>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 606547b..3dc539d 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Disable Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Disables the Bluetooth LE audio feature if the device supports LE audio hardware capabilities."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio mode"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Show LE Audio toggle in Device details"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bypass Bluetooth LE Audio allowlist"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Use LE Audio by default even if LE Audio peripheral hasn\'t been verified to meet allowlist criteria."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Set automatically using your network and wireless signals"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatic time zone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Set automatically based on mobile networks near you"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Set automatically using your device location, if available. An active Wi-Fi connection may also be required."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Set automatically using your device location, if available"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Use locale default"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Use 24-hour format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Time"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibility"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Physical keyboard"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Bounce keys"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"The keyboard ignores quickly repeated presses of the same key"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Bounce key threshold"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Choose the duration of time that your keyboard ignores repeated key presses"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Custom"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"custom value"</string>
<string name="slow_keys" msgid="2891452895499690837">"Slow keys"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Adjusts the time that it takes for a key press to activate"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Sticky keys"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Press one key at a time for shortcuts instead of holding keys down together"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Mouse keys"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Use your keyboard to control the pointer"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Mouse reverse scrolling"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scroll up to move the page down"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Swap left and right buttons"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use the left mouse button as your right"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Keyboard shortcuts"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Show list of shortcuts"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Choose a new key for <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Physical keyboard accessibility"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Sticky keys, bounce keys, mouse keys"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repeat keys"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Delay before repeat"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Repeat rate"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hold down a key to repeat its character until the key is released"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> layout"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Default"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatic: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Preview"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standard options"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Language"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Caption size"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Caption style"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Customisation options"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Background colour"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Adjust power use"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Included packages"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps are running normally"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Battery level low"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Turn on Battery Saver to extend battery life"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Improve battery life"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnect this VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnect"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Forget VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Replace existing VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\'9.00 a.m. – 5.00 p.m. weekdays\'"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Calendar events"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} is active}=2{{mode_1} and {mode_2} are active}=3{{mode_1}, {mode_2} and {mode_3} are active}other{{mode_1}, {mode_2} and # more are active}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode can turn on automatically}other{# modes can turn on automatically}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Not set"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Disabled"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Search settings"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, storage, account"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Contacts storage"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"No default set"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Device only"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"New contacts won\'t be synced with an account"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Contacts will be saved to your device and synced to your account by default"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Error setting the default account"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"No default set"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Device only"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Add an account to get started"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Touch and hold the home button or the navigation handle to search using the content on your screen."</string>
</resources>
diff --git a/res/values-es-rUS/arrays.xml b/res/values-es-rUS/arrays.xml
index 607d9d7..a19ff4b 100644
--- a/res/values-es-rUS/arrays.xml
+++ b/res/values-es-rUS/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Copo de nieve"</item>
<item msgid="7952183800501346803">"Sombrilla"</item>
<item msgid="799139025758265891">"Herramientas de taller"</item>
- <item msgid="1330084588359129896">"Tienda"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Rollo de película"</item>
<item msgid="5827426100157335512">"Libro"</item>
<item msgid="8585828346253128384">"Flor de loto"</item>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index ce0820e..f4a6661 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Inhabilitar Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Inhabilita la función Bluetooth LE Audio si el dispositivo admite funciones de hardware de ese tipo."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modo Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Botón LE Audio en Detalles del dispositivo"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omitir lista de dispositivos permitidos de Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Usar LE Audio de forma predeterminada incluso si no se verificó si el periférico de LE Audio cumple con los criterios de la lista de dispositivos permitidos"</string>
@@ -132,7 +136,7 @@
<string name="connected_device_add_device_summary" msgid="8671009879957120802">"Se activará el Bluetooth para vincular"</string>
<string name="connected_device_connections_title" msgid="4164120115341579170">"Preferencias de conexión"</string>
<string name="connected_device_previously_connected_screen_title" msgid="8823331744788100605">"Conectados anteriormente"</string>
- <string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Se activó el Bluetooth"</string>
+ <string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth activado"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Ver todos"</string>
<string name="connected_device_fast_pair_device_see_all" msgid="4898279230458128620">"Ver todos"</string>
<string name="stylus_device_details_title" msgid="7618295136015480864">"Pluma stylus"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Se establecen automáticamente con la red y las señales inalámbricas"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Zona horaria automática"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Configurar automáticamente según las redes móviles cercanas"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Se establecen automáticamente con la ubicación del dispositivo (si está disponible). Se podría necesitar una conexión Wi-Fi activa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Se establecen automáticamente con la ubicación del dispositivo (si está disponible)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar configuración regional predeterminada"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Formato de 24 horas"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Hora"</string>
@@ -624,7 +628,7 @@
<string name="private_space_setup_title" msgid="2272968244329821450">"Espacio privado"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Oculta o bloquea las apps privadas en un espacio separado. Usa una Cuenta de Google exclusiva para más seguridad."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Cómo funciona"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crea una Cuenta de Google para tu espacio"</b>\n"Usa una cuenta exclusiva para evitar que aparezcan archivos sincronizados, fotos y correos electrónicos fuera de tu espacio"</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crea una Cuenta de Google para tu espacio"</b>\n"Usa una cuenta exclusiva para evitar que aparezcan archivos, fotos y correos electrónicos sincronizados fuera de tu espacio"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Configura un bloqueo"</b>\n"Bloquea tu espacio privado para que nadie más pueda abrirlo."</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instala apps"</b>\n"Instala apps que quieres mantener privadas en tu espacio"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Importante"</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Establece patrón para espacio privado"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Bloqueo"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Ocultar"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Confirma el patrón de tu espacio privado"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Vuelve a ingresar el PIN de tu espacio privado"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Vuelve a ingresar la contraseña de tu espacio privado"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Puedes agregar hasta <xliff:g id="COUNT">%d</xliff:g> huellas dactilares"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Agregaste la cantidad máxima permitida de huellas digitales"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"No se pueden agregar más huellas digitales"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Revisa la contraseña y vuelve a intentarlo"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Comunícate con el fabricante del dispositivo"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Comprueba la conexión y vuelve a intentarlo"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Esta red Wi-Fi no está disponible en este momento"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Hay un problema con este código QR. Intenta conectarte de otra forma."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Elegir una red"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Selecciona una red para conectar tu dispositivo"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"¿Agregar este dispositivo a \"<xliff:g id="SSID">%1$s</xliff:g>\"?"</string>
@@ -1954,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"El teclado ignora las presiones repetidas con rapidez de la misma tecla"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Umbral de rechazo de teclas"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Elige el intervalo de tiempo en el que el teclado ignora las presiones repetidas"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizado"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalizado"</string>
<string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Ajusta el tiempo que lleva activar la presión de una tecla"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Teclas especiales"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Presiona una tecla a la vez para hacer la combinación de teclas en lugar de presionarlas juntas"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Teclas del mouse"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Usa el teclado para controlar el puntero"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Desplazamiento invertido del mouse"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Desplázate hacia arriba para bajar la página"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Intercambiar los botones izquierdo y derecho"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Usa el botón izquierdo del mouse como el derecho"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Combinaciones de teclas"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostrar lista de combinaciones de teclas"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Teclados y herramientas del perfil de trabajo"</string>
@@ -2031,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Elige una nueva tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accesibilidad del teclado físico"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas especiales, rechazo de teclas, teclas del mouse"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repetición de teclas"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Tiempo para repetición"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Frecuencia de repetición"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Mantener presionada una tecla para repetir su carácter hasta que se suelte la tecla"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Diseño <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predeterminadas"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automático: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2222,7 +2243,7 @@
<string name="accessibility_tutorial_dialog_button" msgid="2031773187678948436">"Entendido"</string>
<string name="accessibility_tutorial_dialog_link_button" msgid="13364319079385020">"Personalizar botón"</string>
<string name="accessibility_tutorial_dialog_configure_software_shortcut_type" msgid="8041105223988170653">"Más opciones"</string>
- <string name="accessibility_shortcut_title" msgid="8125867833704517463">"Combinación para <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
+ <string name="accessibility_shortcut_title" msgid="8125867833704517463">"Atajo para <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_edit_summary_software" msgid="48978719406821294">"botón de accesibilidad"</string>
<string name="accessibility_shortcut_edit_summary_software_gesture" msgid="7346399253904683940">"gesto de accesibilidad"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"Deslizar dos dedos hacia arriba"</string>
@@ -2439,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Vista previa"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opciones estándar"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tamaño de los subtítulos"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estilo de los subtítulos"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opciones personalizadas"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Color de fondo"</string>
@@ -2567,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajustar el uso de energía"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Paquetes incluidos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Las apps se ejecutan con normalidad"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nivel de batería bajo"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Activa el Ahorro de batería para extender la duración de la batería"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Mejora la duración de la batería"</string>
@@ -2984,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"¿Deseas desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versión"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Borrar VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"¿Reemplazar VPN existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"¿Configurar la VPN siempre activa?"</string>
@@ -3389,7 +3414,7 @@
<string name="spatial_summary_on_one" msgid="6239933399496282994">"Sí (<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>)"</string>
<string name="spatial_summary_on_two" msgid="4526919818832483883">"Sí (<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> y <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>)"</string>
<string name="spatial_audio_footer_title" msgid="8775010547623606088">"También puedes activar el audio espacial para dispositivos Bluetooth."</string>
- <string name="spatial_audio_footer_learn_more_text" msgid="3826811708094366301">"Parámetros de configuración de dispositivos conectados"</string>
+ <string name="spatial_audio_footer_learn_more_text" msgid="3826811708094366301">"Configuración de dispositivos conectados"</string>
<string name="spatial_audio_multi_toggle_title" msgid="6175786400035541273">"Audio espacial"</string>
<string name="spatial_audio_multi_toggle_off" msgid="2086359413991193164">"Desactivado"</string>
<string name="spatial_audio_multi_toggle_on" msgid="4204808183659033003">"Fijo"</string>
@@ -3406,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"De 9 a.m. a 5 p.m. los días de semana\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventos de calendario"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} está activo}=2{{mode_1} y {mode_2} están activos}=3{{mode_1}, {mode_2} y {mode_3} están activos}other{{mode_1}, {mode_2} y # modos más están activos}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modo se puede activar automáticamente}other{# modos se pueden activar automáticamente}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVADO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Sin establecer"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Inhabilitado"</string>
@@ -3916,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Crea un modo"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Modo personalizado"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Nombre del modo"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"El nombre del modo no puede estar vacío"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Selecciona un ícono"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Eventos de calendario"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Rutina Hora de dormir"</string>
@@ -5041,9 +5066,9 @@
<string name="lockscreen_privacy_wallet_summary" msgid="3984851951621168573">"Permite el acceso a la billetera desde la pantalla de bloqueo"</string>
<string name="lockscreen_privacy_qr_code_scanner_setting_toggle" msgid="1856477548806618829">"Mostrar escáner de código QR"</string>
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Permitir el acceso al escáner de código QR desde la pantalla de bloqueo"</string>
- <string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controles del dispositivo"</string>
+ <string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Mostrar controles de dispositivos"</string>
<string name="lockscreen_privacy_controls_summary" msgid="7522918441738915364">"Desde la pantalla de bloqueo"</string>
- <string name="lockscreen_trivial_controls_setting_toggle" msgid="2174300719855112358">"Usar controles del dispositivo"</string>
+ <string name="lockscreen_trivial_controls_setting_toggle" msgid="2174300719855112358">"Usar controles de dispositivos"</string>
<string name="lockscreen_trivial_disabled_controls_summary" msgid="7593626010580689155">"Para usar, primero activa \"Mostrar controles del dispositivo\""</string>
<string name="lockscreen_double_line_clock_summary" msgid="4109235686687860393">"El tamaño del reloj cambia según el contenido de la pantalla de bloqueo"</string>
<string name="lockscreen_double_line_clock_setting_toggle" msgid="802271087416091548">"Reloj dinámico"</string>
@@ -5220,7 +5245,7 @@
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar más adelante"</string>
<string name="bluetooth_details_spatial_audio_title" msgid="1368071116994002707">"Audio espacial"</string>
<string name="bluetooth_details_spatial_audio_summary" msgid="5026859623681482668">"El audio de contenido multimedia compatible se hace más envolvente"</string>
- <string name="bluetooth_details_head_tracking_title" msgid="5416972521040337799">"Seguimiento de cabeza"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="5416972521040337799">"Monitoreo de cabeza"</string>
<string name="bluetooth_details_head_tracking_summary" msgid="3942238746595985395">"El audio cambia a medida que mueves la cabeza para sonar más natural"</string>
<string name="bluetooth_details_permissions_sync_title" msgid="7277580382321003521">"Sincronización de permisos desde el teléfono"</string>
<string name="bluetooth_details_permissions_sync_summary" msgid="8125037984381432059">"Otórgale al reloj los mismos permisos de la app de este teléfono"</string>
@@ -5463,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Solo en dispositivo"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Los contactos nuevos no se sincronizarán con una cuenta"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"De forma predeterminada, los contactos se guardarán en el dispositivo y se sincronizarán con tu cuenta"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"No hay cuenta predeterminada"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Se produjo un error al establecer la cuenta predeterminada"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"No hay cuenta predeterminada"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Solo en dispositivo"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Agrega una cuenta para comenzar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Busca con un círculo"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Mantén presionado el botón de inicio o la barra de navegación para hacer búsquedas con el contenido de la pantalla."</string>
</resources>
diff --git a/res/values-es/arrays.xml b/res/values-es/arrays.xml
index 2a48e62..83143e5 100644
--- a/res/values-es/arrays.xml
+++ b/res/values-es/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Copo de nieve"</item>
<item msgid="7952183800501346803">"Sombrilla"</item>
<item msgid="799139025758265891">"Herramientas del taller"</item>
- <item msgid="1330084588359129896">"Tienda de campaña"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Carrete vintage"</item>
<item msgid="5827426100157335512">"Libro"</item>
<item msgid="8585828346253128384">"Flor de loto"</item>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index ff50016..0558671 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Inhabilitar Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Inhabilita la función Bluetooth LE Audio si el dispositivo es compatible con las capacidades de hardware de LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modo Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Mostrar botón LE Audio en Detalles del dispositivo"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Ignorar lista de permitidos de Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Usa LE Audio de forma predeterminada aunque no se haya verificado que el periférico LE Audio cumpla los criterios de la lista de permitidos"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Se establece automáticamente mediante tu red y señales inalámbricas"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Zona horaria automática"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Se establece automáticamente según las redes móviles cercanas"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Se establece automáticamente usando la ubicación de tu dispositivo, si está disponible. También puede que se necesite una conexión Wi-Fi activa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Se establece automáticamente usando la ubicación de tu dispositivo, si está disponible"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar configuración regional predeterminada"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Hora"</string>
@@ -563,7 +567,7 @@
<string name="private_space_title" msgid="1752064212078238723">"Espacio privado"</string>
<string name="private_space_summary" msgid="2274405892301976238">"Bloquea y oculta tus aplicaciones privadas"</string>
<string name="private_space_description" msgid="4059594203775816136">"Mantén las aplicaciones privadas en un espacio separado que puedas ocultar o bloquear"</string>
- <string name="private_space_lock_title" msgid="7230836881433350526">"Bloqueo de espacio privado"</string>
+ <string name="private_space_lock_title" msgid="7230836881433350526">"Bloquear espacio privado"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Puedes desbloquear el espacio privado de la misma forma que desbloqueas tu dispositivo, o bien con un bloqueo diferente"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"Usar el bloqueo de pantalla del dispositivo"</string>
<string name="private_space_biometric_title" msgid="3934339826674553174">"Desbloqueo facial y con huella digital"</string>
@@ -625,7 +629,7 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Oculta o bloquea las aplicaciones privadas en un espacio separado. Usa una cuenta de Google exclusiva para aumentar la seguridad."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Cómo funciona"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crea una cuenta de Google para tu espacio"</b>\n"Si usas una cuenta específica, podrás evitar que los archivos, fotos y correos sincronizados aparezcan fuera de tu espacio"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Define un bloqueo"</b>\n"Bloquea tu espacio para evitar que otras personas lo abran."</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Define un bloqueo"</b>\n"Bloquea tu espacio para evitar que otras personas lo abran"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instala aplicaciones"</b>\n"Instala en tu espacio las aplicaciones que quieras mantener en privado"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Importante"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Las aplicaciones se detienen cuando bloqueas tu espacio"</b>\n"Al bloquear tu espacio, las aplicaciones de tu espacio privado se detienen y no recibirás sus notificaciones"</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Configura un patrón para espacio privado"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Bloquear"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Ocultar"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Confirma el patrón del espacio privado"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Vuelve a introducir el PIN del espacio privado"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Vuelve a introducir la contraseña del espacio privado"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Puedes añadir hasta <xliff:g id="COUNT">%d</xliff:g> huellas digitales"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Has añadido el número máximo de huellas digitales"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"No se pueden añadir más huellas digitales"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Comprueba que la contraseña sea correcta y vuelve a intentarlo"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Ponte en contacto con el fabricante del dispositivo"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Comprueba la conexión y vuelve a intentarlo"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Esta red Wi-Fi no está disponible en este momento"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Hay un problema con este código QR. Prueba a conectarte de otra forma."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Elegir red"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Elige una red para conectar tu dispositivo"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"¿Añadir este dispositivo a \"<xliff:g id="SSID">%1$s</xliff:g>\"?"</string>
@@ -1951,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accesibilidad"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Teclado físico"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Teclas de rebote"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"El teclado ignora las pulsaciones rápidas repetidas de la misma tecla"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Umbral de tecla de rebote"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Elige el tiempo que tu teclado ignora las pulsaciones repetidas de teclas"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizado"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalizado"</string>
<string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Ajusta el tiempo que se tarda en activar una pulsación de tecla"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Teclas persistentes"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Para las combinaciones de teclas, pulsa las teclas de una en una en lugar de mantenerlas pulsadas todas a la vez"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Teclas para el ratón"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Usa el teclado para controlar el puntero"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Desplazamiento inverso del ratón"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Desplázate hacia arriba para mover la página hacia abajo"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Cambiar los botones izquierdo y derecho"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Usa el botón izquierdo del ratón como el derecho"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Combinaciones de teclas"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Muestra la lista de combinaciones de teclas"</string>
@@ -2039,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Elige una nueva tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accesibilidad del teclado físico"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas persistentes, teclas de rebote y teclas para el ratón"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Teclas de repetición"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Tiempo hasta la repetición"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Porcentaje de repetición"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Mantén pulsada una tecla para repetir su carácter hasta que la sueltes"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Diseño <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predeterminado"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automático: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2216,7 +2229,7 @@
<string name="accessibility_tutorial_dialog_title_gesture_settings" msgid="6800684770875867559">"Usar gesto de accesibilidad"</string>
<string name="accessibility_tutorial_dialog_message_button" msgid="8977286776192770246">"En la parte inferior de la pantalla, toca el botón de accesibilidad <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> para usar esta función.\n\nPara cambiar de una función a otra, mantén pulsado ese botón."</string>
<string name="accessibility_tutorial_dialog_message_floating_button" msgid="6631371483819355514">"Para usar esta función, toca el botón de accesibilidad de la pantalla"</string>
- <string name="accessibility_tutorial_dialog_message_volume" msgid="3785791536286606664">"Para usar esta función, mantén pulsadas las dos teclas de volumen"</string>
+ <string name="accessibility_tutorial_dialog_message_volume" msgid="3785791536286606664">"Para usar esta función, mantén pulsadas las 2 teclas de volumen"</string>
<string name="accessibility_tutorial_dialog_message_triple" msgid="5219991116201165146">"Para iniciar o detener la ampliación, toca tres veces en cualquier parte de la pantalla."</string>
<string name="accessibility_tutorial_dialog_tripletap_instruction" msgid="7549293553589934">"Para iniciar o detener la ampliación, toca rápidamente la pantalla %1$d veces"</string>
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction" msgid="1007756360115974649">"Para iniciar o detener la ampliación, toca rápidamente la pantalla dos veces con %1$d dedos"</string>
@@ -2447,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Vista previa"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opciones estándar"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tamaño de los subtítulos"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estilo de los subtítulos"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opciones personalizadas"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Color de fondo"</string>
@@ -2575,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Cómo reducir el uso de la batería"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Paquetes incluidos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Las aplicaciones funcionan con normalidad"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Queda poca batería"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Activa Ahorro de batería para que la batería dure más"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Aumenta la duración de la batería"</string>
@@ -2992,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"¿Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versión"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Olvidar VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"¿Reemplazar VPN actual?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"¿Configurar el modo de VPN siempre activada?"</string>
@@ -3414,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"De 9:00 a 17:00 los días laborables\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventos del calendario"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} está activo}=2{{mode_1} y {mode_2} están activos}=3{{mode_1}, {mode_2} y {mode_3} están activos}other{{mode_1}, {mode_2} y # más están activos}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modo se puede activar automáticamente}other{# modos se pueden activar automáticamente}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVADO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Sin definir"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Inhabilitado"</string>
@@ -3924,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Crea un modo"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Modo personalizado"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Nombre del modo"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"El nombre del modo no puede estar vacío"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Selecciona un icono"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Eventos del calendario"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Rutina Buenas noches"</string>
@@ -3946,7 +3963,7 @@
<string name="zen_mode_blurb_immersive" msgid="5884004861848687869">"Bloquea las distracciones o interrupciones de tu dispositivo para concentrarte"</string>
<string name="zen_mode_blurb_theater" msgid="2999237960059524225">"Elimina todas las distracciones para un ambiente silencioso"</string>
<string name="zen_mode_blurb_managed" msgid="5473921634985032149">"Personaliza las experiencias y los ajustes del dispositivo para diferentes usuarios"</string>
- <string name="zen_mode_blurb_generic" msgid="3041601339807075625">"Reduce las interrupciones al permitir que solo se pongan en contacto contigo las personas y aplicaciones importantes"</string>
+ <string name="zen_mode_blurb_generic" msgid="3041601339807075625">"Reduce interrupciones al solo permitir que ciertas personas y aplicaciones importantes se pongan en contacto contigo."</string>
<string name="zen_mode_inspiration_schedule_time" msgid="5596540503159096153">"Configura un modo que siga un horario regular"</string>
<string name="zen_mode_inspiration_schedule_calendar" msgid="3678727180860212700">"Mantén tu dispositivo sincronizado con los eventos del día"</string>
<string name="zen_mode_inspiration_bedtime" msgid="6294822414181670666">"Empieza el día con energía"</string>
@@ -5468,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Buscar ajustes"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contactos, almacenamiento, cuenta"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Almacenamiento de los contactos"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ninguna cuenta predeterminada definida"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Solo en el dispositivo"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Los contactos nuevos no se sincronizarán con ninguna cuenta"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Los contactos se guardarán en tu dispositivo y se sincronizarán con tu cuenta de forma predeterminada"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"No se ha podido definir la cuenta predeterminada"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ninguna cuenta predeterminada definida"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Solo en el dispositivo"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Añade una cuenta para empezar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Rodea para buscar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Mantén pulsado el botón de inicio o la barra de navegación para buscar usando el contenido de tu pantalla."</string>
</resources>
diff --git a/res/values-et/arrays.xml b/res/values-et/arrays.xml
index 63bcbc6..f33792e 100644
--- a/res/values-et/arrays.xml
+++ b/res/values-et/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Lumehelves"</item>
<item msgid="7952183800501346803">"Päikesevari"</item>
<item msgid="799139025758265891">"Õpitoa tööriistad"</item>
- <item msgid="1330084588359129896">"Telk"</item>
+ <item msgid="8112685757657659269">"Klaver"</item>
<item msgid="3861584909935022342">"Filmilint"</item>
<item msgid="5827426100157335512">"Raamat"</item>
<item msgid="8585828346253128384">"Lootoseõis"</item>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 3519af7..84fb991 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Keela Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Keelab funktsiooni Bluetooth LE Audio, kui seade toetab LE Audio riistvara võimalusi."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio režiim"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Kuva seadme üksikasjades LE Audio lüliti"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio lubamisloendist möödaminek"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audiot kasutatakse vaikimisi isegi siis, kui LE Audio välisseadme vastavust lubamisloendi kriteeriumitele pole kinnitatud."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Seadistage automaatselt oma võrgu ja juhtmeta ühenduse signaalide abil"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automaatne ajavöönd"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Seadistage automaatselt enda lähedal olevate mobiilivõrkude põhjal"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Seadistage automaatselt oma seadme asukoha põhjal (kui on saadaval). Vaja võib olla ka aktiivset WiFi-ühendust."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Seadistage automaatselt oma seadme asukoha põhjal (kui on saadaval)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Kasuta lokaadi vaikeseadet"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-tunnise vormingu kasutamine"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Kellaaeg"</string>
@@ -562,7 +566,7 @@
<string name="work_profile_category_header" msgid="85707750968948517">"Tööprofiil"</string>
<string name="private_space_title" msgid="1752064212078238723">"Privaatne ruum"</string>
<string name="private_space_summary" msgid="2274405892301976238">"Hoidke privaatsed rakendused lukustatud ja peidetuna"</string>
- <string name="private_space_description" msgid="4059594203775816136">"Hoidke privaatseid rakendusi eraldi ruumis, mida saate peita või lukustada"</string>
+ <string name="private_space_description" msgid="4059594203775816136">"Hoidke privaatseid rakendusi eraldi ruumis, mida saate peita või lukustada."</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Privaatse ruumi lukk"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Oma privaatse ruumi saate lukust avada samal viisil, nagu avate lukust oma seadme. Võite ka valida muu luku."</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"Seadme ekraaniluku kasutamine"</string>
@@ -624,11 +628,11 @@
<string name="private_space_setup_title" msgid="2272968244329821450">"Privaatne ruum"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Peitke või lukustage privaatsed rakendused eraldi ruumis. Lisaturvalisuse jaoks kasutage spetsiaalselt Google\'i kontot."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Kuidas see toimib?"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Looge oma ruumi jaoks Google\'i konto"</b>\n"Eraldi Google\'i konto kasutamine aitab vältida sünkroonitud failide, fotode ja meilide kuvamist väljaspool teie ruumi"</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Looge oma ruumi jaoks Google\'i konto"</b>\n"Eraldi Google\'i konto kasutamine aitab vältida sünkroonitud failide, fotode ja meilide kuvamist väljaspool teie ruumi."</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Luku seadistamine"</b>\n"Lukustage oma ruum, et teised ei saaks seda avada."</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installige rakendused"</b>\n"Installige rakendused, mille soovite oma ruumis privaatsena hoida"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installige rakendused"</b>\n"Installige rakendused, mille soovite oma ruumis privaatsena hoida."</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Pidage meeles"</string>
- <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Ruumi lukustamisel peatatakse rakendused"</b>\n"Kui lukustate oma ruumi, peatatakse teie ruumis olevad rakendused ja te ei saa neilt märguandeid"</string>
+ <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Ruumi lukustamisel peatatakse rakendused"</b>\n"Kui lukustate oma ruumi, peatatakse teie ruumis olevad rakendused ja te ei saa neilt märguandeid."</string>
<string name="private_space_apps_permission_text" msgid="4416201648436201393">"Privaatsed ruumid ei ole sobilikud rakendustele, mis peavad töötama taustal või saatma kriitilisi märguandeid (nt meditsiinirakendused). Seda seetõttu, et märguanded ja taustategevused peatatakse, kui teie ruum on lukus.\n\nTeie privaatses ruumis olevaid rakendusi ei näidata lubade halduris, privaatsuse juhtpaneelis ja muudes seadetes, kui privaatne ruum on lukus.\n\nPrivaatset ruumi ei saa teisaldada uude seadmesse. Kui soovite seda mõnes teises seadmes kasutada, peate seadistama teise privaatse ruumi.\n\nKõik, kes ühendavad teie seadme arvutiga või installivad teie seadmesse kahjulikke rakendusi, võivad pääseda juurde teie privaatsele ruumile."</string>
<string name="private_space_settings_footer_text" msgid="3742468470394835356">"Privaatsed ruumid ei ole sobilikud rakendustele, mis peavad töötama taustal või saatma kriitilisi märguandeid (nt meditsiinirakendused). Seda seetõttu, et märguanded ja taustategevused peatatakse, kui teie ruum on lukus.\n\nTeie privaatses ruumis olevaid rakendusi ei näidata lubade halduris, privaatsuse juhtpaneelis ja muudes seadetes, kui privaatne ruum on lukus.\n\nPrivaatset ruumi ei saa uues seadmes taastada. Kui soovite seda teises seadmes kasutada, peate seadistama teise ruumi.\n\nKõik, kes ühendavad teie seadme arvutiga või installivad teie seadmesse pahatahtlikke rakendusi, võivad pääseda juurde teie privaatsele ruumile."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Lisateave privaatsete ruumide kohta"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Klaviatuur eirab kiiresti tehtud sama klahvi korduvaid vajutusi"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Põrkeklahvi lävi"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Valige kestus, kui kaua teie klaviatuur korduvaid klahvivajutusi eirab"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Kohandatud"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"kohandatud väärtus"</string>
<string name="slow_keys" msgid="2891452895499690837">"Aeglased klahvid"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Määrab klahvivajutuse aktiveerumiseks kuluva aja"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Nakkeklahvid"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Otseteede puhul klahvide korraga allhoidmise asemel vajutage klahve ükshaaval"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Hiireklahvid"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Kasutage kursori juhtimiseks klaviatuuri"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Hiirega tagurpidi kerimine"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Lehe allapoole liigutamiseks kerige üles"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Vasaku ja parema nupu vahetamine"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Kasutage hiire vasakut nuppu parema nupuna"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Klaviatuuri otseteed"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Kuva otseteede loend"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Tööprofiili klaviatuurid ja tööriistad"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Valige muuteklahvi <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> jaoks uus klahv:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Füüsilise klaviatuuri juurdepääsetavus"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Nakkeklahvid, põrkeklahvid, hiireklahvid"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Korduvad klahvid"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Viivitus enne kordamist"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Kordusmäär"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hoidke klahvi all, et selle tähemärki kuni klahvi vabastamiseni korrata"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Paigutus: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Vaikeseade"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automaatne: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2223,7 +2249,7 @@
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"Pühkige kahe sõrmega üles"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture_talkback" msgid="7422753388389160524">"Pühkige kolme sõrmega üles"</string>
<string name="accessibility_shortcut_edit_dialog_title_software" msgid="6505512764022389951">"Juurdepääsetavuse nupp"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_floating_button" msgid="6266489864614886247">"Puudutage hõljuvat nuppu"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_floating_button" msgid="6266489864614886247">"Puudutage hõljuvat nuppu."</string>
<string name="accessibility_shortcut_edit_dialog_title_software_by_gesture" msgid="4775049370625630546">"Juurdepääsetavuse liigutus"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"Puudutage ekraani allservas juurdepääsetavuse nuppu <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g>. Funktsioonide vahetamiseks puudutage ja hoidke juurdepääsetavuse nuppu."</string>
<string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Tõmmake sõrmega ekraani allservast üles. Funktsioonide vahetamiseks tõmmake sõrmega üles ja hoidke sõrme ekraanil.}other{Tõmmake # sõrmega ekraani allservast üles. Funktsioonide vahetamiseks tõmmake # sõrmega üles ja hoidke sõrmi ekraanil.}}"</string>
@@ -2235,7 +2261,7 @@
<string name="accessibility_feature_shortcut_setting_summary_quick_settings" msgid="7006526933552889373">"Kiirseaded"</string>
<string name="accessibility_shortcut_edit_dialog_title_hardware" msgid="844089763968552142">"Helitugevuse klahvid"</string>
<string name="accessibility_shortcut_hardware_keyword" msgid="2483152542320987022">"helitugevuse klahvid"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_hardware" msgid="2503134386397991634">"Hoidke all mõlemat helitugevuse klahvi"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_hardware" msgid="2503134386397991634">"Hoidke all mõlemat helitugevuse klahvi."</string>
<string name="accessibility_shortcut_edit_screen_title_two_finger_double_tap" msgid="8952595692906527694">"%1$d sõrmega topeltpuudutus"</string>
<string name="accessibility_shortcut_edit_screen_summary_two_finger_double_tap" msgid="385404127425496362">"Puudutage ekraani %1$d sõrmega kiiresti kaks korda"</string>
<string name="accessibility_shortcut_edit_screen_title_triple_tap" msgid="3314488747597058942">"Kolmikpuudutus"</string>
@@ -2361,7 +2387,7 @@
<string name="captioning_appearance_summary" msgid="4620682807315588019">"<xliff:g id="ACCESSIBILITY_FONT_SIZE">%1$s</xliff:g> teksti suurus"</string>
<string name="captioning_more_options_title" msgid="3484496882942539652">"Rohkem valikuid"</string>
<string name="accessibility_captioning_preference_intro" msgid="8995427146374031134">"Kohandage subtiitrite suurust ja stiili, et neid oleks lihtsam lugeda"</string>
- <string name="accessibility_captioning_preference_summary" msgid="8335768472978374255">"Kõik meediarakendused ei toeta neid subtiitrite eelistusi"</string>
+ <string name="accessibility_captioning_preference_summary" msgid="8335768472978374255">"Kõik meediarakendused ei toeta neid subtiitrite eelistusi."</string>
<string name="accessibility_shortcut_type_software" msgid="2552732582767687515">"Juurdepääsetavuse nupp"</string>
<string name="accessibility_shortcut_type_software_gesture" msgid="5608959693931019059">"Kahe sõrmega alt üles pühkimine"</string>
<string name="accessibility_shortcut_type_hardware" msgid="4834144210432451916">"Helitugevuse klahvide allhoidmine"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Eelvaade"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardvalikud"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Keel"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Subtiitrite suurus"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Subtiitri stiil"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Kohandatud valikud"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Tausta värv"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Reguleerige energiakasutust"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Kaasnevad paketid"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Rakendused töötavad tavapäraselt"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Akutase on madal"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Lülitage aku tööea pikendamiseks sisse akusäästja"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Pikendage aku tööiga"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Kas soovite katkestada ühenduse selle VPN-iga?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Katkesta ühendus"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versioon"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versioon <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Unusta VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Kas asendada olemasolev VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Kas määrata alati sisselülitatud VPN?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„9.00–17.00 tööpäevadel”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalendrisündmused"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} on aktiivne}=2{{mode_1} ja {mode_2} on aktiivsed}=3{{mode_1}, {mode_2} ja {mode_3} on aktiivsed}other{{mode_1}, {mode_2} ja veel # režiimi on aktiivsed}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 režiim võib automaatselt sisse lülituda}other{# režiimi võivad automaatselt sisse lülituda}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"SEES"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Määramata"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Keelatud"</string>
@@ -3471,7 +3502,7 @@
<string name="zen_mode_restrict_notifications_custom" msgid="5469078057954463796">"Kohandatud"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="4303255634151330401">"Kohandatud seade lubamine"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="5062332754972217218">"Kohandatud seade eemaldamine"</string>
- <string name="zen_mode_restrict_notifications_summary_muted" msgid="2826459087306271381">"Märguanded on kuvatud"</string>
+ <string name="zen_mode_restrict_notifications_summary_muted" msgid="2826459087306271381">"Märguandeid kuvatakse"</string>
<string name="zen_mode_restrict_notifications_summary_custom" msgid="6455811408721183198">"Märguanded on osaliselt peidetud"</string>
<string name="zen_mode_restrict_notifications_summary_hidden" msgid="2157279412167366119">"Märguanded on peidetud"</string>
<string name="zen_mode_what_to_block_title" msgid="5692710098205334164">"Kohandatud piirangud"</string>
@@ -3841,7 +3872,7 @@
<string name="zen_mode_from_starred_settings" msgid="3389516761063134119">"tärniga tähistatud kontaktide seaded"</string>
<string name="zen_mode_none_calls" msgid="2047166006414016327">"Mitte ükski"</string>
<string name="zen_mode_none_messages" msgid="1386626352943268342">"Mitte ükski"</string>
- <string name="zen_mode_alarms" msgid="5989343060100771099">"Alarmid"</string>
+ <string name="zen_mode_alarms" msgid="5989343060100771099">"Äratused"</string>
<string name="zen_mode_alarms_summary" msgid="3388679177457223967">"Taimeritelt, äratustelt, turvasüsteemidelt ja muudelt rakendustelt"</string>
<string name="zen_mode_alarms_list" msgid="334782233067365405">"äratused"</string>
<string name="zen_mode_alarms_list_first" msgid="2780418316613576610">"Äratused"</string>
@@ -3920,20 +3951,20 @@
<string name="zen_mode_trigger_summary_settings_in_app" msgid="4860667191183702601">"Teave ja seaded rakenduses <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_trigger_summary_managed_by_app" msgid="8631011868193102098">"Haldab <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="zen_mode_confirm_disable_mode_title" msgid="7314998098582325018">"Kas keelata režiim <xliff:g id="MODE_NAME">%1$s</xliff:g>?"</string>
- <string name="zen_mode_confirm_disable_message" msgid="2703882646066764140">"See režiim ei lülitu kunagi sisse, kui see on keelatud"</string>
+ <string name="zen_mode_confirm_disable_message" msgid="2703882646066764140">"See režiim ei lülitu kunagi sisse, kui see on keelatud."</string>
<string name="zen_mode_action_disable" msgid="3552921561331044881">"Keela"</string>
<string name="zen_mode_confirm_enable_mode_title" msgid="6020902148457106017">"Kas lubada režiim <xliff:g id="MODE_NAME">%1$s</xliff:g>?"</string>
- <string name="zen_mode_confirm_enable_message" msgid="8707142927858064775">"See režiim võib oma seadete alusel automaatselt sisse lülituda"</string>
+ <string name="zen_mode_confirm_enable_message" msgid="8707142927858064775">"See režiim võib oma seadete alusel automaatselt sisse lülituda."</string>
<string name="zen_mode_action_enable" msgid="1161480633223176531">"Luba"</string>
- <string name="zen_mode_blurb_schedule_time" msgid="8223898702097484009">"Seadistage režiim, mis järgib tavapärast ajakava"</string>
+ <string name="zen_mode_blurb_schedule_time" msgid="8223898702097484009">"Seadistage režiim, mis järgib tavapärast ajakava."</string>
<string name="zen_mode_blurb_schedule_calendar" msgid="382177907856065945">"Määrake kalendrisündmustega sünkroonimise ja kutsetele vastamise režiim"</string>
<string name="zen_mode_blurb_bedtime" msgid="6155075956151013457">"Looge rahustav unerutiin. Seadistage alarmid, hämardage ekraan ja blokeerige märguanded."</string>
<string name="zen_mode_blurb_driving" msgid="1316054379000667305">"Sõitke keskendunult ja segamatult, et tagada teel ohutus"</string>
<string name="zen_mode_blurb_immersive" msgid="5884004861848687869">"Blokeerige seadme segavad märguanded, et tagada hea keskendumine"</string>
<string name="zen_mode_blurb_theater" msgid="2999237960059524225">"Eemaldage kõik segajad, et tagada vaikne keskkond"</string>
<string name="zen_mode_blurb_managed" msgid="5473921634985032149">"Isikupärastage seadme kasutuskogemust ja seadeid eri kasutajate jaoks"</string>
- <string name="zen_mode_blurb_generic" msgid="3041601339807075625">"Vähendage katkestusi, lubades ainult olulistel inimestel ja rakendustel teiega ühendust võtta"</string>
- <string name="zen_mode_inspiration_schedule_time" msgid="5596540503159096153">"Seadistage režiim, mis järgib tavapärast ajakava"</string>
+ <string name="zen_mode_blurb_generic" msgid="3041601339807075625">"Vähendage katkestusi, lubades ainult olulistel inimestel ja rakendustel teiega ühendust võtta."</string>
+ <string name="zen_mode_inspiration_schedule_time" msgid="5596540503159096153">"Seadistage režiim, mis järgib tavapärast ajakava."</string>
<string name="zen_mode_inspiration_schedule_calendar" msgid="3678727180860212700">"Hoidke oma seade päevasündmustega sünkroonis"</string>
<string name="zen_mode_inspiration_bedtime" msgid="6294822414181670666">"Ärgake üles 100% puhanuna"</string>
<string name="zen_mode_inspiration_driving" msgid="8237825783857483135">"Keskenduge teel olles ennekõike ohutusele"</string>
@@ -5145,7 +5176,7 @@
<string name="wireless_debugging_main_switch_title" msgid="8463499572781441719">"Juhtmevaba silumise kasutamine"</string>
<string name="graphics_driver_main_switch_title" msgid="6125172901855813790">"Graafikadraiveri eelistuste kasutamine"</string>
<string name="night_light_main_switch_title" msgid="3428298022467805219">"Kasuta öövalgust"</string>
- <string name="nfc_main_switch_title" msgid="6295839988954817432">"NFC kasutamine"</string>
+ <string name="nfc_main_switch_title" msgid="6295839988954817432">"Kasuta NFC-d"</string>
<string name="adaptive_brightness_main_switch_title" msgid="2681666805191642737">"Kasuta kohanduvat eredust"</string>
<string name="wifi_calling_main_switch_title" msgid="4070224008346815634">"WiFi-kõnede kasutamine"</string>
<string name="default_see_all_apps_title" msgid="7481113230662612178">"Kuva kõik rakendused"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Ainult seade"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Uusi kontakte ei sünkroonita kontoga"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontaktid salvestatakse teie seadmesse ja sünkroonitakse vaikimisi teie kontoga"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ühtegi vaikekontot pole määratud"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Viga vaikekonto seadistamisel"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ühtegi vaikekontot pole määratud"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Ainult seade"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Lisage alustamiseks konto"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Ring otsimiseks"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Puudutage pikalt avakuva nuppu või navigeerimispidet, et otsida ekraanil oleva sisu järgi."</string>
</resources>
diff --git a/res/values-eu/arrays.xml b/res/values-eu/arrays.xml
index 4ff40ac..6ff3f1b 100644
--- a/res/values-eu/arrays.xml
+++ b/res/values-eu/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Elur-maluta"</item>
<item msgid="7952183800501346803">"Eguzkitakoa"</item>
<item msgid="799139025758265891">"Lantegiko tresnak"</item>
- <item msgid="1330084588359129896">"Kanpin-denda"</item>
+ <item msgid="8112685757657659269">"Pianoa"</item>
<item msgid="3861584909935022342">"Film-bobina"</item>
<item msgid="5827426100157335512">"Liburua"</item>
<item msgid="8585828346253128384">"Loto-lorea"</item>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 764255f..74ac87c 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Desgaitu kontsumo txikiko Bluetooth bidezko audioa"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Kontsumo txikiko Bluetooth bidezko audioa darabilten hardware-gaitasunak gailuarekin bateragarriak badira, Kontsumo txikiko Bluetooth bidezko audioa eginbidea desgaitzen du."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Kontsumo txikiko Bluetooth bidezko audioaren modua"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Erakutsi kontsumo txikiko audioaren etengailua gailuaren xehetasunetan"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Ez aplikatu kontsumo txikiko Bluetooth bidezko audioaren baimendutakoen zerrenda"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Erabili kontsumo txikiko audioa modu lehenetsian, hura darabilen gailu periferikoak baimendutakoen zerrendako irizpideak betetzen dituen egiaztatu ez bada ere."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Ezarri automatikoki sarea eta hari gabeko seinaleak erabilita"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Ordu-zona automatikoa"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Ezarri automatikoki inguruko sare mugikorretan oinarrituta"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Ezarri automatikoki gailuaren kokapena erabilita, halakorik badago. Baliteke wifi-konexio aktibo bat ere behar izatea."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Ezarri automatikoki gailuaren kokapena erabilita, halakorik badago"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Erabili lurraldeko ezarpen lehenetsiak"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Erabili 24 orduko formatua"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Ordua"</string>
@@ -414,11 +418,11 @@
<string name="security_settings_fingerprint_single_face_watch_preference_summary" msgid="764951912234638192">"Gehitu dira aurpegia, hatz-marka eta <xliff:g id="WATCH">%s</xliff:g> erlojua"</string>
<string name="security_settings_fingerprint_multiple_face_watch_preference_summary" msgid="3935500711366489380">"Gehitu dira aurpegia, hatz-markak eta <xliff:g id="WATCH">%s</xliff:g> erlojua"</string>
<string name="mandatory_biometrics_prompt_description" msgid="6790144699440050735">"Identitate-egiaztapena aktibatuta dago eta sistema biometriko bat behar du"</string>
- <string name="go_to_settings" msgid="4394928396153474179">"Joan ezarpenetara"</string>
+ <string name="go_to_settings" msgid="4394928396153474179">"Joan Ezarpenak atalera"</string>
<string name="identity_check_lockout_error_title" msgid="7486409651908283892">"Identitate-egiaztapena aktibatuta dago eta ezin du egiaztatu zu zarenik"</string>
<string name="identity_check_lockout_error_description_1" msgid="4882147327291296884">"Sistema biometrikoak gehiegitan huts egin du. Berriro saiatzeko, blokeatu eta desblokeatu gailua berriro."</string>
<string name="identity_check_lockout_error_two_factor_auth_description_1" msgid="8369894114882274736">"Sistema biometrikoak gehiegitan huts egin du. Saiatu berriro."</string>
- <string name="identity_check_lockout_error_description_2" msgid="5512321457771307067">"Identitate-egiaztapena lapurreten aurkako babesaren ezarpenetan kudea dezakezu. Joan ezarpenetara"</string>
+ <string name="identity_check_lockout_error_description_2" msgid="5512321457771307067">"Identitate-egiaztapena lapurreten aurkako babesaren ezarpenetan kudea dezakezu. Joan Ezarpenak atalera"</string>
<string name="identity_check_general_error_title" msgid="5073929400896102674">"Aurrera egiteko, sistema biometriko bat behar da"</string>
<string name="identity_check_general_error_description_1" msgid="5260846996256699095">"Identitate-egiaztapena aktibatuta dago eta sistema biometriko bat behar du, baina aurpegiaren edo hatz-marken sentsorea ez dago erabilgarri.\n"<ul><li>"Egiaztatu kamera aktibatuta dagoela eta saiatu berriro."</li>\n<li>"Identitate-egiaztapena desaktibatzeko, joan Google Kontua atalera."</li></ul></string>
<string name="identity_check_biometric_error_cancel" msgid="3353689146211669291">"Utzi"</string>
@@ -629,7 +633,7 @@
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instalatu aplikazioak"</b>\n"Instalatu zure eremuan eduki nahi dituzun aplikazio pribatuak"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Gogoratu"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Aplikazioak gelditu egiten dira eremua blokeatzen duzunean"</b>\n"Eremua blokeatzen duzunean, bertan dauzkazun aplikazioak gelditu egiten dira, eta haien jakinarazpenak jasotzeari uzten diozu"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Eremu pribatuak ez dira egokiak atzeko planoan exekutatu behar diren edo funtsezko jakinarazpenak bidali behar dituzten aplikazioetarako (adibidez, medikuntza-aplikazioak). Izan ere, jakinarazpenak eta atzeko planoko jarduerak gelditu egiten dira eremua blokeatuta dagoenean.\n\nZure eremu pribatuko aplikazioak ez dira agertuko baimenen kudeatzailean, pribatutasun-panelean eta beste ezarpenetan eremu pribatua blokeatuta dagoenean.\n\nEremu pribatua ezin da eraman beste gailu batera. Eremu pribatua beste gailu batean erabili nahi baduzu, beste bat konfiguratu beharko duzu.\n\nBaliteke zure gailua ordenagailu batekin konektatzen duten edo gailuan aplikazio kaltegarriak instalatzen dituzten guztiek zure eremu pribatua atzitu ahal izatea."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Eremu pribatuak ez dira egokiak atzeko planoan exekutatu behar diren edo jakinarazpen larriak bidali behar dituzten aplikazioetarako (adibidez, medikuntza-aplikazioak). Izan ere, jakinarazpenak eta atzeko planoko jarduerak gelditu egiten dira eremua blokeatuta dagoenean.\n\nZure eremu pribatuko aplikazioak ez dira agertuko baimenen kudeatzailean, pribatutasun-panelean eta beste ezarpenetan eremu pribatua blokeatuta dagoenean.\n\nEremu pribatua ezin da eraman beste gailu batera. Eremu pribatua beste gailu batean erabili nahi baduzu, beste bat konfiguratu beharko duzu.\n\nBaliteke zure gailua ordenagailu batekin konektatzen duten edo gailuan aplikazio kaltegarriak instalatzen dituzten guztiek zure eremu pribatua atzitu ahal izatea."</string>
<string name="private_space_settings_footer_text" msgid="3742468470394835356">"Eremu pribatuak ez dira egokiak atzeko planoan exekutatu behar diren edo funtsezko jakinarazpenak bidali behar dituzten aplikazioetarako (adibidez, medikuntza-aplikazioak). Izan ere, jakinarazpenak eta atzeko planoko jarduerak gelditu egiten dira eremua blokeatuta dagoenean.\n\nZure eremu pribatuko aplikazioak ez dira agertuko baimenen kudeatzailean, pribatutasun-panelean eta beste ezarpenetan eremu pribatua blokeatuta dagoenean.\n\nEremu pribatua ezin da leheneratu beste gailu batean. Eremua beste gailu batean erabili nahi baduzu, beste bat konfiguratu beharko duzu.\n\nBaliteke zure gailua ordenagailu batekin konektatzen duten edo gailuan asmo txarreko aplikazioak instalatzen dituzten guztiek zure eremu pribatua atzitu ahal izatea."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Lortu eremu pribatuari buruzko informazio gehiago"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Une bat beharko da"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Erabilerraztasuna"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Teklatu fisikoa"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Errebote-teklak"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Teklatuak ez ikusi egiten du tekla bera behin eta berriro bizkor sakatzen bada"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Tekla-sakatze errepikatuen atalasea"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Aukeratu zer iraupenarekin egiten duen teklatuak ez ikusi tekla bera behin eta berriro sakatzen bada"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Pertsonalizatua"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"balio pertsonalizatua"</string>
<string name="slow_keys" msgid="2891452895499690837">"Tekla motelak"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Tekla bat sakatzean aktibatzeko behar den denbora doitzen du"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Tekla itsaskorrak"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Lasterbideetan, sakatu teklak banan-banan, guztiak aldi berean sakatu ordez"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Saguaren teklak"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Erabili teklatua erakuslea kontrolatzeko"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Saguarekin gora eta behera alderantziz egiteko aukera"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Egin gora orria beherantz mugitzeko"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Aldatu ezkerreko eta eskuineko botoiak"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Erabili saguaren ezkerreko botoia eskuinekoa balitz bezala"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Lasterbideak"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Erakutsi lasterbideen zerrenda"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Aukeratu <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> teklarako beste tekla bat:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Teklatu fisikoaren erabilerraztasuna"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Tekla itsaskorrak, errebote-teklak, saguaren teklak"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Errepikatutako teklak"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Errepikatu aurreko tartea"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Errepikapen-abiadura"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Eduki sakatuta tekla bat, eta askatu arte errepikatuko da haren karakterea"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> teklatuaren diseinua"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Lehenetsia"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatikoa: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Aurreikusi"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Aukera estandarrak"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Hizkuntza"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Azpitituluen tamaina"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Azpitituluen estiloa"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Aukera pertsonalizatuak"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Atzeko planoaren kolorea"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Doitu energia-erabilera"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Sartutako paketeak"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikazioak ohiko moduan dabiltza"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Bateria-maila baxua"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Aktibatu Bateria-aurreztailea bateriaren iraupena luzatzeko"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Hobetu bateriaren iraupena"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"VPN saretik deskonektatu nahi duzu?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Deskonektatu"</string>
<string name="vpn_version" msgid="6344167191984400976">"Bertsioa"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g> bertsioa"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Ahaztu VPN konexioa"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Dagoen VPN konexioa ordeztu nahi duzu?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPNa beti aktibatuta egoteko aukera ezarri nahi duzu?"</string>
@@ -3100,7 +3122,7 @@
<string name="emergency_info_summary" msgid="8463622253016757697">"Datuak eta kontaktuak (<xliff:g id="USER_NAME">%1$s</xliff:g>)"</string>
<string name="open_app_button" msgid="5025229765547191710">"Ireki <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="application_restrictions" msgid="276179173572729205">"Baimendu aplikazioak eta edukia"</string>
- <string name="apps_with_restrictions_header" msgid="5277698582872267931">"Murrizketak dituzten aplikazioak"</string>
+ <string name="apps_with_restrictions_header" msgid="5277698582872267931">"Murriztapenak dituzten aplikazioak"</string>
<string name="apps_with_restrictions_settings_button" msgid="2648355133416902221">"Zabaldu aplikazio-ezarpenak"</string>
<string name="user_choose_copy_apps_to_another_user" msgid="5914037067347012870">"Aukeratu instalatu nahi dituzun aplikazioak"</string>
<string name="user_copy_apps_menu_title" msgid="5354300105759670300">"Instalatu aplikazio erabilgarriak"</string>
@@ -3134,7 +3156,7 @@
<string name="nfc_payment_btn_text_update" msgid="5159700960497443832">"Eguneratu"</string>
<string name="nfc_work_text" msgid="2496515165821504077">"Lanekoak"</string>
<string name="restriction_settings_title" msgid="4293731103465972557">"Murriztapenak"</string>
- <string name="restriction_menu_reset" msgid="92859464456364092">"Kendu murrizketak"</string>
+ <string name="restriction_menu_reset" msgid="92859464456364092">"Kendu murriztapenak"</string>
<string name="restriction_menu_change_pin" msgid="2505923323199003718">"Aldatu PINa"</string>
<string name="help_label" msgid="2896538416436125883">"Laguntza eta iritziak"</string>
<string name="user_account_title" msgid="6389636876210834864">"Edukia gordetzeko kontua"</string>
@@ -3175,7 +3197,7 @@
<string name="work_sim_title" msgid="8999872928646924429">"Laneko SIM txartela"</string>
<string name="user_restrictions_title" msgid="4068914244980335993">"Eduki eta aplikazioetarako sarbidea"</string>
<string name="user_rename" msgid="8735940847878484249">"ALDATU IZENA"</string>
- <string name="app_restrictions_custom_label" msgid="6949268049087435132">"Ezarri murrizketak aplikazioei"</string>
+ <string name="app_restrictions_custom_label" msgid="6949268049087435132">"Ezarri murriztapenak aplikazioei"</string>
<string name="user_restrictions_controlled_by" msgid="2821526006742851624">"<xliff:g id="APP">%1$s</xliff:g> aplikazioak kontrolatua"</string>
<string name="app_sees_restricted_accounts" msgid="3526008344222566318">"Aplikazioak zure kontuak atzi ditzake"</string>
<string name="app_sees_restricted_accounts_and_controlled_by" msgid="8338520379923447143">"Aplikazio honek zure kontuak atzi ditzake. <xliff:g id="APP">%1$s</xliff:g> aplikazioak kontrolatua."</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"09:00-17:00, astegunetan\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Egutegiko gertaerak"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{\"{mode_1}\" aktibo dago}=2{\"{mode_1}\" eta \"{mode_2}\" aktibo daude}=3{\"{mode_1}\", \"{mode_2}\" eta \"{mode_3}\" aktibo daude}other{\"{mode_1}\", \"{mode_2}\" eta beste # aktibo daude}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modu aktiba daiteke automatikoki}other{# modu aktiba daitezke automatikoki}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AKTIBATUTA"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ezarri gabe"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Desgaituta"</string>
@@ -3482,7 +3505,7 @@
<string name="zen_mode_restrict_notifications_summary_muted" msgid="2826459087306271381">"Erakutsi jakinarazpenak"</string>
<string name="zen_mode_restrict_notifications_summary_custom" msgid="6455811408721183198">"Jakinarazpenak partzialki ezkutatuta"</string>
<string name="zen_mode_restrict_notifications_summary_hidden" msgid="2157279412167366119">"Ezkutatu jakinarazpenak"</string>
- <string name="zen_mode_what_to_block_title" msgid="5692710098205334164">"Murrizketa pertsonalizatuak"</string>
+ <string name="zen_mode_what_to_block_title" msgid="5692710098205334164">"Murriztapen pertsonalizatuak"</string>
<string name="zen_mode_block_effects_screen_on" msgid="8780668375194500987">"Pantaila piztuta dagoenean"</string>
<string name="zen_mode_block_effects_screen_off" msgid="2291988790355612826">"Pantaila itzalita dagoenean"</string>
<string name="zen_mode_block_effect_sound" msgid="7929909410442858327">"Desaktibatu soinua eta dardara"</string>
@@ -3919,7 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Sortu modu bat"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Modu pertsonalizatua"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Moduaren izena"</string>
- <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Moduaren izenak ezin du hutsik egon"</string>
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Moduaren izena ezin da hutsik egon"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Aukeratu ikono bat"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Egutegiko gertaerak"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Lo egiteko garaiko ohitura"</string>
@@ -4124,7 +4147,7 @@
<string name="assist_access_screenshot_summary" msgid="5276593070956201863">"Eman pantailako irudi bat erabiltzeko baimena laguntza-aplikazioari"</string>
<string name="assist_flash_title" msgid="5449512572885550108">"Distirarazi pantaila"</string>
<string name="assist_flash_summary" msgid="3032289860177784594">"Distirarazi pantailaren ertzak laguntza-aplikazioak pantailako edo pantaila-argazkiko testua erabiltzen duenean"</string>
- <string name="assist_footer" msgid="8248015363806299068">"Laguntza-aplikazioek ikusten ari zaren pantailako informazioaren araberako laguntza eskain diezazukete. Zenbait aplikaziok abiarazlea eta ahots bidezko zerbitzuak onartzen dituzte laguntza integratua eskaintzeko."</string>
+ <string name="assist_footer" msgid="8248015363806299068">"Laguntza-aplikazioek ikusten ari zaren pantailako informazioaren araberako laguntza eskain diezazukete. Zenbait aplikaziok exekutatzeko tresna eta ahots bidezko zerbitzuak onartzen dituzte laguntza integratua eskaintzeko."</string>
<string name="average_memory_use" msgid="717313706368825388">"Batez best. memoria-erabilera"</string>
<string name="maximum_memory_use" msgid="2171779724001152933">"Gehieneko memoria-erabilera"</string>
<string name="memory_usage" msgid="5594133403819880617">"Memoriaren erabilera"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Bilatu ezarpenetan"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontaktuak, biltegia, kontua"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontaktuen biltegia"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ez da ezarri kontu lehenetsirik"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Gailua soilik"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Kontaktu berriak ez dira sinkronizatuko kontu batekin"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontaktuak gailuan gordeko dira, eta modu lehenetsian kontuarekin sinkronizatuko"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Errore bat gertatu da kontu lehenetsia ezartzean"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ez da ezarri kontu lehenetsirik"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Gailua soilik"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Hasteko, gehitu kontu bat"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Inguratu bilatzeko"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Pantailako edukia erabilita bilaketa egiteko, eduki sakatuta orri nagusira joateko botoia edo nabigazioaren kontrol-puntua."</string>
</resources>
diff --git a/res/values-fa/arrays.xml b/res/values-fa/arrays.xml
index aa67b97..ac5cd80 100644
--- a/res/values-fa/arrays.xml
+++ b/res/values-fa/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"دانه برف"</item>
<item msgid="7952183800501346803">"چتر ساحلی"</item>
<item msgid="799139025758265891">"ابزارهای کارگاه"</item>
- <item msgid="1330084588359129896">"چادر"</item>
+ <item msgid="8112685757657659269">"پیانو"</item>
<item msgid="3861584909935022342">"حلقه فیلم"</item>
<item msgid="5827426100157335512">"کتاب"</item>
<item msgid="8585828346253128384">"گل نیلوفر آبی"</item>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index f39f13e..a3e51e7 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"غیرفعال کردن «صدای بلوتوث کممصرف»"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"اگر دستگاه از ویژگیهای سختافزار «صدای کممصرف» پشتیبانی کند، ویژگی «صدای بلوتوث کممصرف» را غیرفعال میکند."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"حالت «صدای بلوتوث کممصرف»"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"نمایش تنظیم «صدای کممصرف» در جزئیات دستگاه"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"کنار گذاشتن فهرست «صدای بلوتوث کممصرف» مجاز"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"استفاده از «صدای کممصرف» بهطور پیشفرض حتی درصورتیکه دستگاه جانبی مجهز به «صدای کممصرف» ازلحاظ مطابقت با معیارهای «فهرست مجازها» تأیید نشده باشد"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"بهطور خودکار بااستفاده از سیگنالهای شبکه و بیسیم تنظیم میشود"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"منطقه زمانی خودکار"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"بهطور خودکار براساس شبکههای تلفن همراه اطرافتان تنظیم میشود"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"بهطور خودکار با مکان دستگاه (اگر دردسترس باشد) تنظیم میشود. شاید اتصال فعال Wi-Fi نیز لازم باشد."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"بهطور خودکار با مکان دستگاه (اگر دردسترس باشد) تنظیم میشود"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"استفاده از پیشفرض منطقه زبانی"</string>
<string name="date_time_24hour" msgid="286679379105653406">"استفاده از قالب ۲۴ ساعته"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"زمان"</string>
@@ -569,7 +573,7 @@
<string name="private_space_biometric_title" msgid="3934339826674553174">"قفلگشایی با اثر انگشت و چهره"</string>
<string name="private_space_fingerprint_title" msgid="5989254643211889931">"قفلگشایی با اثر انگشت"</string>
<string name="private_space_face_title" msgid="3290402865367663079">"قفلگشایی با چهره"</string>
- <string name="private_space_biometric_summary" msgid="4403837276018724581">"برای راهاندازی تکضرب بزنید"</string>
+ <string name="private_space_biometric_summary" msgid="4403837276018724581">"برای راهاندازی، تکضرب بزنید"</string>
<string name="private_space_fingerprint_unlock_title" msgid="3614016453395789051">"قفلگشایی با اثر انگشت برای فضای خصوصی"</string>
<string name="private_space_face_unlock_title" msgid="462248384776453613">"قفلگشایی با چهره برای فضای خصوصی"</string>
<string name="private_space_biometric_unlock_title" msgid="1978145237698659673">"قفلگشایی با اثر انگشت و چهره برای فضای خصوصی"</string>
@@ -625,8 +629,8 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"برنامههای خصوصی را در فضای جداگانهای پنهان یا قفل کنید. برای امنیت بیشتر، از یک «حساب Google» اختصاصی استفاده کنید."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"روش کار"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320">""<b>"ایجاد «حساب Google» برای فضا"</b>\n"اگر از حساب اختصاصی استفاده کنید، این کار کمک میکند فایلها، عکسها، و ایمیلهای همگامسازیشده در خارج از فضای شما نشان داده نشود"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"تنظیم قفل"</b>\n"فضایتان را قفل کنید تا دیگران نتوانند آن را باز نکنند"</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"نصب برنامه"</b>\n"برنامههایی را که میخواهید در فضایتان بهصورت خصوصی حفظ شود نصب کنید"</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"تنظیم قفل"</b>\n"میتوانید فضا را قفل کنید تا دیگران نتوانند آن را باز نکنند"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"نصب برنامه"</b>\n"برنامههایی را که میخواهید در فضا بهصورت خصوصی نگه دارید نصب کنید"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"بهخاطر داشته باشید"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"برنامهها هنگام قفل کردن فضا متوقف میشوند"</b>\n"وقتی فضای خود را قفل میکنید، برنامههای موجود در فضا متوقف میشوند و اعلانی از آنها دریافت نخواهید کرد"</string>
<string name="private_space_apps_permission_text" msgid="4416201648436201393">"فضاهای خصوصی برای برنامههایی که لازم است در پسزمینه اجرا شوند یا اعلانهای مهم ارسال کنند (مانند برنامههای پزشکی) مناسب نیستند. زیرا وقتی فضای شما قفل باشد، اعلانها و فعالیت پسزمینه متوقف میشود.\n\nوقتی فضای خصوصی شما قفل است، برنامههای موجود در فضای خصوصی شما در مدیر اجازهها، داشبورد حریم خصوصی، و تنظیمات دیگر نشان داده نمیشود.\n\nفضای خصوصی را نمیتوان به دستگاه جدید منتقل کرد. اگر میخواهید از آن در دستگاه دیگری استفاده کنید، باید فضای خصوصی دیگری راهاندازی کنید.\n\nهر کسی که دستگاه شما را به رایانه متصل کند یا برنامههای مخرب در دستگاهتان نصب کند ممکن است بتواند به فضای خصوصی شما دسترسی داشته باشد."</string>
@@ -1385,7 +1389,7 @@
<string name="module_version" msgid="1787518340082046658">"بهروزرسانی سیستم Google Play"</string>
<string name="battery_info" msgid="7873528123969546728">"اطلاعات باتری"</string>
<string name="device_info_not_available" msgid="4804474466616712326">"موجود نیست"</string>
- <string name="storage_settings" msgid="7472188817781592677">"حافظه"</string>
+ <string name="storage_settings" msgid="7472188817781592677">"فضای ذخیرهسازی"</string>
<string name="storage_settings_for_app" msgid="229425418984637483">"فضای ذخیرهسازی و حافظه پنهان"</string>
<string name="storage_settings_title" msgid="486118156723194815">"تنظیمات ذخیرهسازی"</string>
<string name="status_eid" msgid="3588471107671992684">"سند شناسایی جاسازیشده (EID)"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"دسترسپذیری"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"صفحهکلید فیزیکی"</string>
<string name="bounce_keys" msgid="7419450970351743904">"کلیدهای واگشت"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"صفحهکلید فشردنهای تکراری و سریع یک کلید را نادیده میگیرد"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"آستانه کلیدهای ضدتکرار"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"مدت زمانی را که صفحهکلید شما فشردنهای تکراری کلید را نادیده میگیرد انتخاب کنید"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"۰٫۲ ثانیه"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"۰٫۴ ثانیه"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"۰٫۶ ثانیه"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"سفارشی"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"مقدار سفارشی"</string>
<string name="slow_keys" msgid="2891452895499690837">"کلیدهای آهسته"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"فاصله زمانی بین فشردن کلید و فعالسازی آن را تنظیم میکند"</string>
<string name="sticky_keys" msgid="7317317044898161747">"کلیدهای چسبان"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"بهجای اینکه چند کلید را بهطور همزمان پایین نگه دارید، هربار یک کلید را برای میانبرها فشار دهید"</string>
<string name="mouse_keys" msgid="6237254627808525540">"کلیدهای موشواره"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"استفاده از صفحهکلید برای کنترل کردن اشارهگر"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"پیمایش معکوس موشواره"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"برای رفتن بهپایین صفحه، بهبالا پیمایش کنید"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"جابهجا کردن دکمههای چپ و راست"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"استفاده از دکمه چپ موشواره بهعنوان کلیک راست"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"میانبرهای صفحهکلید"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"نمایش فهرست میانبرها"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"کلید جدیدی برای <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> انتخاب کنید:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"دسترسپذیری صفحهکلید فیزیکی"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"کلیدهای چسبان، کلیدهای کمانهای، کلیدهای موشواره"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"تکرار کردن کلیدها"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"تأخیر پیشاز تکرار"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"سرعت تکرار"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"با نگه داشتن کلید، نویسه آن تا زمانیکه آن را رها نکنید تکرار میشود"</string>
<string name="ime_label_title" msgid="8994569521516807168">"چیدمان <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"پیشفرض"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"خودکار: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2216,7 +2234,7 @@
<string name="accessibility_tutorial_dialog_tripletap_instruction" msgid="7549293553589934">"برای راهاندازی یا متوقف کردن درشتنمایی، سریع %1$d بار روی صفحهنمایش تکضرب بزنید"</string>
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction" msgid="1007756360115974649">"برای راهاندازی یا متوقف کردن درشتنمایی، سریع با %1$d انگشت دوبار روی صفحهنمایش تکضرب بزنید"</string>
<string name="accessibility_tutorial_dialog_message_quick_setting" msgid="3715446725334547432">"{count,plural, =1{برای استفاده از این ویژگی، از بالای صفحهنمایش تند بهپایین بکشید. سپس، کاشی {featureName} را پیدا کنید.}one{برای استفاده از این ویژگی، با # انگشت از بالای صفحهنمایش تند بهپایین بکشید. سپس، کاشی {featureName} را پیدا کنید.}other{برای استفاده از این ویژگی، با # انگشت از بالای صفحهنمایش تند بهپایین بکشید. سپس، کاشی {featureName} را پیدا کنید.}}"</string>
- <string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw" msgid="3847728530771929959">"این میانبر پساز تکمیل راهاندازی دستگاه دردسترس خواهد بود."</string>
+ <string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw" msgid="3847728530771929959">"این میانبر پساز تمام کردن راهاندازی دستگاه دردسترس خواهد بود."</string>
<string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"برای استفاده از این ویژگی، با ۲ انگشت از پایین صفحه تند بهبالا بکشید.\n\nبرای جابهجایی بین ویژگیها، با ۲ انگشت تند بهبالا بکشید و نگه دارید."</string>
<string name="accessibility_tutorial_dialog_gesture_shortcut_instruction" msgid="7349950768250852308">"{count,plural, =1{برای استفاده از این ویژگی، از پایین صفحهنمایش تند بهبالا بکشید}one{برای استفاده از این ویژگی، با # انگشت از پایین صفحهنمایش تند بهبالا بکشید}other{برای استفاده از این ویژگی، با # انگشت از پایین صفحهنمایش تند بهبالا بکشید}}"</string>
<string name="accessibility_tutorial_dialog_message_gesture_talkback" msgid="8142847782708562793">"برای استفاده از این ویژگی، با ۳ انگشت از پایین صفحه تند بهبالا بکشید.\n\nبرای جابهجایی بین ویژگیها، با ۳ انگشت تند بهبالا بکشید و نگه دارید."</string>
@@ -2239,7 +2257,7 @@
<string name="footer_learn_more_content_description" msgid="8843798273152131341">"درباره <xliff:g id="SERVICE">%1$s</xliff:g> بیشتر بدانید"</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"تنظیمات فوری"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings" msgid="739883998754165940">"{count,plural, =1{از بالای صفحهنمایش تند بهپایین بکشید}one{از بالای صفحهنمایش با # انگشت تند بهپایین بکشید}other{از بالای صفحهنمایش با # انگشت تند بهپایین بکشید}}"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw" msgid="4216628328191609785">"{count,plural, =1{از بالای صفحهنمایش تند بهپایین بکشید. این میانبر پساز تکمیل راهاندازی دستگاه دردسترس خواهد بود.}one{از بالای صفحهنمایش با # انگشت تند بهپایین بکشید. این میانبر پساز تکمیل راهاندازی دستگاه دردسترس خواهد بود.}other{از بالای صفحهنمایش با # انگشت تند بهپایین بکشید. این میانبر پساز تکمیل راهاندازی دستگاه دردسترس خواهد بود.}}"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw" msgid="4216628328191609785">"{count,plural, =1{از بالای صفحهنمایش تند بهپایین بکشید. این میانبر پساز تمام کردن راهاندازی دستگاه دردسترس خواهد بود.}one{از بالای صفحهنمایش با # انگشت تند بهپایین بکشید. این میانبر پساز تمام کردن راهاندازی دستگاه دردسترس خواهد بود.}other{از بالای صفحهنمایش با # انگشت تند بهپایین بکشید. این میانبر پساز تمام کردن راهاندازی دستگاه دردسترس خواهد بود.}}"</string>
<string name="accessibility_feature_shortcut_setting_summary_quick_settings" msgid="7006526933552889373">"تنظیمات فوری"</string>
<string name="accessibility_shortcut_edit_dialog_title_hardware" msgid="844089763968552142">"کلیدهای میزان صدا"</string>
<string name="accessibility_shortcut_hardware_keyword" msgid="2483152542320987022">"کلیدهای میزان صدا"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"پیشنمایش"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"گزینههای استاندارد"</string>
<string name="captioning_locale" msgid="5533303294290661590">"زبان"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"اندازه زیرنویس ناشنوایان"</string>
<string name="captioning_preset" msgid="4174276086501638524">"سبک زیرنویس"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"گزینههای سفارشی"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"رنگ پسزمینه"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"تنظیم استفاده از نیرو"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"شامل بسته ها"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"برنامهها عادی اجرا میشوند"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"میزان شارژ باتری کم است"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"برای افزایش عمر باتری، «بهینهسازی باتری» را روشن کنید"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"بهبود عمر باتری"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"اتصال به این VPN.قطع شود؟"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"قطع ارتباط"</string>
<string name="vpn_version" msgid="6344167191984400976">"نسخه"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"نسخه <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"فراموش کردن VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"VPN موجود جایگزین شود؟"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN همیشه روشن تنظیم شود؟"</string>
@@ -3208,7 +3230,7 @@
<string name="sim_status_title_sim_slot" msgid="4932996839194493313">"وضعیت سیمکارت (شیار سیمکارت %1$d)"</string>
<string name="sim_signal_strength" msgid="6351052821700294501">"<xliff:g id="DBM">%1$d</xliff:g> dBm <xliff:g id="ASU">%2$d</xliff:g> asu"</string>
<string name="sim_notification_title" msgid="6839556577405929262">"سیمکارتها تغییر کرد"</string>
- <string name="sim_notification_summary" msgid="5593339846307029991">"برای راهاندازی تکضرب بزنید"</string>
+ <string name="sim_notification_summary" msgid="5593339846307029991">"برای راهاندازی، تکضرب بزنید"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="3077694594349657933">"هر بار پرسیده شود"</string>
<string name="sim_selection_required_pref" msgid="231437651041498359">"انتخاب مورد نیاز است"</string>
<string name="sim_selection_channel_title" msgid="3193666315607572484">"انتخاب سیمکارت"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"«۹ صبح تا ۵ عصر روزهای هفته»"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"رویدادهای تقویم"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} فعال است}=2{{mode_1} و {mode_2} فعال هستند}=3{{mode_1}، {mode_2}، و {mode_3} فعال هستند}one{{mode_1}، {mode_2}، و # حالت دیگر فعال هستند}other{{mode_1}، {mode_2}، و # حالت دیگر فعال هستند}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{۱ حالت میتواند بهطور خودکار روشن شود}one{# حالت میتواند بهطور خودکار روشن شود}other{# حالت میتواند بهطور خودکار روشن شود}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"روشن"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"تنظیم نشده است"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"غیرفعال شده"</string>
@@ -3701,7 +3724,7 @@
<string name="notif_type_silent" msgid="6273951794420331010">"بیصدا"</string>
<string name="notif_type_silent_summary" msgid="7820923063105060844">"اعلانهایی که همیشه بیصدا هستند و نمیلرزند"</string>
<string name="notification_listener_allowed" msgid="5536962633536318551">"مجاز"</string>
- <string name="notification_listener_not_allowed" msgid="3352962779597846538">"مجاز نبودن"</string>
+ <string name="notification_listener_not_allowed" msgid="3352962779597846538">"مجاز نیست"</string>
<string name="notif_listener_excluded_app_title" msgid="6679316209330349730">"مشاهده همه برنامهها"</string>
<string name="notif_listener_excluded_app_summary" msgid="2914567678047195396">"تغییر دادن تنظیمات هر برنامهای که اعلان ارسال میکند"</string>
<string name="notif_listener_excluded_app_screen_title" msgid="8636196723227432994">"برنامههایی که در دستگاه نشان داده میشوند"</string>
@@ -4403,7 +4426,7 @@
<string name="dark_theme_slice_title" msgid="4684222119481114062">"زمینه تاریک را امتحان کنید"</string>
<string name="dark_theme_slice_subtitle" msgid="5555724345330434268">"به افزایش عمر باتری کمک میکند"</string>
<string name="quick_settings_developer_tiles" msgid="7336007844525766623">"کاشیهای برنامهنویسی تنظیمات سریع"</string>
- <string name="adb_authorization_timeout_title" msgid="6996844506783749754">"غیرفعال کردن درنگ مجوز adb"</string>
+ <string name="adb_authorization_timeout_title" msgid="6996844506783749754">"غیرفعال کردن مهلت مجوز adb adb"</string>
<string name="adb_authorization_timeout_summary" msgid="409931540424019778">"فسخ خودکار مجوزهای ADB (پل اشکالزدایی Android) برای سیستمهایی که ظرف مدت زمان پیشفرض (۷ روز) یا پیکربندیشده توسط کاربر (حداقل ۱ روز) دوباره متصل نشدهاند، غیرفعال شود."</string>
<string name="sensors_off_quick_settings_title" msgid="8472151847125917167">"حسگرها خاموش است"</string>
<string name="managed_profile_settings_title" msgid="3400923723423564217">"تنظیمات نمایه کاری"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"جستجو در «تنظیمات»"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"مخاطبین، فضای ذخیرهسازی، حساب"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"فضای ذخیرهسازی مخاطبین"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"حساب پیشفرضی تنظیم نشده است"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"فقط دستگاه"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"مخاطبین جدید با هیچ حسابی همگامسازی نمیشوند"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"مخاطبین بهطور پیشفرض در دستگاه شما ذخیره میشوند و با حسابتان همگامسازی میشوند"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"خطا هنگام تنظیم حساب پیشفرض"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"حساب پیشفرضی تنظیم نشده است"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"فقط دستگاه"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"برای شروع، حسابی اضافه کنید"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"حلقه جستجو"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"برای جستجو بااستفاده از محتوای روی صفحه، دکمه «صفحه اصلی» یا دستگیره پیمایش را لمس کنید و نگه دارید."</string>
</resources>
diff --git a/res/values-fi/arrays.xml b/res/values-fi/arrays.xml
index 8cb72b4..d5f6b29 100644
--- a/res/values-fi/arrays.xml
+++ b/res/values-fi/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Lumihiutale"</item>
<item msgid="7952183800501346803">"Rantavarjo"</item>
<item msgid="799139025758265891">"Työkalut"</item>
- <item msgid="1330084588359129896">"Teltta"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Vanha kotivideo"</item>
<item msgid="5827426100157335512">"Kirja"</item>
<item msgid="8585828346253128384">"Lootuskukka"</item>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 6b40627..141a667 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Poista Bluetooth LE audio käytöstä"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Poistaa Bluetooth LE ‑audio-ominaisuuden käytöstä, jos laite tukee LE-audiolaitteistoja"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio ‑tila"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Näytä LE Audio ‑valitsin laitetiedoissa"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Ohita Bluetooth LE Audio ‑sallitut"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Käytä oletuksena LE Audiota, vaikka LE Audio ‑lisälaitteen ei olisi vahvistettu täyttävän sallitut-listan kriteerejä."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Määritä automaattisesti verkon ja langattomien signaalien perusteella"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automaattinen aikavyöhyke"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Määritä automaattisesti lähellä olevien mobiiliverkkojen perusteella"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Määritä automaattisesti sijainnin perusteella, jos saatavilla. Voi vaatia aktiivista Wi-Fi-yhteyttä."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Määritä automaattisesti sijainnin perusteella, jos saatavilla"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Käytä paikallista oletusasetusta"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Käytä 24-tuntista kelloa"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Aika"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Saavutettavuus"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fyysinen näppäimistö"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Toistuvien painallusten ohitus"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Näppäimistö ei huomioi nopeasti toistettuja saman näppäimen painalluksia"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Toistuvan painalluksen ohituskynnys"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Valitse, kuinka kauan näppäimistö ohittaa toistuvat painallukset"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Oma"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"oma arvo"</string>
<string name="slow_keys" msgid="2891452895499690837">"Hitaat näppäimet"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Muuta aikaa, joka näppäimellä kuluu aktivoitumiseen painalluksen jälkeen"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Päälle jäävät näppäimet"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Käytä pikanäppäimiä painamalla yhtä näppäintä kerralla monen näppäimen sijaan"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Hiiren painikkeet"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Ohjaa osoitinta näppäimistöllä"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Hiiren käänteinen vieritys"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Siirry alaspäin sivulla vierittämällä ylöspäin"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Vaihda vasemman ja oikean painikkeen paikkaa"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Käytä hiiren vasenta painiketta oikeana"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Pikanäppäimet"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Näytä pikanäppäimet"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Valitse uusi näppäin (<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>):"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Fyysisen näppäimistön saavutettavuus"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Päälle jäävät näppäimet, toistuvien painallusten ohitus, hiiren painikkeet"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Toistettavat näppäimet"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Viive ennen toistoa"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Toistonopeus"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pidä näppäintä painettuna, niin sen merkki toistuu, kunnes näppäin vapautetaan"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Asettelu: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Oletus"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automaattinen: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Esikatselu"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Vakioasetukset"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Kieli"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tekstityksen koko"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Tekstityksen tyyli"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Omat asetukset"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Taustaväri"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Säädä virrankäyttöä"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Sisältyvät paketit"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Sovellukset toimivat normaalisti"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Akun varaustaso alhainen"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Laita virransäästö päälle akunkeston parantamiseksi"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Paranna akunkestoa"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Katkaistaanko VPN-yhteys?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Katkaise yhteys"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versio"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versio <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Unohda VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Korvataanko nykyinen VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Määritetäänkö aina käytössä oleva VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"klo 9–17 arkipäivisin\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalenteritapahtumat"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} on aktiivinen}=2{{mode_1} ja {mode_2} ovat aktiivisia}=3{{mode_1}, {mode_2} ja {mode_3} ovat aktiivisia}other{{mode_1}, {mode_2} ja # muuta ovat aktiivisia}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 tila voi mennä päälle automaattisesti}other{# tilaa voi mennä päälle automaattisesti}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"PÄÄLLÄ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ei asetettu"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Ei käytössä"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Hae asetuksista"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"yhteystiedot, tallennustila, tili"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Yhteystietojen säilytys"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Oletusta ei ole asetettu."</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Vain laite"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Uusia yhteystietoja ei synkronoida tilille"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Yhteystiedot tallennetaan laitteelle ja synkronoidaan tilillesi oletuksena"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Oletustilin valinta epäonnistui"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ei oletusta"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Vain laite"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Aloita lisäämällä tili"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Kosketa aloitusnäyttöpainiketta tai siirtymiskahvaa pitkään, jotta voit tehdä haun näytöllä olevasta sisällöstä."</string>
</resources>
diff --git a/res/values-fr-rCA/arrays.xml b/res/values-fr-rCA/arrays.xml
index 12749a5..2993aa6 100644
--- a/res/values-fr-rCA/arrays.xml
+++ b/res/values-fr-rCA/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Flocon de neige"</item>
<item msgid="7952183800501346803">"Parasol"</item>
<item msgid="799139025758265891">"Outils d\'atelier"</item>
- <item msgid="1330084588359129896">"Tente"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Pellicule de film"</item>
<item msgid="5827426100157335512">"Livre"</item>
<item msgid="8585828346253128384">"Fleur de lotus"</item>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index fc7fe09..9367248 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Désactiver le Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Désactive la fonctionnalité Bluetooth LE Audio si l\'appareil prend en charge les capacités matérielles LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Mode Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Afficher comm. LE Audio dans les détails"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Contourner la liste verte du Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Utiliser LE Audio par défaut même si le périphérique LE Audio n\'a pas été vérifié en fonction des critères de la liste verte."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Configurez automatiquement ce paramètre à l\'aide de votre réseau et de vos signaux sans fil"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuseau horaire automatique"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Configurez ce paramètre automatiquement en fonction des réseaux cellulaires à proximité"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Configurez automatiquem. ce param. si localis. d\'appareil est dispo. Connex. Wi-Fi peut être nécess."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Configurez automatiquement ce paramètre si la localisation de l\'appareil est disponible"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utiliser les paramètres régionaux par défaut"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Utiliser le format 24 h"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Heure"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"Confidentialité"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"Profil professionnel"</string>
<string name="private_space_title" msgid="1752064212078238723">"Espace privé"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"Verrouiller et cacher les applis privées"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"Verrouillez et cachez les applis privées"</string>
<string name="private_space_description" msgid="4059594203775816136">"Conservez les applis privées dans un espace séparé que vous pouvez masquer ou verrouiller"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Verrouillage de l\'espace privé"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Vous pouvez déverrouiller votre Espace privé de la même manière que votre appareil ou choisir un autre type de verrouillage"</string>
@@ -620,7 +624,7 @@
<string name="no_device_lock_action_label" msgid="2640487005629001288">"Définir Verrouillage d\'écran"</string>
<string name="no_device_lock_cancel" msgid="4412602160321228863">"Annuler"</string>
<string name="private_space_cancel_label" msgid="379259667396956886">"Annuler"</string>
- <string name="private_space_setup_button_label" msgid="2094882154623560585">"Configuration"</string>
+ <string name="private_space_setup_button_label" msgid="2094882154623560585">"Configurer"</string>
<string name="private_space_setup_title" msgid="2272968244329821450">"Espace privé"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Masquez ou verrouillez les applis privées dans un espace à part. Utilisez un compte Google dédié pour plus de sécurité."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Fonctionnement"</string>
@@ -629,8 +633,8 @@
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installer les applis"</b>\n"Installez les applis que vous voulez garder privées dans votre espace"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Garder à l\'esprit"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Les applis s\'arrêtent lorsque vous verrouillez votre espace"</b>\n"Lorsque vous verrouillez votre espace, les applis qui s\'y trouvent sont arrêtées, et vous ne recevez aucune notification de leur part"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Les espaces privés ne conviennent pas aux applis qui doivent être exécutées en arrière-plan ou qui doivent envoyer des notifications critiques, comme les applis médicales. En effet, les notifications et les activités en arrière-plan sont interrompues lorsque votre espace est verrouillé.\n\nLes applis contenues dans votre espace privé n\'apparaîtront pas dans le gestionnaire des autorisations, sur le tableau de bord de confidentialité ni dans les autres paramètres quand l\'espace privé est verrouillé.\n\nVotre espace privé ne peut être déplacé vers un autre appareil. Vous devrez créer un autre espace privé si vous souhaitez l\'utiliser sur un autre appareil.\n\nToute personne qui connecte votre appareil à un ordinateur ou installe des applis nuisibles sur votre appareil peut être en mesure d\'accéder à votre espace privé."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Les espaces privés ne conviennent pas aux applis qui doivent être exécutées en arrière-plan ou qui doivent envoyer des notifications critiques, comme les applis médicales. En effet, les notifications et les activités en arrière-plan sont interrompues lorsque votre espace est verrouillé.\n\nLes applis contenues dans votre espace privé n\'apparaîtront pas dans le gestionnaire des autorisations, sur le tableau de bord de confidentialité ni dans les autres paramètres quand l\'espace privé est verrouillé.\n\nVotre espace privé ne peut être restauré sur un autre appareil. Vous devrez créer un autre espace si vous souhaitez l\'utiliser sur un autre appareil.\n\nToute personne qui connecte votre appareil à un ordinateur ou installe des applis malveillantes sur votre appareil peut être en mesure d\'accéder à votre espace privé."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Les espaces privés ne conviennent pas aux applis qui doivent être exécutées en arrière-plan ou qui doivent envoyer des notifications critiques, comme les applis médicales. En effet, les notifications et les activités en arrière-plan sont interrompues lorsque votre espace est verrouillé.\n\nLes applis contenues dans votre espace privé n\'apparaîtront pas dans le gestionnaire des autorisations, sur le tableau de bord de confidentialité ni dans les autres paramètres quand l\'espace privé est verrouillé.\n\nVotre espace privé ne peut pas être déplacé vers un autre appareil. Vous devrez créer un autre espace privé si vous souhaitez l\'utiliser sur un autre appareil.\n\nToute personne qui connecte votre appareil à un ordinateur ou qui installe des applis nuisibles sur votre appareil peut être en mesure d\'accéder à votre espace privé."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Les espaces privés ne conviennent pas aux applis qui doivent être exécutées en arrière-plan ou qui doivent envoyer des notifications critiques, comme les applis médicales. En effet, les notifications et les activités en arrière-plan sont interrompues lorsque votre espace est verrouillé.\n\nLes applis contenues dans votre espace privé n\'apparaîtront pas dans le gestionnaire des autorisations, sur le tableau de bord de confidentialité ni dans les autres paramètres quand l\'espace privé est verrouillé.\n\nVotre espace privé ne peut pas être restauré sur un autre appareil. Vous devrez créer un autre espace si vous souhaitez l\'utiliser sur un autre appareil.\n\nToute personne qui connecte votre appareil à un ordinateur ou qui installe des applis malveillantes sur votre appareil peut être en mesure d\'accéder à votre espace privé."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"En savoir plus sur l\'espace privé"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"L\'opération prendra quelques instants"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"Configuration de l\'Espace privé en cours…"</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Créer un schéma pour l\'Espace privé"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Verrouiller"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Masquer"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Confirmer le schéma de votre espace privé"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Entrer à nouveau le NIP de votre espace privé"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Entrer à nouveau le mot de passe de l\'espace privé"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> empreintes digitales"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Vous avez ajouté le nombre maximal d\'empreintes digitales"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"Impossible d\'ajouter des empreintes digitales"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Vérifiez votre mot de passe, puis réessayez"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Communiquez avec le fabricant de l\'appareil"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Vérifiez votre connexion et réessayez"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Ce réseau Wi-Fi n\'est pas accessible pour le moment"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Il y a un problème avec ce code QR. Essayez de vous connecter d\'une autre manière."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Choisir un réseau"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Pour connecter votre appareil, choisissez un réseau"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Ajouter cet appareil au réseau « <xliff:g id="SSID">%1$s</xliff:g> »?"</string>
@@ -1340,7 +1339,7 @@
<string name="lift_to_wake_title" msgid="8994218158737714046">"Soulever pour activer"</string>
<string name="ambient_display_screen_title" msgid="8615947016991429325">"Affichage en mode Veille"</string>
<string name="ambient_display_category_triggers" msgid="1216640141609270011">"Activation du mode Veille"</string>
- <string name="doze_title" msgid="1523090408230862316">"Réactiv. écran pour notifications"</string>
+ <string name="doze_title" msgid="1523090408230862316">"Activer écran si notifications"</string>
<string name="doze_summary" msgid="8252867381522942804">"Lorsque l\'écran est sombre, il s\'allume en cas de nouvelles notifications"</string>
<string name="doze_always_on_title" msgid="7326245192352868477">"Toujours affich. heure et données"</string>
<string name="doze_always_on_summary" msgid="509097829739647852">"Utilisation accrue de la pile"</string>
@@ -1951,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibilité"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Clavier physique"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Touches non répétées"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Le clavier ignore les appuis répétés rapidement sur la même touche"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Seuil de la touche non répétée"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Choisissez la durée pendant laquelle votre clavier ignore les appuis répétés sur une touche"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personnalisée"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valeur personnalisée"</string>
<string name="slow_keys" msgid="2891452895499690837">"Touches lentes"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Règle le temps nécessaire pour qu\'un appui sur une touche soit activé"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Touches rémanentes"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Appuyer sur une clé à la fois pour activer les raccourcis plutôt que de maintenir plusieurs touches enfoncées en même temps"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Touches de la souris"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Utiliser votre clavier pour contrôler le pointeur"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Défilement inversé de la souris"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Faites défiler l\'écran vers le haut pour déplacer la page vers le bas"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Inverser les boutons gauche et droit"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Utilisez le bouton gauche de la souris comme bouton droit"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Raccourcis clavier"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Afficher la liste de raccourcis"</string>
@@ -2039,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Choisir une nouvelle touche pour <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> :"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accessibilité du clavier physique"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Touches rémanentes, touches non répétées, touches de la souris"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Touches de répétition"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Délai avant la répétition"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Fréquence de répétition"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Maintenez une touche enfoncée pour répéter son caractère jusqu\'à ce que la touche soit relâchée"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Mise en page <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Par défaut"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatique : <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2248,7 +2261,7 @@
<string name="accessibility_feature_shortcut_setting_summary_quick_settings" msgid="7006526933552889373">"Paramètres rapides"</string>
<string name="accessibility_shortcut_edit_dialog_title_hardware" msgid="844089763968552142">"Touches de volume"</string>
<string name="accessibility_shortcut_hardware_keyword" msgid="2483152542320987022">"touches de volume"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_hardware" msgid="2503134386397991634">"Maintenez enfoncées les deux touches de volume"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_hardware" msgid="2503134386397991634">"Maintenez les deux touches de volume enfoncées"</string>
<string name="accessibility_shortcut_edit_screen_title_two_finger_double_tap" msgid="8952595692906527694">"Toucher deux fois avec %1$d doigts"</string>
<string name="accessibility_shortcut_edit_screen_summary_two_finger_double_tap" msgid="385404127425496362">"Touchez rapidement l\'écran deux fois avec %1$d doigts"</string>
<string name="accessibility_shortcut_edit_screen_title_triple_tap" msgid="3314488747597058942">"Toucher trois fois"</string>
@@ -2340,8 +2353,8 @@
<string name="accessibility_vibration_setting_disabled_for_silent_mode_summary" msgid="3982701772953323190">"Le paramètre est désactivé parce que l\'appareil est en mode silencieux"</string>
<string name="accessibility_call_vibration_category_title" msgid="2545607568768192318">"Appels"</string>
<string name="accessibility_notification_alarm_vibration_category_title" msgid="2683635252414849417">"Notifications et alarmes"</string>
- <string name="accessibility_interactive_haptics_category_title" msgid="3162855291184592021">"Effets tactils interactifs"</string>
- <string name="accessibility_vibration_primary_switch_title" msgid="6162579254864450592">"Utiliser les vibrations et les effets tactils"</string>
+ <string name="accessibility_interactive_haptics_category_title" msgid="3162855291184592021">"Effets tactiles interactifs"</string>
+ <string name="accessibility_vibration_primary_switch_title" msgid="6162579254864450592">"Utiliser les vibrations et les effets tactiles"</string>
<string name="accessibility_alarm_vibration_title" msgid="4661294337828522745">"Vibration pour les alarmes"</string>
<string name="accessibility_media_vibration_title" msgid="1372073715403945428">"Vibration multimédia"</string>
<string name="accessibility_keyboard_vibration_title" msgid="7559967730626765441">"Vibration du clavier"</string>
@@ -2447,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Aperçu"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Options standards"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Langue"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Taille des sous-titres"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Style de sous-titres"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Options de personnalisation"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Couleur de l\'arrière-plan"</string>
@@ -2575,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajuster la consommation"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Modules inclus"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Les applis fonctionnent normalement"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Pile faible"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Activez l\'économiseur de pile pour prolonger l\'autonomie de la pile"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Améliorer l\'autonomie de la pile"</string>
@@ -2992,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Déconnecter ce RPV?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Déconnecter"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Oublier le profil RPV"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Remplacer le RPV existant?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Définir le RPV permanent?"</string>
@@ -3338,14 +3355,14 @@
<string name="keywords_default_payment_app" msgid="5162298193637362104">"paiement, par défaut"</string>
<string name="keywords_ambient_display" msgid="3149287105145443697">"notification entrante"</string>
<string name="keywords_hotspot_tethering" msgid="3688439689671232627">"partage de connexion usb, partage de connexion bluetooth, partage de connexion wi-fi, fonction modem"</string>
- <string name="keywords_accessibility_vibration_primary_switch" msgid="730692154347231253">"effets tactils, vibrer, vibration"</string>
+ <string name="keywords_accessibility_vibration_primary_switch" msgid="730692154347231253">"effets tactiles, vibrer, vibration"</string>
<string name="keywords_touch_vibration" msgid="1125291201902251273">"haptique, vibrer, écran, sensibilité"</string>
<string name="keywords_ring_vibration" msgid="1736301626537417541">"haptique, vibration, téléphone, appel, sensibilité, sonnerie"</string>
<string name="keywords_ramping_ringer_vibration" msgid="3678966746742257366">"haptique, vibration, téléphone, appel, sonnerie, graduellement"</string>
<string name="keywords_notification_vibration" msgid="2620799301276142183">"haptique, vibration, sensibilité, notification"</string>
<string name="keywords_alarm_vibration" msgid="4833220371621521817">"haptique, vibration, sensibilité, alarme"</string>
<string name="keywords_media_vibration" msgid="723896490102792327">"haptique, vibration, sensibilité, multimédia"</string>
- <string name="keywords_vibration" msgid="670455132028025952">"effets tactils, vibrer, vibration"</string>
+ <string name="keywords_vibration" msgid="670455132028025952">"effets tactiles, vibrer, vibration"</string>
<string name="keywords_battery_saver_sticky" msgid="1646191718840975110">"économiseur de pile, fixe, persistant, économie d\'énergie, pile"</string>
<string name="keywords_battery_saver_schedule" msgid="8240483934368455930">"routine, horaire, économiseur de pile, économie d\'énergie, pile, automatique, pour cent"</string>
<string name="keywords_enhance_4g_lte" msgid="658889360486800978">"volte, appels avancés, appels 4g"</string>
@@ -3405,7 +3422,7 @@
<string name="zen_mode_settings_schedules_summary" msgid="2047688589286811617">"{count,plural, =0{Aucun}=1{1 horaire programmé}one{# horaire programmé}other{# horaires programmés}}"</string>
<string name="zen_mode_settings_title" msgid="682676757791334259">"Ne pas déranger"</string>
<string name="zen_modes_list_title" msgid="4796033710444068729">"Modes"</string>
- <string name="zen_modes_list_intro" msgid="1795379595115088972">"Réduisez les distractions et prenez le contrôle de votre attention à l\'aide des modes pour le sommeil, le travail, la conduite et tout ce qu\'il y a entre les deux."</string>
+ <string name="zen_modes_list_intro" msgid="1795379595115088972">"Réduisez les distractions et prenez le contrôle de votre attention à l\'aide des modes pour le sommeil, le travail, la conduite et tout le reste."</string>
<string name="zen_modes_add_mode" msgid="5926457160307593664">"Créer votre propre mode"</string>
<string name="zen_mode_settings_summary" msgid="6040862775514495191">"Recevez uniquement les notifications des personnes et des applis importantes"</string>
<string name="zen_mode_select_schedule" msgid="663163931596092952">"Définir un horaire"</string>
@@ -3414,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"« 9 h à 17 h les jours de semaine »"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Événements d\'agenda"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Le mode {mode_1} est actif}=2{Les modes {mode_1} et {mode_2} sont actifs}=3{Les modes {mode_1}, {mode_2} et {mode_3} sont actifs}one{Les modes {mode_1}, {mode_2}, et # autre sont actifs}other{Les modes {mode_1}, {mode_2}, et # autres sont actifs}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode peut s\'activer automatiquement}one{# mode peut s\'activer automatiquement}other{# modes peuvent s\'activer automatiquement}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVÉ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Non défini"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Désactivé"</string>
@@ -3857,10 +3875,10 @@
<string name="zen_mode_alarms" msgid="5989343060100771099">"Alarmes"</string>
<string name="zen_mode_alarms_summary" msgid="3388679177457223967">"Des minuteries, des alarmes, des systèmes de sécurité et d\'autres applis"</string>
<string name="zen_mode_alarms_list" msgid="334782233067365405">"alarmes"</string>
- <string name="zen_mode_alarms_list_first" msgid="2780418316613576610">"Alarmes"</string>
+ <string name="zen_mode_alarms_list_first" msgid="2780418316613576610">"Les alarmes"</string>
<string name="zen_mode_media" msgid="885017672250984735">"Sons des éléments multimédias"</string>
<string name="zen_mode_media_summary" msgid="7174081803853351461">"Sons des vidéos, des jeux et d\'autres éléments multimédias"</string>
- <string name="zen_mode_media_list" msgid="2006413476596092020">"média"</string>
+ <string name="zen_mode_media_list" msgid="2006413476596092020">"le contenu multimédia"</string>
<string name="zen_mode_media_list_first" msgid="7824427062528618442">"Éléments multimédias"</string>
<string name="zen_mode_system" msgid="7301665021634204942">"Sons des touches"</string>
<string name="zen_mode_system_summary" msgid="7225581762792177522">"Sons du clavier et des autres boutons"</string>
@@ -3924,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Créer un mode"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Mode personnalisé"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Nom du mode"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Le nom du mode est obligatoire"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Sélectionner une icône"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Événements d\'agenda"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Routine Heure du coucher"</string>
@@ -3998,7 +4015,7 @@
<string name="app_launch_open_domain_urls_title" msgid="4805388403977096285">"Ouvrir les liens compatibles"</string>
<string name="app_launch_open_in_app" msgid="2208182888681699512">"Dans l\'appli"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"Dans votre navigateur"</string>
- <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Choisir comment ouvrir les liens Web pour cette appli"</string>
+ <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Choisissez comment ouvrir les liens Web pour cette appli"</string>
<string name="app_launch_links_category" msgid="2380467163878760037">"Liens à ouvrir dans cette appli"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"Liens compatibles"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"Autres préférences par défaut"</string>
@@ -5051,7 +5068,7 @@
<string name="lockscreen_privacy_qr_code_scanner_summary" msgid="4577409244972250235">"Autorisez l\'accès au lecteur de code QR à partir de l\'écran verrouillé"</string>
<string name="lockscreen_privacy_controls_setting_toggle" msgid="7445725343949588613">"Afficher les commandes des appareils"</string>
<string name="lockscreen_privacy_controls_summary" msgid="7522918441738915364">"À partir de l\'écran de verrouillage"</string>
- <string name="lockscreen_trivial_controls_setting_toggle" msgid="2174300719855112358">"Utiliser les Commandes de l\'appareil"</string>
+ <string name="lockscreen_trivial_controls_setting_toggle" msgid="2174300719855112358">"Utiliser les commandes de l\'appareil"</string>
<string name="lockscreen_trivial_disabled_controls_summary" msgid="7593626010580689155">"Pour les utiliser, activez d\'abord « Afficher les commandes de l\'appareil »"</string>
<string name="lockscreen_double_line_clock_summary" msgid="4109235686687860393">"La taille de l\'horloge varie en fonction du contenu de l\'écran de verrouillage"</string>
<string name="lockscreen_double_line_clock_setting_toggle" msgid="802271087416091548">"Horloge dynamique"</string>
@@ -5468,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Paramètres de recherche"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, stockage, compte"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Stockage des contacts"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Aucun compte par défaut n\'a été défini"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Appareil uniquement"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Les nouveaux contacts ne seront pas synchronisés avec un compte"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Les contacts seront enregistrés sur votre appareil et synchronisés avec votre compte par défaut"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Erreur lors de la définition du compte par défaut"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Aucun compte par défaut n\'a été défini"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Appareil uniquement"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Ajoutez un compte pour commencer"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Encercler et rechercher"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Maintenez le doigt sur la touche d\'accueil ou sur la barre de navigation pour effectuer une recherche à l\'aide du contenu de votre écran."</string>
</resources>
diff --git a/res/values-fr/arrays.xml b/res/values-fr/arrays.xml
index 4a2e6e2..1059146 100644
--- a/res/values-fr/arrays.xml
+++ b/res/values-fr/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Flocon de neige"</item>
<item msgid="7952183800501346803">"Parasol"</item>
<item msgid="799139025758265891">"Outils d\'atelier"</item>
- <item msgid="1330084588359129896">"Tente"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Bobine de film"</item>
<item msgid="5827426100157335512">"Livre"</item>
<item msgid="8585828346253128384">"Fleur de lotus"</item>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 848870a..56253b0 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Désactiver Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Désactive la fonctionnalité Bluetooth LE Audio si l\'appareil est compatible avec les capacités matérielles LE Audio"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Mode Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Bouton LE Audio dans Détails appareil"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Liste d\'autorisation de contournement Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Utilisez LE Audio par défaut même si le respect des critères de la liste d\'autorisation par le périphérique LE Audio n\'a pas été validé."</string>
@@ -181,8 +185,8 @@
<string name="desc_app_locale_disclaimer" msgid="5295933110644789052">"La langue peut différer de celles disponibles dans l\'appli. Certaines applis ne sont pas compatibles avec ce paramètre."</string>
<string name="desc_app_locale_selection_supported" msgid="6744909281573556379">"Définissez la langue pour chaque appli."</string>
<string name="desc_introduction_of_language_picker" msgid="4012265379885200083">"Votre appareil, les applis et les sites Web utilisent la première langue prise en charge de votre liste de langues préférées.\n\nDe nombreuses applis se baseront également sur la région de votre langue préférée pour mettre en forme les dates, les nombres et les unités. Pour modifier votre région, ajoutez une langue, puis sélectionnez votre région préférée."</string>
- <string name="desc_notice_of_language_picker" msgid="3449290526457925447">"Pour sélectionner une langue pour chaque appli, accédez aux paramètres de langue de cette appli."</string>
- <string name="desc_locale_helper_footer_general" msgid="6112153921151780303">"En savoir plus sur les langues des applis"</string>
+ <string name="desc_notice_of_language_picker" msgid="3449290526457925447">"Pour sélectionner une langue pour chaque application, accédez aux paramètres de langue de cette application."</string>
+ <string name="desc_locale_helper_footer_general" msgid="6112153921151780303">"En savoir plus sur les langues des applications"</string>
<string name="title_change_system_locale" msgid="8589844586256566951">"Sélectionner %s comme langue du système ?"</string>
<string name="title_system_locale_addition" msgid="8218683660751479466">"Ajouter %s aux langues préférées ?"</string>
<string name="desc_system_locale_addition" msgid="3409917362651596070">"Cela permet aux applis et sites Web de savoir que vous préférez aussi cette langue."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Définir automatiquement à l\'aide de votre réseau et de vos signaux sans fil"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuseau horaire automatique"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Définir automatiquement en fonction des réseaux mobiles à proximité"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Définir automatiquement grâce à la position de votre appareil, si celle-ci est disponible. Une connexion Wi-Fi active peut aussi être requise."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Définir automatiquement grâce à la position de votre appareil, si celle-ci est disponible"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Utiliser les paramètres régionaux par défaut"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Utiliser le format 24h"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Heure"</string>
@@ -626,7 +630,7 @@
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Fonctionnement"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Créer un compte Google pour votre espace"</b>\n"En utilisant un compte dédié, vous empêchez les fichiers, photos et e-mails synchronisés d\'apparaître en dehors de votre espace"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Activez le verrouillage"</b>\n"Verrouillez votre espace afin que personne ne puisse y accéder."</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Applis installées"</b>\n"Les applis installées que vous souhaitez garder privées dans votre espace"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installer les applis"</b>\n"Installez les applis que vous souhaitez garder privées dans votre espace"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"À noter"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Les applis s\'arrêtent lorsque vous verrouillez votre espace"</b>\n"Lorsque vous verrouillez votre espace, les applis qui s\'y trouvent s\'arrêtent et vous ne recevez plus de notifications de leur part"</string>
<string name="private_space_apps_permission_text" msgid="4416201648436201393">"Les espaces privés ne sont pas adaptés aux applis qui doivent s\'exécuter en arrière-plan ou envoyer des notifications critiques, comme les applis médicales. En effet, les notifications et les activités en arrière-plan sont interrompues lorsque votre espace est verrouillé.\n\nLes applis contenues dans votre espace privé n\'apparaissent pas dans le gestionnaire d\'autorisations, dans le tableau de bord Confidentialité ni dans d\'autres paramètres quand votre espace privé est verrouillé.\n\nVotre espace privé ne peut pas être transféré vers un nouvel appareil. Si vous souhaitez l\'utiliser sur un autre appareil, vous devrez configurer un nouvel espace privé.\n\nQuiconque connecte votre appareil à un ordinateur ou y installe des applis malveillantes peut avoir accès à votre espace privé."</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Définissez un schéma pour l\'espace privé"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Verrouiller"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Masquer"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Confirmez le schéma de votre espace privé"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Saisissez à nouveau le code de votre espace privé"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Saisissez de nouveau le mot de passe de votre espace privé"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Vous pouvez ajouter jusqu\'à <xliff:g id="COUNT">%d</xliff:g> empreintes digitales"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Vous avez ajouté le nombre maximal autorisé d\'empreintes digitales"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"Impossible d\'ajouter d\'autres empreintes digitales"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Vérifiez le mot de passe et réessayez"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Contactez le fabricant de l\'appareil"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Vérifiez la connexion et réessayez"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Ce réseau Wi‑Fi n\'est pas disponible pour le moment"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Ce code QR présente un problème. Essayez de vous connecter d\'une autre manière."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Sélectionner un réseau"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Sélectionnez un réseau pour connecter l\'appareil"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Ajouter cet appareil à \"<xliff:g id="SSID">%1$s</xliff:g>\" ?"</string>
@@ -1951,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibilité"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Clavier physique"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Touches à rebonds"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Le clavier ignore les frappes rapides et consécutives d\'une même touche"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Seuil de touches filtres"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Choisissez la durée pendant laquelle votre clavier ignore les frappes consécutives d\'une touche"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personnalisé"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valeur personnalisée"</string>
<string name="slow_keys" msgid="2891452895499690837">"Touches lentes"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Règle le temps de réponse à la pression d\'une touche"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Touches persistantes"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Pour les raccourcis, appuyer sur une touche à la fois au lieu de maintenir les touches enfoncées"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Touches pour la souris"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Utilisez le clavier pour contrôler le pointeur"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Défilement inversé avec la souris"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Faire défiler vers le haut pour déplacer la page vers le bas"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Inverser les boutons gauche et droit"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Utiliser le bouton gauche de la souris comme bouton droit"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Raccourcis clavier"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Afficher la liste des raccourcis"</string>
@@ -2039,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Choisir une nouvelle touche pour <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> :"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accessibilité du clavier physique"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Touches rémanentes, touches à rebonds, touches pour la souris"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Répéter les touches"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Délai avant répétition"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Fréquence de répétition"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Maintenez une touche enfoncée pour répéter le caractère correspondant jusqu\'à ce que vous la relâchiez"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Mise en page <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Par défaut"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatique : <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2447,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Aperçu"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Options standards"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Langue"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Taille des sous-titres"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Style des sous-titres"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Options de personnalisation"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Couleur d\'arrière-plan"</string>
@@ -2575,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajuster la consommation"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Modules inclus"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Les applications s\'exécutent normalement"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Niveau de batterie faible"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Activer l\'économiseur de batterie pour prolonger l\'autonomie"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Améliorer l\'autonomie de la batterie"</string>
@@ -2992,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Déconnecter ce VPN ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Déconnecter"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Supprimer le VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Remplacer le VPN existant ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Définir le VPN permanent ?"</string>
@@ -3414,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9h - 17h en semaine\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Événements d\'agenda"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} est actif}=2{{mode_1} et {mode_2} sont actifs}=3{{mode_1}, {mode_2} et {mode_3} sont actifs}one{{mode_1}, {mode_2} et # de plus sont actifs}other{{mode_1}, {mode_2} et # de plus sont actifs}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode peut s\'activer automatiquement}one{# mode peut s\'activer automatiquement}other{# modes peuvent s\'activer automatiquement}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVÉ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Non défini"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Désactivé"</string>
@@ -3715,7 +3733,7 @@
<string name="notif_listener_more_settings_desc" msgid="7995492074281663658">"D\'autres paramètres sont disponibles dans l\'appli"</string>
<string name="notification_polite_title" msgid="6121016426991791557">"Limitation des notifications"</string>
<string name="notification_polite_main_control_title" msgid="5812529809151927149">"Utiliser la limitation des notifications"</string>
- <string name="notification_polite_description" msgid="5497748284893832854">"Si vous recevez beaucoup de notifications en peu de temps, votre appareil baisse le volume et réduit les alertes pendant 2 minutes maximum. Les appels, les alarmes et les conversations prioritaires ne sont pas affectés. \n\nLes notifications reçues pendant la limitation sont accessibles en faisant glisser votre doigt du haut de l\'écran vers le bas."</string>
+ <string name="notification_polite_description" msgid="5497748284893832854">"Si vous recevez beaucoup de notifications en peu de temps, votre appareil réduit le volume et les alertes pendant 2 minutes maximum. Les appels, les alarmes et les conversations prioritaires ne sont pas affectés. \n\nLes notifications reçues pendant la limitation sont accessibles en faisant glisser votre doigt du haut de l\'écran vers le bas."</string>
<string name="notification_polite_work" msgid="8823596456640216391">"Appliquer aux profils professionnels"</string>
<string name="notification_polite_work_summary" msgid="5014189280132951378">"Appliquer aux applis des profils professionnels"</string>
<string name="vr_listeners_title" msgid="4960357292472540964">"Services d\'assistance RV"</string>
@@ -3924,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Créer un mode"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Mode personnalisé"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Nom du mode"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Vous devez indiquer un nom de mode"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Sélectionnez une icône"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Événements d\'agenda"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Routine Heure du coucher"</string>
@@ -5468,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Rechercher un paramètre"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, stockage, compte"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Stockage des contacts"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Aucun compte par défaut n\'a été défini"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Appareil uniquement"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Les nouveaux contacts ne seront pas synchronisés avec un compte"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Les contacts seront enregistrés sur votre appareil et synchronisés avec votre compte par défaut"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Erreur lors de la définition du compte par défaut"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Aucun compte par défaut n\'a été défini"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Appareil uniquement"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Ajoutez un compte pour commencer"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Entourer pour chercher"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Appuyez de manière prolongée sur le bouton d\'accueil ou la barre de navigation pour effectuer une recherche basée sur le contenu de votre écran."</string>
</resources>
diff --git a/res/values-gl/arrays.xml b/res/values-gl/arrays.xml
index 49cbf33..4ce2f6d 100644
--- a/res/values-gl/arrays.xml
+++ b/res/values-gl/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Folerpa"</item>
<item msgid="7952183800501346803">"Parasol"</item>
<item msgid="799139025758265891">"Ferramentas dun taller"</item>
- <item msgid="1330084588359129896">"Tenda"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Rolo de película"</item>
<item msgid="5827426100157335512">"Libro"</item>
<item msgid="8585828346253128384">"Flor de loto"</item>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index c9a75b7..98310c8 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Sen Bluetooth de baixo consumo (audio)"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Desactiva a función de audio por Bluetooth de baixo consumo se o dispositivo é compatible coas funcións do hardware de audio de baixo consumo."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modo audio por Bluetooth baixo consumo"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Botón Audio de baixo consumo en detalles"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Sortear lista de entidades permitidas para o audio por Bluetooth de baixo consumo"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Usa o audio de baixo consumo de forma predeterminada mesmo no caso de que non se verificase se o seu dispositivo periférico cumpre os criterios da lista de entidades permitidas."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"A data e a hora definiranse automaticamente coa axuda da rede e os sinais sen fíos"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuso horario automático"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"O fuso horario definirase automaticamente en función das redes de telefonía móbil que teñas preto"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Data e hora automáticas segundo a localización do dispositivo. Pódese precisar unha conexión wifi activa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"A data e hora definiranse automaticamente segundo a localización do dispositivo, se está dispoñible"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar configuración rexional predeterminada"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Hora"</string>
@@ -626,10 +630,10 @@
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Como funciona?"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crea unha Conta de Google para o teu espazo"</b>\n"Usar unha conta específica axuda a evitar que os ficheiros, fotos e correos electrónicos sincronizados aparezan fóra do teu espazo privado"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Define un bloqueo"</b>\n"Bloquea o espazo para que ninguén máis poida abrilo"</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instala aplicacións"</b>\n"Instala as aplicacións que queiras manter no teu espazo privado"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instala aplicacións"</b>\n"Instala no teu espazo as aplicacións que queiras manter en privado"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Importante"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"As aplicacións desactívanse ao bloquear o espazo privado"</b>\n"Cando bloqueas o espazo, as aplicacións que están nel detéñense, polo que non che enviarán notificacións"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Os espazos privados non son axeitados para as aplicacións que deben executarse en segundo plano ou enviar notificacións esenciais, como as aplicacións médicas. A razón é que se deteñen as notificacións e a actividade en segundo plano cando bloqueas o espazo.\n\nUnha vez bloqueado, as aplicacións do espazo privado non aparecerán no xestor de permisos, no panel de privacidade nin noutras opcións de configuración\n\nEste espazo non se pode mover a outro dispositivo. Terás que configurar un novo espazo privado se queres usalo noutro aparello.\n\nCalquera usuario que instale aplicacións daniñas no teu dispositivo ou o conecte a un ordenador poderá acceder ao teu espazo privado."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Os espazos privados non son axeitados para as aplicacións que deben executarse en segundo plano ou enviar notificacións esenciais, como as aplicacións médicas. A razón é que se deteñen as notificacións e a actividade en segundo plano cando bloqueas o espazo.\n\nUnha vez bloqueado, as aplicacións do espazo privado non aparecerán no xestor de permisos, no panel de privacidade nin noutras opcións de configuración.\n\nEste espazo non se pode mover a outro dispositivo. Terás que configurar un novo espazo privado se queres usalo noutro aparello.\n\nCalquera usuario que instale aplicacións daniñas no teu dispositivo ou o conecte a un ordenador poderá acceder ao teu espazo privado."</string>
<string name="private_space_settings_footer_text" msgid="3742468470394835356">"Os espazos privados non son axeitados para as aplicacións que deben executarse en segundo plano ou enviar notificacións esenciais, como as aplicacións médicas. A razón é que se deteñen as notificacións e a actividade en segundo plano cando bloqueas o espazo.\n\nUnha vez bloqueado, as aplicacións do espazo privado non aparecerán no xestor de permisos, no panel de privacidade nin noutras opcións de configuración\n\nEste espazo non se pode restaurar noutro dispositivo. Terás que configurar un novo se queres usalo noutro aparello.\n\nCalquera usuario que instale aplicacións maliciosas no teu dispositivo ou o conecte a un ordenador podería acceder ao teu espazo privado."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Máis información sobre o espazo privado"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Esta acción tardará uns intres"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accesibilidade"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Teclado físico"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Teclas de rebote"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"O teclado ignorará as pulsacións repetidas rapidamente da mesma tecla"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Límite das teclas de rebote"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Escolle o tempo durante o cal o teu teclado ignorará as pulsacións repetidas"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizado"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalizado"</string>
<string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Axusta o tempo que se tarda en activar a pulsación dunha tecla"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Teclas presas"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Preme unha tecla de cada vez para os atallos, en lugar de manter premidas varias"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Teclas para o rato"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Usa o teclado para controlar o punteiro"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Desprazamento inverso do rato"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Desprázate cara arriba para mover a páxina cara abaixo"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Cambiar botóns esquerdo e dereito"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Usa o botón esquerdo do rato como se fose o dereito"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Atallos de teclado"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostra a lista de atallos"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Escolle unha nova tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accesibilidade do teclado físico"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas presas, teclas de rebote, teclas para o rato"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repetición de teclas"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Retardo previo á repetición"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Índice de repetición"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Mantén premida unha tecla para repetir o seu carácter ata que a soltes"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Deseño: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predeterminado"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Selección automática: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Vista previa"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opcións estándar"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tamaño dos subtítulos"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estilo dos subtítulos"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opcións personalizadas"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Cor do fondo"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Axustar uso de enerxía"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Paquetes incluídos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"As aplicacións execútanse con normalidade"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Queda pouca batería"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Para que a batería dure máis, activa a función Aforro de batería"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Mellora a duración da batería"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Queres desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versión"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer perfil da VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Queres substituír a VPN existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Queres definir a VPN como sempre activa?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Días de semana, de 9:00 a 17:00\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventos do calendario"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{O modo {mode_1} está activo}=2{Os modos {mode_1} e {mode_2} están activos}=3{Os modos {mode_1}, {mode_2} e {mode_3} están activos}other{Os modos {mode_1}, {mode_2} e # máis están activos}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Hai 1 modo que se pode activar de forma automática}other{Hai # modos que se poden activar de forma automática}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVADO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Sen configurar"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Desactivado"</string>
@@ -3759,7 +3782,7 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"Esta aplicación non envía notificacións"</string>
<string name="notification_channels" msgid="1502969522886493799">"Categorías"</string>
<string name="notification_channels_other" msgid="18159805343647908">"Outros"</string>
- <string name="no_channels" msgid="4716199078612071915">"Esta aplicación non emitiu notificacións"</string>
+ <string name="no_channels" msgid="4716199078612071915">"Esta aplicación non publicou notificacións"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"Mostrar categorías sen usar"</string>
<string name="app_settings_link" msgid="6725453466705333311">"Configuración adicional da aplicación"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"Mostrar categorías sen usar"</string>
@@ -5340,7 +5363,7 @@
<string name="about_phone_device_name_warning" msgid="3243226572404472381">"As aplicacións que teñas instaladas poderán consultar o nome do teu dispositivo. Tamén poderán velo outros usuarios cando te conectes a dispositivos Bluetooth ou a redes wifi, así como cando configures zonas wifi."</string>
<string name="grammatical_gender_title" msgid="8584242850477270828">"Xénero gramatical"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"Seleccionar o xénero gramatical"</string>
- <string name="content_protection_preference_title" msgid="5069260032659193074">"Buscando aplicacións enganosas"</string>
+ <string name="content_protection_preference_title" msgid="5069260032659193074">"Busca de aplicacións enganosas"</string>
<string name="content_protection_preference_summary" msgid="2252393849408445391">"Revisa a actividade das aplicacións para detectar phishing"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"Usar análise para detectar aplicacións enganosas"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"Usar análise para detectar aplicacións enganosas para o traballo"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Buscar en Configuración"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contactos, almacenamento, conta"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Almacenamento de contactos"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Non se definiu ningunha conta predeterminada"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Só dispositivo"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Os novos contactos non se sincronizarán cunha conta"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"De forma predeterminada, os contactos gardaranse no teu dispositivo e sincronizaranse coa túa conta"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Produciuse un erro ao configurar a conta predeterminada"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ningunha conta predeterminada definida"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Só dispositivo"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Engade unha conta para comezar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Rodear para buscar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Mantén premido o botón de inicio ou o controlador de navegación para facer buscas usando o contido da pantalla."</string>
</resources>
diff --git a/res/values-gu/arrays.xml b/res/values-gu/arrays.xml
index bdd9ff1..b5b7b34 100644
--- a/res/values-gu/arrays.xml
+++ b/res/values-gu/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"સ્નોફ્લૅક"</item>
<item msgid="7952183800501346803">"બીચ પરની છત્રી"</item>
<item msgid="799139025758265891">"વર્કશોપ ટૂલ"</item>
- <item msgid="1330084588359129896">"તંબુ"</item>
+ <item msgid="8112685757657659269">"પિયાનો"</item>
<item msgid="3861584909935022342">"ફિલ્મ રીલ"</item>
<item msgid="5827426100157335512">"પુસ્તક"</item>
<item msgid="8585828346253128384">"કમળનું ફૂલ"</item>
@@ -538,7 +538,7 @@
<item msgid="4368451291862729334">"હૃદય"</item>
<item msgid="2613199102208419986">"ઘર"</item>
<item msgid="3022279986430275040">"અર્ધચંદ્ર"</item>
- <item msgid="5421089790869483206">"ઘડિયાળ"</item>
+ <item msgid="5421089790869483206">"Clock"</item>
</string-array>
<string-array name="display_over_apps_permission_change_exempt">
</string-array>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 84e4b26..d269f77 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"બ્લૂટૂથ LE ઑડિયો બંધ કરો"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"જો ડિવાઇસ LE ઑડિયો હાર્ડવેર ક્ષમતાઓને સપોર્ટ કરતું હોય, તો બ્લૂટૂથ LE ઑડિયો સુવિધા બંધ કરે છે."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"બ્લૂટૂથ LE ઑડિયો મોડ"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ડિવાઇસની વિગતોમાં LE ઑડિયો ટૉગલ બતાવો"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"બ્લૂટૂથ LE ઑડિયો માટેની વ્હાઇટલિસ્ટને બાયપાસ કરો"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"વ્હાઇટલિસ્ટના માપદંડનું પાલન કરવા માટે LE ઑડિયો પેરિફેરલની ચકાસણી કરવામાં આવી ન હોય, તો પણ ડિફૉલ્ટ તરીકે LE ઑડિયોનો ઉપયોગ કરો."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"તમારું નેટવર્ક અને વાયરલેસ સિગ્નલ વડે ઑટોમૅટિક રીતે સેટ કરેલું સેટિંગ"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ઑટોમૅટિક ટાઇમ ઝોન"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"તમારી નજીકના મોબાઇલ નેટવર્કના આધારે ઑટોમૅટિક રીતે સેટ કરેલું સેટિંગ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ઉપલબ્ધ હોવા પર ડિવાઇસના લોકેશન વડે ઑટો સેટ કરો. કોઈ સક્રિય વાઇ-ફાઇ કનેક્શન હોવું આવશ્યક હોઈ શકે છે."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ઉપલબ્ધ હોવા પર ડિવાઇસના લોકેશન વડે ઑટોમૅટિક રીતે સેટ કરો"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ડિફૉલ્ટ લોકેલનો ઉપયોગ કરો"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-કલાક ફોર્મેટનો ઉપયોગ કરો"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"સમય"</string>
@@ -1698,7 +1702,7 @@
<string name="lockpassword_choose_your_pin_header_for_biometrics" msgid="9086039918921009380">"ચહેરા અથવા ફિંગરપ્રિન્ટનો ઉપયોગ કરવા માટે પિન સેટ કરો"</string>
<string name="lockpassword_forgot_password" msgid="5730587692489737223">"તમારો પાસવર્ડ ભૂલી ગયાં?"</string>
<string name="lockpassword_forgot_pattern" msgid="1196116549051927516">"તમારા પૅટર્નને ભૂલી ગયાં?"</string>
- <string name="lockpassword_forgot_pin" msgid="7164232234705747672">"તમારો પિન ભૂલી ગયાં?"</string>
+ <string name="lockpassword_forgot_pin" msgid="7164232234705747672">"તમારો પિન ભૂલી ગયા?"</string>
<string name="lockpassword_confirm_your_pattern_generic" msgid="7401165571170203743">"ચાલુ રાખવા માટે તમારી પૅટર્ન દોરો"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="8990266101852808091">"ચાલુ રાખવા માટે તમારો પિન દાખલ કરો"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="8823867445451497224">"ચાલુ રાખવા માટે તમારો પાસવર્ડ દાખલ કરો"</string>
@@ -1834,7 +1838,7 @@
<string name="filter" msgid="9039576690686251462">"ફિલ્ટર"</string>
<string name="filter_dlg_title" msgid="3086282431958601338">"ફિલ્ટર વિકલ્પો પસંદ કરો"</string>
<string name="filter_apps_all" msgid="5705421199299914620">"બધી ઍપ"</string>
- <string name="filter_apps_disabled" msgid="5068011814871004105">"બંધ કરેલી ઍપ્લિકેશનો"</string>
+ <string name="filter_apps_disabled" msgid="5068011814871004105">"બંધ કરેલી ઍપ"</string>
<string name="filter_apps_third_party" msgid="9049447784849114843">"ડાઉનલોડ કરેલા"</string>
<string name="filter_apps_running" msgid="535465683273284141">"ચાલે છે"</string>
<string name="not_installed" msgid="5074606858798519449">"આ વપરાશકર્તા માટે ઇન્સ્ટોલ કરેલ નથી"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"એક જ કીને વારંવાર ઝડપથી દબાવવાની પ્રક્રિયાની કીબોર્ડ અવગણના કરે છે"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"બાઉન્સ કી સંબંધિત મર્યાદા"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"વારંવાર દબાવવામાં આવતી તમારા કીબોર્ડની કીને અવગણવા માટે જરૂરી અવધિ પસંદ કરો"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 સેકન્ડ"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 સેકન્ડ"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 સેકન્ડ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 સેકન્ડ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 સેકન્ડ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 સેકન્ડ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"કસ્ટમ"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"કસ્ટમ મૂલ્ય"</string>
<string name="slow_keys" msgid="2891452895499690837">"ધીમી કી"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"કોઈ કીને દબાવવાથી સક્રિય થવામાં લાગતા સમયમાં વધઘટ કરે છે"</string>
<string name="sticky_keys" msgid="7317317044898161747">"સ્ટીકી કી"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"શૉર્ટકટ માટે કીને એકસાથે દબાવી રાખવાને બદલે એક સમયે એક જ કી દબાવો"</string>
<string name="mouse_keys" msgid="6237254627808525540">"માઉસની કી"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"પૉઇન્ટરનું નિયંત્રણ કરવા માટે, તમારા કીબોર્ડનો ઉપયોગ કરો"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"માઉસનું રિવર્સ સ્ક્રોલિંગ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"પેજને નીચે લઈ જવા માટે ઉપર સ્ક્રોલ કરો"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ડાબા અને જમણા બટનને સ્વૉપ કરો"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"માઉસના ડાબા બટનનો ઉપયોગ તમારા જમણા બટન તરીકે કરો"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"કીબોર્ડ શૉર્ટકટ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"શૉર્ટકટની સૂચિ બતાવો"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"કાર્યાલયનું પ્રોફાઇલ અને સાધનો"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> માટે નવી કી પસંદ કરો:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"વાસ્તવિક કીબોર્ડની ઍક્સેસિબિલિટી"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"સ્ટીકી કી, બાઉન્સ કી, માઉસ કી"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"કી રિપીટ કરો"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"રિપીટ થવા પહેલાંનો વિલંબ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"રિપીટ રેટ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"જ્યાં સુધી કી રિલીઝ કરવામાં ન આવે ત્યાં સુધી કીના અક્ષરો રિપીટ કરવા માટે તેને નીચેની તરફ દબાવી રાખો"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> લેઆઉટ"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ડિફૉલ્ટ"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ઑટોમૅટિક રીતે: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"પ્રીવ્યૂ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"સ્ટૅન્ડર્ડ વિકલ્પો"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ભાષા"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"કૅપ્શનનું કદ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"કૅપ્શન શૈલી"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"કસ્ટમ વિકલ્પો"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"બૅકગ્રાઉન્ડ રંગ"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"પાવર વપરાશ સમાયોજિત કરો"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"સમાવિષ્ટ પૅકેજીસ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ઍપ સામાન્ય રીતે ચાલી રહી છે"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"બૅટરીનું લેવલ ઓછું છે"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"બૅટરીની આવરદા વધારવા માટે બૅટરી સેવર ચાલુ કરો"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"બૅટરીની આવરદા વધારો"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"આ VPNને ડિસ્કનેક્ટ કરીએ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ડિસ્કનેક્ટ કરો"</string>
<string name="vpn_version" msgid="6344167191984400976">"વર્ઝન"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"વર્ઝન <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ભૂલી ગયાં"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"અસ્તિત્વમાંની VPN ને બદલીએ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"હંમેશાં ચાલુ VPN સેટ કરીએ?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"અઠવાડિયાના દિવસોમાં સવારે 9થી સાંજે 5 વાગ્યા સુધી\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"કૅલેન્ડર ઇવેન્ટ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} સક્રિય છે}=2{{mode_1} અને {mode_2} સક્રિય છે}=3{{mode_1}, {mode_2} અને {mode_3} સક્રિય છે}one{{mode_1}, {mode_2} અને વધુ # સક્રિય છે}other{{mode_1}, {mode_2} અને વધુ # સક્રિય છે}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 મોડ ઑટોમૅટિક રીતે ચાલુ થઈ શકે છે}one{# મોડ ઑટોમૅટિક રીતે ચાલુ થઈ શકે છે}other{# મોડ ઑટોમૅટિક રીતે ચાલુ થઈ શકે છે}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ચાલુ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"સેટ નથી"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"બંધ છે"</string>
@@ -3751,7 +3782,7 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"આ ઍપ નોટિફિકેશન મોકલતી નથી"</string>
<string name="notification_channels" msgid="1502969522886493799">"કૅટેગરી"</string>
<string name="notification_channels_other" msgid="18159805343647908">"અન્ય"</string>
- <string name="no_channels" msgid="4716199078612071915">"આ ઍપએ કોઈ નોટિફિકેશન પોસ્ટ કરી નથી"</string>
+ <string name="no_channels" msgid="4716199078612071915">"આ ઍપ દ્વારા કોઈ નોટિફિકેશન પોસ્ટ થઈ નથી"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"બિનવપરાયેલી કૅટેગરી બતાવો"</string>
<string name="app_settings_link" msgid="6725453466705333311">"ઍપમાંના વધારાના સેટિંગ"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"બિનવપરાયેલી કૅટેગરી બતાવો"</string>
@@ -5333,7 +5364,7 @@
<string name="grammatical_gender_title" msgid="8584242850477270828">"વ્યાકરણ અનુસારનું લિંગ"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"વ્યાકરણ અનુસારનું લિંગ પસંદ કરો"</string>
<string name="content_protection_preference_title" msgid="5069260032659193074">"ભ્રામક ઍપ માટે સ્કૅન કરી રહ્યાં છીએ"</string>
- <string name="content_protection_preference_summary" msgid="2252393849408445391">"ફિશિંગ માટે ઍપ પ્રવૃત્તિ ચેક કરો"</string>
+ <string name="content_protection_preference_summary" msgid="2252393849408445391">"ફિશિંગ માટે ઍપ ઍક્ટિવિટી ચેક કરો"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"ભ્રામક ઍપ માટે સ્કૅનિંગનો ઉપયોગ કરો"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"ઑફિસ સંબંધિત ઍપ માટે સ્કૅનિંગનો ઉપયોગ કરો"</string>
<string name="content_protection_preference_subpage_summary" msgid="3595621220981703364"></string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"ફક્ત ડિવાઇસ"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"નવા સંપર્કોને કોઈ એકાઉન્ટ સાથે સિંક કરવામાં આવશે નહીં"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"ડિફૉલ્ટ તરીકે, સંપર્કોને તમારા ડિવાઇસમાં સાચવવામાં આવશે અને તેને તમારા એકાઉન્ટ સાથે સિંક કરવામાં આવશે"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"કોઈ ડિફૉલ્ટ સેટ નથી"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ડિફૉલ્ટ એકાઉન્ટ સેટ કરવામાં ભૂલ આવી"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"કોઈ ડિફૉલ્ટ સેટ નથી"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"ફક્ત ડિવાઇસ"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"શરૂ કરવા માટે કોઈ એકાઉન્ટ ઉમેરો"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"શોધવા માટે વર્તુળ દોરો"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"તમારી સ્ક્રીન પરના કન્ટેન્ટનો ઉપયોગ કરીને શોધવા માટે હોમ બટનને અથવા નૅવિગેશન હૅન્ડલને ટચ કરીને થોડીવાર દબાવી રાખો."</string>
</resources>
diff --git a/res/values-hi/arrays.xml b/res/values-hi/arrays.xml
index 0ff7011..7ff6293 100644
--- a/res/values-hi/arrays.xml
+++ b/res/values-hi/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"स्नोफ़्लेक"</item>
<item msgid="7952183800501346803">"बीच अंब्रेला"</item>
<item msgid="799139025758265891">"वर्कशॉप टूल"</item>
- <item msgid="1330084588359129896">"टेंट"</item>
+ <item msgid="8112685757657659269">"पियानो"</item>
<item msgid="3861584909935022342">"फ़िल्म रील"</item>
<item msgid="5827426100157335512">"किताब"</item>
<item msgid="8585828346253128384">"कमल का फूल"</item>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index eb6ede7..4c6991c 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"\'ब्लूटूथ LE Audio\' को बंद करें"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"अगर डिवाइस पर LE Audio हार्डवेयर चलता है, तो \'ब्लूटूथ LE Audio\' को बंद करें."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ब्लूटूथ LE Audio मोड"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"डिवाइस डिटेल में LE Audio टॉगल दिखाएं"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ब्लूटूथ LE Audio के लिए अनुमति वाली सूची को बायपास करें"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio का इस्तेमाल डिफ़ॉल्ट रूप से करें, भले ही अनुमति वाली सूची में शामिल करने के लिए, LE Audio वाले सहायक डिवाइसों की पुष्टि न की गई हो."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"नेटवर्क और वायरलेस सिग्नल के ज़रिए तारीख और समय अपने-आप सेट होने की सुविधा पाएं"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"टाइम ज़ोन अपने-आप सेट होने की सुविधा"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"अपने आस-पास के मोबाइल नेटवर्क के मुताबिक तारीख और समय अपने-आप सेट होने की सुविधा पाएं"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"डिवाइस की जगह के हिसाब से समय और तारीख अपने-आप सेट होने की सुविधा पाएं. इसमें वाई-फ़ाई की ज़रूरत पड़ सकती है."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"उपलब्ध होने पर, डिवाइस की जगह के हिसाब से समय और तारीख अपने-आप सेट होने की सुविधा पाएं"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"जगह और भाषा के हिसाब से समय का फ़ॉर्मैट सेट करें"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-घंटे वाले फ़ॉर्मैट का इस्तेमाल करें"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"समय"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"निजता"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"वर्क प्रोफ़ाइल"</string>
<string name="private_space_title" msgid="1752064212078238723">"प्राइवेट स्पेस"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"निजी ऐप्लिकेशन को लॉक करके और छिपाकर रखें"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"यहां निजी ऐप्लिकेशन को लॉक करके और छिपाकर रखा जाता है"</string>
<string name="private_space_description" msgid="4059594203775816136">"निजी ऐप्लिकेशन ऐसी जगह पर रखें जहां आप उन्हें लॉक कर सकें या छिपा सकें"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"प्राइवेट स्पेस के लिए लॉक"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"डिवाइस की तरह ही, प्राइवेट स्पेस को अनलॉक किया जा सकता है या कोई दूसरा लॉक सेट किया जा सकता है"</string>
@@ -622,15 +626,15 @@
<string name="private_space_cancel_label" msgid="379259667396956886">"रद्द करें"</string>
<string name="private_space_setup_button_label" msgid="2094882154623560585">"सेट अप करें"</string>
<string name="private_space_setup_title" msgid="2272968244329821450">"प्राइवेट स्पेस"</string>
- <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"निजी ऐप्लिकेशन, एक अलग जगह पर छिपाएं या लॉक करें. ज़्यादा सुरक्षा के लिए, किसी Google खाते का इस्तेमाल करें."</string>
+ <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"अपने निजी ऐप्लिकेशन, अलग जगह पर छिपाएं या लॉक करें. ज़्यादा सुरक्षा के लिए, खास तौर पर इसके लिए बनाए Google खाते का इस्तेमाल करें."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"स्पेस कैसे काम करता है"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"अपने स्पेस के लिए Google खाता बनाएं"</b>\n"स्पेस के लिए खास एक ही खाता इस्तेमाल करने से, वह सिंक की गई फ़ाइलों, फ़ोटो, और ईमेल को स्पेस के बाहर आने से रोकता है"</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"अपने स्पेस के लिए Google खाता बनाएं"</b>\n"स्पेस के लिए खास तौर पर खाता बनाकर, सिंक की गई फ़ाइलों, फ़ोटो, और ईमेल को स्पेस के बाहर दिखने से रोका जा सकता है"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"लॉक सेट करें"</b>\n"अपने स्पेस को लॉक करके रखें, ताकि दूसरे लोग उसे खोल न पाएं"</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"ऐप्लिकेशन इंस्टॉल करें"</b>\n"ऐसे ऐप्लिकेशन इंस्टॉल करें जिन्हें आपको अपने स्पेस में निजी रखना है"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"ऐप्लिकेशन इंस्टॉल करें"</b>\n"ऐसे ऐप्लिकेशन इंस्टॉल करें जिन्हें अपने स्पेस में निजी तौर पर रखना है"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"ध्यान रखें"</string>
- <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"स्पेस को लॉक करने से, ऐप्लिकेशन बंद हो जाते हैं"</b>\n"स्पेस को लॉक करने से, स्पेस में मौजूद ऐप्लिकेशन बंद हो जाते हैं, जिस वजह से आपको ऐप्लिकेशन से सूचनाएं नहीं मिलती हैं"</string>
+ <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"स्पेस को लॉक करने से ऐप्लिकेशन बंद हो जाते हैं"</b>\n"स्पेस को लॉक करने से, उसमें मौजूद ऐप्लिकेशन बंद हो जाते हैं. इस वजह से आपको ऐप्लिकेशन से सूचनाएं नहीं मिलतीं"</string>
<string name="private_space_apps_permission_text" msgid="4416201648436201393">"प्राइवेट स्पेस का इस्तेमाल, बैकग्राउंड में चलाए जाने वाले या ज़रूरी सूचनाएं भेजने वाले ऐप्लिकेशन के लिए नहीं किया जा सकता. जैसे, चिकित्सा से जुड़े ऐप्लिकेशन. ऐसा इसलिए है, क्योंकि स्पेस के लॉक होने पर सूचनाएं भेजने की सुविधा और बैकग्राउंड में चल रही गतिविधि बंद हो जाती है.\n\nप्राइवेट स्पेस के लॉक होने पर, उसमें मौजूद ऐप्लिकेशन, \'अनुमतियों को मैनेज करें\' सेक्शन, प्राइवसी डैशबोर्ड, और अन्य सेटिंग में नहीं दिखेंगे.\n\nआपके प्राइवेट स्पेस को किसी नए डिवाइस में ट्रांसफ़र नहीं किया जा सकता. किसी दूसरे डिवाइस में इस्तेमाल करने के लिए, आपको दूसरा प्राइवेट स्पेस सेट अप करना होगा.\n\nआपके डिवाइस को कंप्यूटर से कनेक्ट करने या डिवाइस में, नुकसान पहुंचाने वाले ऐप्लिकेशन इंस्टॉल करने वाला व्यक्ति आपके प्राइवेट स्पेस को ऐक्सेस कर सकता है."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"प्राइवेट स्पेस का इस्तेमाल, बैकग्राउंड में चलाए जाने वाले या ज़रूरी सूचनाएं भेजने वाले ऐप्लिकेशन के लिए नहीं किया जा सकता. जैसे, चिकित्सा से जुड़े ऐप्लिकेशन. ऐसा इसलिए है, क्योंकि स्पेस के लॉक होने पर सूचनाएं भेजने की सुविधा और बैकग्राउंड में चल रही गतिविधि बंद हो जाती है.\n\nप्राइवेट स्पेस के लॉक होने पर, उसमें मौजूद ऐप्लिकेशन, \'अनुमतियों को मैनेज करें\' सेक्शन, प्राइवसी डैशबोर्ड, और अन्य सेटिंग में नहीं दिखेंगे.\n\nआपके प्राइवेट स्पेस को किसी नए डिवाइस पर नहीं ले जाया जा सकता. किसी दूसरे डिवाइस में इस्तेमाल करने के लिए, आपको दूसरा स्पेस सेट अप करना होगा.\n\nआपके डिवाइस को कंप्यूटर से कनेक्ट करने या डिवाइस में, नुकसान पहुंचाने वाले ऐप्लिकेशन इंस्टॉल करने वाला व्यक्ति आपके प्राइवेट स्पेस को ऐक्सेस कर सकता है."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"प्राइवेट स्पेस का इस्तेमाल करना, बैकग्राउंड में चलने या ज़रूरी सूचनाएं भेजने वाले ऐप्लिकेशन के लिए ठीक नहीं होता. जैसे, चिकित्सा से जुड़े ऐप्लिकेशन. ऐसा इसलिए है, क्योंकि स्पेस लॉक होने पर, सूचनाएं भेजने की सुविधाएं और बैकग्राउंड में चल रही गतिविधियां बंद हो जाती हैं.\n\nप्राइवेट स्पेस के लॉक होने पर, उसमें मौजूद ऐप्लिकेशन, \'अनुमतियों को मैनेज करें\' सेक्शन, प्राइवसी डैशबोर्ड, और अन्य सेटिंग में नहीं दिखेंगे.\n\nआपके प्राइवेट स्पेस को किसी नए डिवाइस पर नहीं ले जाया जा सकता. किसी दूसरे डिवाइस में इस्तेमाल करने के लिए, आपको दूसरा स्पेस सेट अप करना होगा.\n\nअगर कोई व्यक्ति आपके डिवाइस को किसी कंप्यूटर से कनेक्ट करता है या डिवाइस में नुकसान पहुंचाने वाले ऐप्लिकेशन इंस्टॉल करता है, तो वह आपके प्राइवेट स्पेस को ऐक्सेस कर सकता है."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"प्राइवेट स्पेस के बारे में ज़्यादा जानें"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"इसमें कुछ समय लगेगा"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"प्राइवेट स्पेस सेट अप किया जा रहा है…"</string>
@@ -1834,7 +1838,7 @@
<string name="filter" msgid="9039576690686251462">"फ़िल्टर"</string>
<string name="filter_dlg_title" msgid="3086282431958601338">"फ़िल्टर विकल्प चुनें"</string>
<string name="filter_apps_all" msgid="5705421199299914620">"सभी ऐप्लिकेशन"</string>
- <string name="filter_apps_disabled" msgid="5068011814871004105">"अक्षम किए गए ऐप"</string>
+ <string name="filter_apps_disabled" msgid="5068011814871004105">"बंद किए गए ऐप"</string>
<string name="filter_apps_third_party" msgid="9049447784849114843">"डाउनलोड किए गए"</string>
<string name="filter_apps_running" msgid="535465683273284141">"चल रहे ऐप्लिकेशन"</string>
<string name="not_installed" msgid="5074606858798519449">"इस उपयोगकर्ता के लिए इंस्टॉल नहीं किया गया"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"सुलभता सुविधा"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"सामान्य कीबोर्ड"</string>
<string name="bounce_keys" msgid="7419450970351743904">"बाउंस बटन"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"एक ही बटन को बार-बार दबाने पर, कीबोर्ड तुरंत कोई कार्रवाई नहीं करेगा"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"बाउंस बटन का थ्रेशोल्ड"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"चुनें कि किसी बटन को कितनी देर तक बार-बार दबाने पर कीबोर्ड कोई कार्रवाई नहीं करेगा"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 सेकंड"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 सेकंड"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 सेकंड"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"अपने हिसाब से सेट करें"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"अपने हिसाब से वैल्यू सेट करें"</string>
<string name="slow_keys" msgid="2891452895499690837">"स्लो बटन"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"किसी बटन को दबाने पर स्क्रीन पर होने वाली प्रतिक्रिया के समय में बदलाव करें"</string>
<string name="sticky_keys" msgid="7317317044898161747">"स्टिकी बटन"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"शॉर्टकट के लिए, कई कुंजियों को एक साथ दबाकर रखने के बजाय एक बार में एक कुंजी दबाएं"</string>
<string name="mouse_keys" msgid="6237254627808525540">"माउस का काम करने वाले बटन"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"पॉइंटर को कंट्रोल करने के लिए, कीबोर्ड का इस्तेमाल करें"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"माउस रिवर्स स्क्रोलिंग"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"पेज को नीचे ले जाने के लिए, ऊपर की ओर स्क्रोल करें"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"बाएं और दाएं बटन स्वैप करें"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"माउस के बाएं बटन को दाएं बटन की तरह इस्तेमाल करें"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"कीबोर्ड शॉर्टकट"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"शॉर्टकट की सूची दिखाएं"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> के लिए, कोई नई कुंजी चुनें:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"फ़िज़िकल कीबोर्ड की सुलभता सेटिंग"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"स्टिकी बटन, बाउंस बटन, माउस बटन"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"बटन को दबाकर रखें"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"कीबोर्ड का बटन दबाकर दोहराने में लगने वाला समय"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"दोहराने की दर"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"किसी बटन को दबाकर रखने पर, उस बटन का वर्ण तब तक दोहराया जाएगा, जब तक बटन को छोड़ा नहीं जाता"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> का लेआउट"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"डिफ़ॉल्ट"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"अपने-आप चुना गया: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2236,7 +2254,7 @@
<string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"स्क्रीन पर सबसे नीचे मौजूद, सुलभता बटन <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> पर टैप करें. सुविधाओं के बीच स्विच करने के लिए, सुलभता बटन को दबाकर रखें."</string>
<string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{स्क्रीन पर नीचे से ऊपर की ओर स्वाइप करें. सुविधाओं के बीच स्विच करने के लिए, ऊपर की ओर स्वाइप करें और दबाकर रखें.}one{स्क्रीन पर # उंगली से नीचे से ऊपर की ओर स्वाइप करें. सुविधाओं के बीच स्विच करने के लिए, स्क्रीन पर # उंगली से ऊपर की ओर स्वाइप करें और दबाकर रखें.}other{स्क्रीन पर # उंगलियों से नीचे से ऊपर की ओर स्वाइप करें. सुविधाओं के बीच स्विच करने के लिए, स्क्रीन पर # उंगलियों से ऊपर की ओर स्वाइप करें और दबाकर रखें.}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_floating" msgid="4459254227203203324"><annotation id="link">"और विकल्प"</annotation></string>
- <string name="footer_learn_more_content_description" msgid="8843798273152131341">"<xliff:g id="SERVICE">%1$s</xliff:g> के बारे में ज़्यादा जानें"</string>
+ <string name="footer_learn_more_content_description" msgid="8843798273152131341">"<xliff:g id="SERVICE">%1$s</xliff:g> सुविधा के बारे में ज़्यादा जानें"</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"क्विक सेटिंग"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings" msgid="739883998754165940">"{count,plural, =1{स्क्रीन पर सबसे ऊपर से नीचे की ओर स्वाइप करें}one{स्क्रीन पर # उंगली से, सबसे ऊपर से नीचे की ओर स्वाइप करें}other{स्क्रीन पर # उंगलियों से, सबसे ऊपर से नीचे की ओर स्वाइप करें}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw" msgid="4216628328191609785">"{count,plural, =1{स्क्रीन पर ऊपर से नीचे की ओर स्वाइप करें. यह शॉर्टकट, डिवाइस का सेटअप पूरा करने के बाद उपलब्ध होगा.}one{स्क्रीन पर # उंगली से, ऊपर से नीचे की ओर स्वाइप करें. यह शॉर्टकट, डिवाइस का सेटअप पूरा करने के बाद उपलब्ध होगा.}other{स्क्रीन पर # उंगलियों से, ऊपर से नीचे की ओर स्वाइप करें. यह शॉर्टकट, डिवाइस का सेटअप पूरा करने के बाद उपलब्ध होगा.}}"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"झलक"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"मानक विकल्प"</string>
<string name="captioning_locale" msgid="5533303294290661590">"भाषा"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"कैप्शन का साइज़"</string>
<string name="captioning_preset" msgid="4174276086501638524">"कैप्शन की स्टाइल"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"आपके मुताबिक विकल्प"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"पृष्ठभूमि का रंग"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"पावर उपयोग एडजस्ट करें"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"शामिल पैकेज"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ऐप्लिकेशन सामान्य रूप से काम कर रहे हैं"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"बैटरी कम है"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर को चालू करें"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"बैटरी लाइफ़ बढ़ाएं"</string>
@@ -2883,7 +2904,7 @@
<string name="background_data_summary" msgid="6572245922513522466">"ऐप्लिकेशन किसी भी समय डेटा सिंक कर सकते हैं, भेज और पा सकते हैं"</string>
<string name="background_data_dialog_title" msgid="1692005302993229867">"पृष्ठभू. डेटा अक्षम करें?"</string>
<string name="background_data_dialog_message" msgid="7760280837612824670">"बैकग्राउंड डेटा को बंद करने से बैटरी ज़्यादा चलती है और डेटा कम खर्च होता है. हो सकता है कि कुछ ऐप अब भी बैकग्राउंड में डेटा इस्तेमाल कर रहे हों."</string>
- <string name="sync_enabled" msgid="5794103781356455043">"समन्वयन चालू है"</string>
+ <string name="sync_enabled" msgid="5794103781356455043">"सिंक करने की सेटिंग चालू है"</string>
<string name="sync_disabled" msgid="1636223106968593391">"सिंक बंद है"</string>
<string name="sync_error" msgid="846923369794727644">"समन्वयन गड़बड़ी"</string>
<string name="last_synced" msgid="1527008461298110443">"पिछली बार सिंक करने का समय: <xliff:g id="LAST_SYNC_TIME">%1$s</xliff:g>"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"इस VPN को डिसकनेक्ट करना चाहते हैं?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"डिसकनेक्ट करें"</string>
<string name="vpn_version" msgid="6344167191984400976">"वर्शन"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"वर्शन <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"इस वीपीएन नेटवर्क को हटाएं"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"मौजूदा वीपीएन को बदलें?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"हमेशा-चालू VPN सेट करें?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"सोमवार से शुक्रवार, सुबह 9 से 5 बजे तक\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"कैलेंडर इवेंट"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} चालू है}=2{{mode_1} और {mode_2} चालू हैं}=3{{mode_1}, {mode_2}, और {mode_3} चालू हैं}one{{mode_1}, {mode_2}, और # अन्य मोड चालू है}other{{mode_1}, {mode_2}, और # अन्य मोड चालू हैं}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 मोड अपने-आप चालू हो सकता है}one{# मोड अपने-आप चालू हो सकता है}other{# मोड अपने-आप चालू हो सकते हैं}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"चालू है"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"सेट नहीं है"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"बंद है"</string>
@@ -3757,11 +3780,11 @@
<string name="channel_notifications_off_desc" msgid="6202042207121633488">"आपके अनुरोध पर, Android इस कैटगरी की सूचनाओं को इस डिवाइस पर ब्लॉक कर रहा है"</string>
<string name="channel_group_notifications_off_desc" msgid="9096417708500595424">"आपके अनुरोध पर, Android इस तरह की सूचनाओं को इस डिवाइस पर आने से रोक रहा है"</string>
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"यह ऐप्लिकेशन सूचनाएं नहीं भेजता"</string>
- <string name="notification_channels" msgid="1502969522886493799">"कैटगरी"</string>
+ <string name="notification_channels" msgid="1502969522886493799">"सूचना भेजने के चैनल"</string>
<string name="notification_channels_other" msgid="18159805343647908">"अन्य"</string>
- <string name="no_channels" msgid="4716199078612071915">"इस ऐप्लिकेशन ने कोई भी सूचना पोस्ट नहीं की है"</string>
- <string name="no_recent_channels" msgid="5068574296267584043">"इस्तेमाल नहीं की गई कैटगरी दिखाएं"</string>
- <string name="app_settings_link" msgid="6725453466705333311">"ऐप्लिकेशन की दूसरी सेटिंग"</string>
+ <string name="no_channels" msgid="4716199078612071915">"इस ऐप्लिकेशन ने कोई भी सूचना नहीं भेजी है"</string>
+ <string name="no_recent_channels" msgid="5068574296267584043">"सूचना भेजने के लिए जिन चैनल का इस्तेमाल नहीं किया गया उन्हें दिखाएं"</string>
+ <string name="app_settings_link" msgid="6725453466705333311">"ऐप्लिकेशन की अन्य सेटिंग"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"इस्तेमाल न हुई कैटगरी दिखाएं"</string>
<string name="hide_unused_channels" msgid="2019739275175707170">"इस्तेमाल न हुई कैटगरी छिपाएं"</string>
<string name="deleted_channels" msgid="8489800381509312964">"{count,plural, =1{# चैनल मिटाया गया}one{# चैनल मिटाया गया}other{# चैनल मिटाए गए}}"</string>
@@ -3997,7 +4020,7 @@
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"समर्थित लिंक"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"अन्य डिफ़ॉल्ट प्राथमिकताएं"</string>
<string name="app_launch_add_link" msgid="8622558044530305811">"लिंक जोड़ें"</string>
- <string name="app_launch_footer" msgid="4521865035105622557">"कोई ऐप्लिकेशन, लिंक की पुष्टि कर सकता है कि वे सुरक्षित हैं या नहीं. सुरक्षित पाए जाने पर लिंक को अनुमति दी जाती है कि वे उस ऐप्लिकेशन में अपने-आप खुल सकें."</string>
+ <string name="app_launch_footer" msgid="4521865035105622557">"कोई ऐप्लिकेशन इस बात की पुष्टि कर सकता है कि कोई लिंक सुरक्षित है या नहीं. जब लिंक सुरक्षित पाया जाता है, तभी अनुमति दी जाती है कि वह उस ऐप्लिकेशन में अपने-आप खुल सके."</string>
<string name="app_launch_verified_links_title" msgid="621908751569155356">"{count,plural, =1{# लिंक की पुष्टि हो चुकी है}one{# लिंक की पुष्टि हो चुकी है}other{# लिंक की पुष्टि हो चुकी है}}"</string>
<string name="app_launch_verified_links_message" msgid="190871133877476176">"{count,plural, =1{इस लिंक की पुष्टि हो चुकी है. यह अपने-आप ही इस ऐप्लिकेशन में खुलता है.}one{इस लिंक की पुष्टि हो चुकी है. यह अपने-आप ही इस ऐप्लिकेशन में खुलता है.}other{इन लिंक की पुष्टि हो चुकी है. ये अपने-आप ही इस ऐप्लिकेशन में खुलते हैं.}}"</string>
<string name="app_launch_dialog_ok" msgid="1446157681861409861">"ठीक है"</string>
@@ -5341,7 +5364,7 @@
<string name="grammatical_gender_title" msgid="8584242850477270828">"व्याकरण के हिसाब से लिंग"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"व्याकरण के हिसाब से लिंग चुनें"</string>
<string name="content_protection_preference_title" msgid="5069260032659193074">"धोखाधड़ी वाले ऐप्लिकेशन का पता लगाने के लिए स्कैनिंग सुविधा"</string>
- <string name="content_protection_preference_summary" msgid="2252393849408445391">"फ़िशिंग का पता लगाने के लिए, ऐप्लिकेशन में की गई गतिविधि की जांच करें"</string>
+ <string name="content_protection_preference_summary" msgid="2252393849408445391">"फ़िशिंग का पता लगाने के लिए, ऐप्लिकेशन की गतिविधि की जांच करें"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"स्कैनिंग सुविधा से धोखाधड़ी वाले ऐप्लिकेशन का पता लगाएं"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"स्कैनिंग सुविधा से, वर्क प्रोफ़ाइल में मौजूद धोखाधड़ी वाले ऐप्लिकेशन का पता लगाएं"</string>
<string name="content_protection_preference_subpage_summary" msgid="3595621220981703364"></string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"सेटिंग खोजें"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"संपर्क, स्टोरेज, खाता"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"संपर्क स्टोरेज"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"डिफ़ॉल्ट खाता सेट नहीं किया गया है"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"संपर्क सिर्फ़ डिवाइस में सेव करें"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"नए संपर्क किसी खाते से सिंक नहीं किए जाएंगे"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"डिफ़ॉल्ट रूप से, संपर्क आपके डिवाइस में सेव हो जाएंगे और आपके खाते से सिंक हो जाएंगे"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"डिफ़ॉल्ट खाता सेट करने में गड़बड़ी हुई"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"कोई डिफ़ॉल्ट खाता सेट नहीं किया गया है"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"सिर्फ़ डिवाइस का इस्तेमाल करें"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"सिंक करने के लिए कोई खाता जोड़ें"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"सर्कल बनाकर ढूंढें"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"स्क्रीन पर दिख रहे कॉन्टेंट की मदद से कोई चीज़ खोजने के लिए, होम बटन या नेविगेशन हैंडल को दबाकर रखें."</string>
</resources>
diff --git a/res/values-hr/arrays.xml b/res/values-hr/arrays.xml
index 3af0878..baef0e8 100644
--- a/res/values-hr/arrays.xml
+++ b/res/values-hr/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snježna pahuljica"</item>
<item msgid="7952183800501346803">"Suncobran za plažu"</item>
<item msgid="799139025758265891">"Radionički alati"</item>
- <item msgid="1330084588359129896">"Šator"</item>
+ <item msgid="8112685757657659269">"Klavir"</item>
<item msgid="3861584909935022342">"Filmska vrpca"</item>
<item msgid="5827426100157335512">"Knjiga"</item>
<item msgid="8585828346253128384">"Lotosov cvijet"</item>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 0e4123c..eec0886 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Onemogući Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Onemogućuje značajku Bluetooth LE audio ako uređaj podržava mogućnosti za LE audio hardvera."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Način Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Prikaži prekidač LE audio u pojedinostima o uređaju"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Zaobiđi popis dopuštenih za Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Upotrebljavajte LE Audio prema zadanim postavkama čak i ako nije potvrđeno da LE Audio periferni uređaj ispunjava kriterije za popis dopuštenih."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Postavi automatski pomoću mreže i bežičnih signala"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatska vremenska zona"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Automatski postavi na temelju mobilnih mreža u blizini"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Postavi automatski pomoću lokacije uređaja, ako je dostupna. Možda je potrebna i aktivna Wi-Fi veza."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Postavi automatski pomoću lokacije uređaja, ako je dostupna"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Koristi zadani lokalni format"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Koristi 24-satni format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Vrijeme"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Tipkovnica zanemaruje brzo ponovljene pritiske iste tipke"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Prag zanemarivanja slučajnih pritisaka"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Odaberite koliko dugo će tipkovnica zanemarivati ponovljene pritiske tipki"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Prilagođeno"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"prilagođena vrijednost"</string>
<string name="slow_keys" msgid="2891452895499690837">"Spore tipke"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Prilagođava vrijeme potrebno za aktivaciju pritiska tipke"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Ljepljive tipke"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Pritisnite jednu po jednu tipku za prečace umjesto da ih pritisnete zajedno"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tipke miša"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Upravljajte pokazivačem pomoću tipkovnice"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Obrnuto pomicanje pomoću miša"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Pomičite se prema gore za pomicanje stranice prema dolje"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Zamjena lijeve i desne tipke"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Upotrebljavajte lijevu tipku miša kao desnu"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Tipkovni prečaci"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Prikaži popis prečaca"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Tipkovnice i alati radnog profila"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Odaberite novu tipku za <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Pristupačnost fizičke tipkovnice"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Ljepljive tipke, sprečavanje slučajnih pritisaka tipki, tipke miša"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Tipke za ponavljanje unosa"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Odgodi prije ponavljanja"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Stopa ponavljanja"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pritisnite tipku i zadržite pritisak da biste ponavljali unos znaka dok je ne otpustite"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Izgled: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Zadano"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatski: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Pregled"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardne opcije"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Jezik"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Veličina titlova"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stil titlova"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Prilagođene opcije"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Boja pozadine"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Podesi potrošnju energije"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Uključeni paketi"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikacije se izvode na uobičajen način"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Niska razina baterije"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Uključite štednju baterije radi produljenja trajanja baterije"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Produljenje trajanja baterije"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Prekinuti vezu s VPN-om?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini vezu"</string>
<string name="vpn_version" msgid="6344167191984400976">"Verzija"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Verzija <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Zaboravi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite li zamijeniti dosadašnji VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Želite li postaviti uvijek uključeni VPN?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00 – 17:00, radnim danom\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Događaji iz kalendara"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Aktivno: {mode_1}}=2{Aktivno: {mode_1} i {mode_2}}=3{Aktivno: {mode_1}, {mode_2} i {mode_3}}one{Aktivno: {mode_1}, {mode_2} i još #}few{Aktivno: {mode_1}, {mode_2} i još #}other{Aktivno: {mode_1}, {mode_2} i još #}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Jedan način može se automatski uključiti}one{# način može se automatski uključiti}few{# načina mogu se automatski uključiti}other{# načina može se automatski uključiti}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"UKLJUČENO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nije postavljeno"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Onemogućeno"</string>
@@ -3701,7 +3732,7 @@
<string name="notif_listener_more_settings" msgid="1348409392307208921">"Više postavki"</string>
<string name="notif_listener_more_settings_desc" msgid="7995492074281663658">"Više postavki dostupno je unutar aplikacije"</string>
<string name="notification_polite_title" msgid="6121016426991791557">"Postupno stišavanje obavijesti"</string>
- <string name="notification_polite_main_control_title" msgid="5812529809151927149">"Postupno stišavanje obavijesti"</string>
+ <string name="notification_polite_main_control_title" msgid="5812529809151927149">"Postupno stišaj obavijesti"</string>
<string name="notification_polite_description" msgid="5497748284893832854">"Ako u kratkom vremenskom razdoblju primite velik broj obavijesti, uređaj će smanjiti glasnoću i minimizirati upozorenja u trajanju do dvije minute. To ne utječe na pozive, alarme i prioritetne razgovore. \n\nObavijesti primljene tijekom stišavanja mogu se pronaći tako da povučete prstom prema dolje s vrha zaslona."</string>
<string name="notification_polite_work" msgid="8823596456640216391">"Primijeni na poslovne profile"</string>
<string name="notification_polite_work_summary" msgid="5014189280132951378">"Primjenjuje se na aplikacije poslovnog profila"</string>
@@ -4395,7 +4426,7 @@
<string name="dark_theme_slice_title" msgid="4684222119481114062">"Isprobajte Tamnu temu"</string>
<string name="dark_theme_slice_subtitle" msgid="5555724345330434268">"Pomaže produljiti trajanje baterije"</string>
<string name="quick_settings_developer_tiles" msgid="7336007844525766623">"Pločice brzih postavki za razvojne programere"</string>
- <string name="adb_authorization_timeout_title" msgid="6996844506783749754">"Onemogući vrijeme čekanja za autorizacije za adb"</string>
+ <string name="adb_authorization_timeout_title" msgid="6996844506783749754">"Onemogući istek vremena za autorizaciju ADB-a"</string>
<string name="adb_authorization_timeout_summary" msgid="409931540424019778">"Onemogućite automatski opoziv autorizacija za adb za sustave koji se ne povežu u zadanom razdoblju (sedam dana) ili korisnički konfiguriranom razdoblju (najmanje jedan dan)."</string>
<string name="sensors_off_quick_settings_title" msgid="8472151847125917167">"Senzori su isključeni"</string>
<string name="managed_profile_settings_title" msgid="3400923723423564217">"Postavke poslovnog profila"</string>
@@ -4924,7 +4955,7 @@
<string name="network_connection_errorstate_dialog_message" msgid="3360714322047603239">"Došlo je do pogreške. Aplikacija je otkazala zahtjev za odabir uređaja."</string>
<string name="network_connection_connect_successful" msgid="2587314077675642476">"Povezivanje je uspjelo"</string>
<string name="network_connection_connect_failure" msgid="6803313816657494319">"Povezivanje nije uspjelo"</string>
- <string name="network_connection_request_dialog_showall" msgid="6392059758456994944">"Pokaži sve"</string>
+ <string name="network_connection_request_dialog_showall" msgid="6392059758456994944">"Prikaži sve"</string>
<string name="network_connection_searching_message" msgid="8521819623516926482">"Traženje uređaja…"</string>
<string name="network_connection_connecting_message" msgid="433189540877274889">"Povezivanje s uređajem…"</string>
<string name="bluetooth_left_name" msgid="7440064067910080502">"Lijevo"</string>
@@ -5445,7 +5476,7 @@
<string name="audio_streams_main_page_device_title" msgid="2635744035523908253">"Vaš audiouređaj"</string>
<string name="audio_streams_main_page_no_device_summary" msgid="2936000845397406389">"Poveži kompatibilne slušalice"</string>
<string name="audio_streams_main_page_scan_section_title" msgid="2778235929304061163">"Audiostreamovi u blizini"</string>
- <string name="audio_streams_main_page_scan_qr_code_title" msgid="8337270277392468895">"Skeniranje QR koda"</string>
+ <string name="audio_streams_main_page_scan_qr_code_title" msgid="8337270277392468895">"Skenirajte QR kod"</string>
<string name="audio_streams_main_page_scan_qr_code_summary" msgid="1991792283368249499">"Skenirajte QR kôd streama i počnite slušati"</string>
<string name="audio_streams_main_page_password_dialog_join_button" msgid="2967747276379153408">"Slušajte stream"</string>
<string name="audio_streams_main_page_qr_code_scanner_summary" msgid="5312980105735143360">"Skenirajte QR kôd audiostreama da biste slušali s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
@@ -5458,6 +5489,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Samo uređaj"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Novi kontakti neće se sinkronizirati s računom"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakti će se spremiti na vaš uređaj i prema zadanim postavkama sinkronizirati s vašim računom"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nema zadane postavke"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Pogreška pri postavljanju zadanog računa"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nema zadane postavke"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Samo uređaj"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Dodajte račun da biste započeli"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Zaokružite i potražite"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Dodirnite gumb početnog zaslona ili oznaku za navigaciju i zadržite pritisak za pretraživanje pomoću sadržaja na vašem zaslonu."</string>
</resources>
diff --git a/res/values-hu/arrays.xml b/res/values-hu/arrays.xml
index d6002b8..44532f9 100644
--- a/res/values-hu/arrays.xml
+++ b/res/values-hu/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Hópehely"</item>
<item msgid="7952183800501346803">"Strandernyő"</item>
<item msgid="799139025758265891">"Workshop-eszközök"</item>
- <item msgid="1330084588359129896">"Sátor"</item>
+ <item msgid="8112685757657659269">"Zongora"</item>
<item msgid="3861584909935022342">"Filmtekercs"</item>
<item msgid="5827426100157335512">"Könyv"</item>
<item msgid="8585828346253128384">"Lótuszvirág"</item>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 26bb57c..cef2224 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE hangátvitel kikapcsolása"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Kikapcsolja a Bluetooth alacsony energiaszintű hangátvitel funkciót, ha az eszköz támogatja az Alacsony energiaszintű hangátvitel hardver működését."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth alacsony energiaszintű hangátvitel mód"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"„Alacsony energiaszintű hangátvitel” az Eszközadatokban"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth alacsony energiaszintű hangátvitel engedélyezőlistájának megkerülése"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Alacsony energiaszintű hangátvitel használata alapértelmezés szerint akkor is, ha az Alacsony energiaszintű hangátvitelt használó periféria nem teljesíti igazoltan az engedélyezőlista feltételeit."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Automatikus beállítás a hálózat és a vezeték nélküli jelek alapján"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatikus időzóna"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Automatikus beállítás a közeli mobilhálózatok alapján"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Automatikus beállítás az eszköz helyadatai alapján (ha rendelkezésre állnak). Aktív Wi-Fi-re is szükség lehet."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Automatikus beállítás az eszköz helyadatai alapján (ha rendelkezésre állnak)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Helyi alapértelmezés használata"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 órás formátum használata"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Idő"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Kisegítő lehetőségek"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fizikai billentyűzet"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Billentyűblokkolás"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"A billentyűzet nem veszi figyelembe, ha ugyanazt a billentyűt gyorsan egymás után többször is lenyomja."</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Billentyűblokkolás küszöbértéke"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Válassza ki, hogy a billentyűzet mennyi ideig hagyja figyelmen kívül az ismétlődő gombnyomásokat."</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 mp"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 mp"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 mp"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Egyéni"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"egyéni érték"</string>
<string name="slow_keys" msgid="2891452895499690837">"Lassú billentyűk"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Módosítja a billentyű lenyomásától az aktiválásig eltelő időtartamot."</string>
<string name="sticky_keys" msgid="7317317044898161747">"Beragadó billentyűk"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Egyszerre egy billentyű lenyomásával használhat billentyűparancsokat több billentyű egyszeri lenyomva tartása helyett"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Egérgombok"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"A billentyűzettel vezérelheti a mutatót."</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Fordított görgetés az egérrel"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Az oldal lefelé mozgatásához görgessen felfelé"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Bal és jobb gomb felcserélése"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"A bal egérgomb használata jobb egérgombként"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Billentyűparancsok"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Billentyűparancsok listájának megjelenítése"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Válasszon új billentyűt a(z) <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> számára:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Fizikai billentyűzet kisegítő lehetőségei"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Beragadó billentyűk, billentyűblokkolás, egérgombok"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Ismétlődő billentyűk"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Ismétlés előtti késleltetés"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Ismétlési sebesség"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Ha lenyomva tartja valamelyik billentyűt, a billentyűhöz tartozó karakter többször is bevitelre kerül, amíg fel nem emeli az ujját."</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> elrendezés"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Alapértelmezett"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatikus: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Előnézet"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Normál beállítások"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Nyelv"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Felirat mérete"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Felirat stílusa"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Egyéni beállítások"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Háttérszín"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Az energiafelhasználás beállítása"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Mellékelt csomagok"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Az alkalmazások megfelelően futnak"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Alacsony töltöttség"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Az akkumulátor üzemidejének meghosszabbításához kapcsolja be az Akkumulátorkímélő módot"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Az akkumulátor élettartamának növelése"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Leválasztja a VPN-t?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Leválasztás"</string>
<string name="vpn_version" msgid="6344167191984400976">"Verzió"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Verzió: <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN elfelejtése"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Lecseréli a meglévő VPN-t?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Beállítja a mindig bekapcsolt VPN-t?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„Reggel kilenctől délután ötig, hétköznapokon”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Naptáresemények"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{A(z) {mode_1} aktív}=2{{mode_1} és {mode_2} aktív}=3{{mode_1}, {mode_2} és {mode_3} aktív}other{{mode_1}, {mode_2} és # egyéb aktív}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mód automatikusan bekapcsolódhat}other{# mód automatikusan bekapcsolódhat}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"BE"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nincs beállítva"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Kikapcsolva"</string>
@@ -5340,7 +5363,7 @@
<string name="about_phone_device_name_warning" msgid="3243226572404472381">"Eszköze neve látható a telepített alkalmazások számára. Mások is láthatják, ha csatlakoztatja telefonját más Bluetooth-eszközökhöz, Wi-Fi-hálózathoz, vagy ha Wi-Fi-hotspotot állít be."</string>
<string name="grammatical_gender_title" msgid="8584242850477270828">"Nyelvtani nem"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"Nyelvtani nem kiválasztása"</string>
- <string name="content_protection_preference_title" msgid="5069260032659193074">"Megtévesztő alkalmazások keresése…"</string>
+ <string name="content_protection_preference_title" msgid="5069260032659193074">"Megtévesztő alkalmazások keresése"</string>
<string name="content_protection_preference_summary" msgid="2252393849408445391">"Adathalászat keresése az alkalmazástevékenységekben"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"Megtévesztő alkalmazások keresése"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"Megtévesztő munkahelyi alkalmazások keresése"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Keresési beállítások"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"névjegyek, tárhely, fiók"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Névjegytár"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nincs alapértelmezett beállítás"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Csak az eszközön"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Az új névjegyeket semmilyen fiókkal nem szinkronizálja a rendszer."</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"A névjegyek alapértelmezés szerint az eszközére lesznek mentve, és szinkronizálódnak a fiókjával."</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Hiba történt az alapértelmezett fiók beállításakor"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nincs alapértelmezett beállítás"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Csak a készüléken"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"A kezdéshez adjon hozzá egy fiókot."</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Bekarikázással keresés"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Tartsa lenyomva a Kezdőképernyő gombot vagy a navigációs fogópontot a képernyőn lévő tartalommal való kereséshez."</string>
</resources>
diff --git a/res/values-hy/arrays.xml b/res/values-hy/arrays.xml
index b64125d..5ea9fd9 100644
--- a/res/values-hy/arrays.xml
+++ b/res/values-hy/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Ձյան փաթիլ"</item>
<item msgid="7952183800501346803">"Լողափի հովանոց"</item>
<item msgid="799139025758265891">"Արհեստանոցի գործիքներ"</item>
- <item msgid="1330084588359129896">"Վրան"</item>
+ <item msgid="8112685757657659269">"Դաշնամուր"</item>
<item msgid="3861584909935022342">"Ֆիլմի սյուժե"</item>
<item msgid="5827426100157335512">"Գիրք"</item>
<item msgid="8585828346253128384">"Լոտոսի ծաղիկ"</item>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index 9994576..383ca95 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Անջատել Bluetooth LE Audio-ն"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Անջատում է Bluetooth LE Audio գործառույթը, եթե սարքն այն աջակցում է։"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio ռեժիմ"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Տեսնել LE Audio-ն սարքի տվյալներում"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Շրջանցել Bluetooth LE Audio-ի թույլատրվածների ցուցակը"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Օգտագործել LE Audio-ն ըստ կանխադրման, անգամ եթե LE Audio-ի արտաքին սարքի համապատասխանությունը թույլատրվածների ցուցակի չափանիշներին չի հաստատվել։"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Ավտոմատ կարգավորել՝ օգտագործելով ցանցը և անլար ազդանշանները"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Ժամային գոտու ավտոմատ որոշում"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Ավտոմատ սահմանել՝ հիմնվելով ձեր մոտակայքում գործող բջջային ցանցերի վրա"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Ավտոմատ կարգավորել՝ օգտագործելով սարքի տեղադրությունը, եթե առկա է։ Կարող է նաև պահանջվել Wi-Fi կապ։"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Ավտոմատ կարգավորել՝ օգտագործելով սարքի տեղադրությունը, եթե առկա է"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Օգտագործել կանխադրված տեղույթը"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Օգտագործել 24-ժամյա ձևաչափը"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Ժամը"</string>
@@ -1834,7 +1838,7 @@
<string name="filter" msgid="9039576690686251462">"Զտիչ"</string>
<string name="filter_dlg_title" msgid="3086282431958601338">"Ընտրել զտիչի ընտրանքները"</string>
<string name="filter_apps_all" msgid="5705421199299914620">"Բոլոր հավելվածները"</string>
- <string name="filter_apps_disabled" msgid="5068011814871004105">"Անջատած հավելվածներ"</string>
+ <string name="filter_apps_disabled" msgid="5068011814871004105">"Անջատված հավելվածներ"</string>
<string name="filter_apps_third_party" msgid="9049447784849114843">"Ներբեռնված"</string>
<string name="filter_apps_running" msgid="535465683273284141">"Աշխատեցվում է"</string>
<string name="not_installed" msgid="5074606858798519449">"Տեղադրված չէ այս օգտատիրոջ"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Հատուկ գործառույթներ"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Ֆիզիկական ստեղնաշար"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Կրկնակի սեղմման անտեսում"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Ստեղնաշարը անտեսում է միևնույն ստեղնի կրկնվող արագ սեղմումները"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Կրկնվող սեղմումների անտեսման շեմ"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Ընտրեք, թե որքան ժամանակ պետք է անտեսվեն ստեղնաշարի ստեղների կրկնվող սեղմումները"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 վ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 վ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 վ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Այլ"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"հատուկ արժեք"</string>
<string name="slow_keys" msgid="2891452895499690837">"Դանդաղ ստեղներ"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Կարգավորում է ժամանակի տևողությունը, որից հետո ստեղնը արձագանքում է սեղմմանը"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Կպչուն ստեղներ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Դյուրանցումների համար միաժամանակ սեղմեք մեկ ստեղն, այլ ոչ թե միասին սեղմած պահեք մի քանիսը"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Մկնիկի ստեղներ"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Ցուցիչը կառավարել ստեղնաշարի միջոցով"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Մկնիկով հետադարձ ոլորում"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Ոլորեք վերև՝ էջի ներքև անցնելու համար"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Տեղերով փոխել աջ և ձախ կոճակները"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Օգտագործեք մկնիկի ձախ կոճակը որպես աջը"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Ստեղնային դյուրանցումներ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Ցույց տալ ստեղնաշարի դյուրանցումների ցանկը"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Ընտրել նոր ստեղն <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> ստեղնի փոխարեն՝"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Ֆիզիկական ստեղնաշարի հատուկ գործառույթներ"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Կպչուն ստեղներ, Վերադարձի ստեղներ, Մկնիկի ստեղներ"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Ստեղների նիշերի կրկնություն"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Հապաղում կրկնությունից առաջ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Կրկնման արագությունը"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Կրկնել ստեղնի նիշն այնքան ժամանակ, քանի դեռ ստեղնը սեղմված է"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> դասավորություն"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Կանխադրված"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Ավտոմատ՝ <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Նախադիտում"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Սովորական ընտրանքներ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Լեզու"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Ենթագրերի չափսը"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Ենթագրերի ոճը"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Հատուկ ընտրանքներ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Ֆոնի գույնը"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Կարգավորել հոսանքի օգտագործումը"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Ներառված փաթեթները"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Հավելվածների աշխատանքում շեղումներ չեն հայտնաբերվել"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Մարտկոցի ցածր լիցք"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Միացրեք Մարտկոցի տնտեսումը՝ դրա աշխատաժամանակը երկարացնելու համար"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Երկարացրեք մարտկոցի աշխատաժամանակը"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Անջատե՞լ այս VPN-ը:"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Անջատել"</string>
<string name="vpn_version" msgid="6344167191984400976">"Տարբերակ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Տարբերակ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Մոռանալ VPN-ը"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Փոխարինե՞լ ընթացիկ VPN-ը:"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Սահմանե՞լ որպես «միշտ միացված» VPN:"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"«9:00 – 17:00, աշխատանքային օրեր»"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Օրացույցի միջոցառումներ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{«{mode_1}» ռեժիմն ակտիվ է}=2{«{mode_1}» և «{mode_2}» ռեժիմներն ակտիվ են}=3{«{mode_1}», «{mode_2}» և «{mode_3}» ռեժիմներն ակտիվ են}one{«{mode_1}» և «{mode_2}» ռեժիմներն ու ևս #-ը ակտիվ են}other{«{mode_1}» և «{mode_2}» ռեժիմներն ու ևս #-ը ակտիվ են}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ռեժիմ կարող է ավտոմատ միանալ}one{# ռեժիմ կարող է ավտոմատ միանալ}other{# ռեժիմ կարող է ավտոմատ միանալ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ՄԻԱՑՎԱԾ Է"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Կարգավորված չէ"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Անջատված է"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Որոնեք կարգավորումներում"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"կոնտակտներ, տարածք, հաշիվ"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Կոնտակտների տարածք"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Որևէ հաշիվ սահմանված չէ որպես կանխադրված"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Միայն սարքում"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Նոր կոնտակտները չեն համաժամացվի հաշվի հետ"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Կոնտակտներն ըստ կանխադրման կպահվեն սարքում և կհամաժամացվեն ձեր հաշվի հետ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Չհաջողվեց հաշիվը սահմանել որպես կանխադրված"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Կանխադրված հաշիվ չկա"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Միայն սարքում"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Սկսելու համար ավելացրեք հաշիվ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Շրջագծել որոնելու համար"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Հպեք և պահեք գլխավոր էկրանի կոճակը կամ նավիգացիայի նշիչը, որպեսզի որոնեք՝ օգտագործելով ձեր էկրանի բովանդակությունը։"</string>
</resources>
diff --git a/res/values-in/arrays.xml b/res/values-in/arrays.xml
index 55f7adf..cae7ae6 100644
--- a/res/values-in/arrays.xml
+++ b/res/values-in/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Kepingan salju"</item>
<item msgid="7952183800501346803">"Payung pantai"</item>
<item msgid="799139025758265891">"Alat workshop"</item>
- <item msgid="1330084588359129896">"Tenda"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Rol film"</item>
<item msgid="5827426100157335512">"Buku"</item>
<item msgid="8585828346253128384">"Bunga teratai"</item>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index a8bea08..6872bcb 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Nonaktifkan Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Nonaktifkan fitur Bluetooth LE Audio jika perangkat mendukung kemampuan hardware LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Mode Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Tampilkan tombol LE Audio di Detail Perangkat"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Abaikan Daftar yang Diizinkan Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Gunakan LE Audio secara default meskipun periferal LE Audio belum diverifikasi untuk memenuhi kriteria Daftar yang diizinkan."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Setel secara otomatis menggunakan jaringan dan sinyal nirkabel Anda"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Zona waktu otomatis"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Setel otomatis berdasarkan jaringan seluler di sekitar Anda"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Setel secara otomatis menggunakan lokasi perangkat, jika tersedia. Koneksi Wi-Fi yang aktif juga mungkin diperlukan."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Setel secara otomatis menggunakan lokasi perangkat, jika tersedia"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gunakan default lokalitas"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gunakan format 24 jam"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Waktu"</string>
@@ -924,7 +928,7 @@
<string name="show_hdr_sdr_ratio" msgid="4188007289024955585">"Tampilkan rasio HDR/SDR"</string>
<string name="show_hdr_sdr_ratio_summary" msgid="986292785096013733">"Tampilkan rasio HDR/SDR saat ini"</string>
<string name="nfc_quick_toggle_title" msgid="3607620705230351666">"NFC"</string>
- <string name="nfc_secure_settings_title" msgid="4906958426927741485">"Wajib buka kunci perangkat untuk NFC"</string>
+ <string name="nfc_secure_settings_title" msgid="4906958426927741485">"Wajibkan kunci perangkat dibuka untuk menggunakan NFC"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"Siap mentransmisikan konten apl melalui NFC"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"Mati"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Aksesibilitas"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Keyboard fisik"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Tombol pantul"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Keyboard mengabaikan penekanan tombol yang sama secara berulang dan cepat"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Batas tombol pantul"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Pilih durasi waktu keyboard Anda mengabaikan penekanan tombol berulang"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 dtk"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 dtk"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 dtk"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Kustom"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"Nilai kustom"</string>
<string name="slow_keys" msgid="2891452895499690837">"Tombol lambat"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Menyesuaikan waktu yang diperlukan penekanan tombol untuk diaktifkan"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Tombol lekat"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Tekan satu tombol pada satu waktu untuk mengaktifkan pintasan, bukan menekan tombol secara bersamaan"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tombol mouse"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Gunakan keyboard untuk mengontrol kursor"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Scroll terbalik mouse"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scroll ke atas untuk memindahkan halaman ke bawah"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Tukar tombol kiri dan kanan"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Gunakan tombol mouse kiri sebagai tombol kanan"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Pintasan keyboard"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Tampilkan daftar pintasan"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Pilih tombol baru untuk <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Aksesibilitas keyboard fisik"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Tombol lekat, Tombol pantul, Tombol mouse"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Tombol Ulangi"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Tunda sebelum mengulangi"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Rasio Pengulangan"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Menahan tombol untuk mengulangi karakternya hingga tombol dilepaskan"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Tata letak <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Default"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Otomatis: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Pratinjau"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opsi standar"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Bahasa"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Ukuran teks"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Gaya teks"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opsi khusus"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Warna latar belakang"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Sesuaikan penggunaan daya"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Termasuk paket"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikasi berjalan normal"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Tingkat daya baterai rendah"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Aktifkan Penghemat Baterai untuk memperpanjang masa pakai baterai"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Tingkatkan masa pakai baterai"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Putuskan sambungan VPN ini?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Putuskan koneksi"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versi"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versi <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Lupakan VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Ganti VPN yang sudah ada?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Setel VPN selalu aktif?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"09.00 - 17.00 hari kerja\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Acara kalender"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} aktif}=2{{mode_1} dan {mode_2} aktif}=3{{mode_1}, {mode_2}, dan {mode_3} aktif}other{{mode_1}, {mode_2}, dan # lainnya aktif}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode dapat otomatis diaktifkan}other{# mode dapat otomatis diaktifkan}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AKTIF"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Tidak disetel"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Dinonaktifkan"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Telusuri Setelan"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontak, penyimpanan, akun"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Penyimpanan kontak"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Tidak ada default yang disetel"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Perangkat saja"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Kontak baru tidak akan disinkronkan dengan akun"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontak akan disimpan ke perangkat dan disinkronkan ke akun Anda secara default"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Terjadi error saat menetapkan akun default"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Tidak ada default yang disetel"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Perangkat saja"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Tambahkan akun untuk memulai"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Lingkari untuk Menelusuri"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Sentuh lama tombol Layar utama atau tuas navigasi untuk menelusuri menggunakan konten di layar."</string>
</resources>
diff --git a/res/values-is/arrays.xml b/res/values-is/arrays.xml
index eacf406..bbc7b6f 100644
--- a/res/values-is/arrays.xml
+++ b/res/values-is/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snjókorn"</item>
<item msgid="7952183800501346803">"Sólhlíf"</item>
<item msgid="799139025758265891">"Verkfæri"</item>
- <item msgid="1330084588359129896">"Tjald"</item>
+ <item msgid="8112685757657659269">"Píanó"</item>
<item msgid="3861584909935022342">"Gamaldags filma"</item>
<item msgid="5827426100157335512">"Bók"</item>
<item msgid="8585828346253128384">"Lótusblóm"</item>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 50610bc..046e36e 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Slökkva á Bluetooth LE-hljóði"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Slekkur á Bluetooth LE-hljóðeiginleika ef tækið styður vélbúnaðareiginleika LE-hljóðs."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE-hljóðstilling"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Sýna rofa LE-hljóðs í tækjaupplýsingum"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Sneiða hjá hvítum lista Bluetooth LE-hljóðs"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Nota LE-hljóð sjálfkrafa jafnvel þótt jaðartæki LE-hljóðs hafi ekki verið staðfest með tilliti til skilyrða hvíta listans."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Stilla sjálfvirkt með því að nota merki netkerfis og þráðlaus merki"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Sjálfvirkt tímabelti"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Stilla sjálfvirkt samkvæmt farsímakerfum nálægt þér"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Stilla sjálfvirkt með því að nota staðsetningu tækis, ef tiltæk. Virkrar Wifi-tengingar kann einnig að vera krafist."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Sjálfvirk stilling út frá staðsetningu tækis, ef tiltæk"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Nota sjálfgefið snið staðar"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Nota 24 tíma snið"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Tími"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Aðgengi"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Vélbúnaðarlyklaborð"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Endurkastslyklar"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Lyklaborðið hunsar þegar þú ýtir snöggt og endurtekið á sama lykilinn"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Mörk endurkastslykils"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Veldu tímann sem lyklaborðið þitt hunsar lykil í þegar þú ýtir endurtekið á hann"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 sek."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 sek."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 sek."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Sérsniðið"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"sérsniðið gildi"</string>
<string name="slow_keys" msgid="2891452895499690837">"Hægir lyklar"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Breyttu tímanum sem það tekur fyrir lykil að virkjast eftir að þú ýtir á hann"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Festilyklar"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Ýttu á einn lykil í einu fyrir flýtilykla í staðinn fyrir að halda lyklum saman niðri"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Músarhnappar"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Notaðu lyklaborðið til að stjórna bendlinum"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Öfug fletting músar"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Flettu upp til að færa síðuna niður"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Víxla hægri og vinstri hnappi"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Notaðu vinstri músarhnappinn sem hægri hnapp"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Flýtilyklar"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Sýna lista yfir flýtileiðir"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Veldu nýjan lykil fyrir <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Aðgengi vélbúnaðarlyklaborðs"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Festilyklar, endurkastslyklar, músarhnappar"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Takkar fyrir endurtekningu"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Töf á undan endurtekningu"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Hraði endurtekninga"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Haltu takka niðri til að endurtaka stafi og slepptu til að hætta"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Útlit: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Sjálfgefið"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Sjálfvirkt: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Forskoða"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Hefðbundnir valkostir"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Tungumál"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Stærð skjátexta"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stíll texta"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Sérsniðnir valkostir"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Bakgrunnslitur"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Stilla orkunotkun"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Innifaldir pakkar"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Forrit virka eðlilega"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Lítil hleðsla á rafhlöðu"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Kveiktu á rafhlöðusparnaði til að auka endingu rafhlöðunnar"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Bæta rafhlöðuendingu"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Aftengja þessa VPN-tengingu?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Aftengja"</string>
<string name="vpn_version" msgid="6344167191984400976">"Útgáfa"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Útgáfa <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Gleyma VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Skipta út núverandi VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Velja VPN sem alltaf er kveikt á?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„9 f.h. - 5 e.h. á virkum dögum“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Dagatalsviðburðir"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} er virk}=2{{mode_1} og {mode_2} eru virkar}=3{{mode_1}, {mode_2} og {mode_3} eru virkar}one{{mode_1}, {mode_2} og # í viðbót eru virkar}other{{mode_1}, {mode_2} og # í viðbót eru virkar}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Ein stilling getur kveikt sjálfkrafa á sér}one{# stilling getur kveikt sjálfkrafa á sér}other{# stillingar geta kveikt sjálfkrafa á sér}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"KVEIKT"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ekki stillt"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Slökkt"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Leitarstillingar"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"tengiliðir, geymsla, reikningur"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Tengiliðageymsla"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ekkert sjálfgildi stillt"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Aðeins tæki"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nýir tengiliðir verða ekki samstilltir við reikning"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Tengiliðir verða sjálfkrafa vistaðir í tækinu þínu og samstilltir við reikninginn þinn"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Villa kom upp við að stilla sjálfgefinn reikning"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ekkert sjálfgildi stillt"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Aðeins tæki"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Bættu reikningi við til að hefjast handa"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Haltu heimahnappnum eða flettihandfanginu inni til að leita út frá efninu sem birtist á skjánum þínum."</string>
</resources>
diff --git a/res/values-it/arrays.xml b/res/values-it/arrays.xml
index 7c6fdf1..8969d0e 100644
--- a/res/values-it/arrays.xml
+++ b/res/values-it/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Fiocco di neve"</item>
<item msgid="7952183800501346803">"Ombrellone da spiaggia"</item>
<item msgid="799139025758265891">"Strumenti per il workshop"</item>
- <item msgid="1330084588359129896">"Tenda"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Pellicola"</item>
<item msgid="5827426100157335512">"Libro"</item>
<item msgid="8585828346253128384">"Fiore di loto"</item>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 398d538..7ed8b22 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Disattiva Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Disattiva la funzionalità Bluetooth LE audio se il dispositivo supporta funzioni hardware LE audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modalità Bluetooth LE audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Mostra comandi LE audio nei dettagli dispositivo"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Ignora lista consentita Bluetooth LE audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Usa LE audio per impostazione predefinita anche se non è stato verificato che la periferica LE audio soddisfa i criteri della lista consentita."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Imposta automaticamente la data e l\'ora utilizzando la rete e gli indicatori wireless"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuso orario automatico"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Imposta automaticamente la data e l\'ora in base alle reti mobile nelle tue vicinanze"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Imposta automaticamente la data e l\'ora utilizzando la posizione del dispositivo, se disponibile. Potrebbe essere necessaria anche una connessione Wi-Fi attiva."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Imposta automaticamente la data e l\'ora utilizzando la posizione del dispositivo, se disponibile"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usa impostazioni internazionali predefinite"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usa il formato 24 ore"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Ora"</string>
@@ -625,7 +629,7 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Nascondi o blocca le app private in uno spazio separato. Usa un Account Google dedicato per una maggiore sicurezza."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Come funziona"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crea un Account Google per il tuo spazio"</b>\n"L\'utilizzo di un account dedicato consente di interrompere la sincronizzazione di file, foto e email al di fuori del tuo spazio"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Imposta un blocco"</b>\n"Blocca il tuo spazio per impedire ad altre persone di aprirlo."</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Imposta un blocco"</b>\n"Blocca il tuo spazio per impedire ad altre persone di aprirlo"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installa le app"</b>\n"Installa le app che vuoi mantenere private nel tuo spazio"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Aspetti da considerare"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Le app vengono interrotte quando blocchi il tuo spazio"</b>\n"Quando blocchi il tuo spazio, le app al suo interno verranno interrotte e non ti invieranno notifiche"</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Imposta sequenza per lo spazio privato"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Blocca"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Nascondi"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Conferma la sequenza dello spazio privato"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Inserisci di nuovo il PIN dello spazio privato"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Inserisci di nuovo la password dello spazio privato"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Puoi aggiungere fino a <xliff:g id="COUNT">%d</xliff:g> impronte digitali"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Hai aggiunto il numero massimo di impronte digitali"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"Impossibile aggiungere ulteriori impronte digitali"</string>
@@ -900,7 +901,7 @@
<string name="keywords_wifi_display_settings" msgid="5753883229564422679">"mirroring"</string>
<string name="wifi_display_enable_menu_item" msgid="7391841780777318134">"Attiva display wireless"</string>
<string name="wifi_display_no_devices_found" msgid="7904877793677102805">"Nessun dispositivo nelle vicinanze."</string>
- <string name="wifi_display_status_connecting" msgid="530880182560077334">"Collegamento in corso"</string>
+ <string name="wifi_display_status_connecting" msgid="530880182560077334">"Connessione in corso…"</string>
<string name="wifi_display_status_connected" msgid="2189925211258519539">"Connesso"</string>
<string name="wifi_display_status_in_use" msgid="5904009697167947449">"In uso"</string>
<string name="wifi_display_status_not_available" msgid="8463750208946968594">"Non disponibile"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Controlla la password e riprova"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Contatta il produttore del dispositivo"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Controlla la connessione e riprova"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Al momento, questa rete Wi-Fi non è disponibile"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Si è verificato un problema con questo codice QR. Prova a connetterti in un altro modo."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Scegli rete"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Per connettere il tuo dispositivo, scegli una rete"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Aggiungere questo dispositivo alla rete \"<xliff:g id="SSID">%1$s</xliff:g>\"?"</string>
@@ -1330,7 +1329,7 @@
<string name="screensaver_settings_when_to_dream_bedtime" msgid="3279310576803094771">"Non disponibili perché la modalità Riposo è attiva"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Usa il salvaschermo"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Durante la ricarica o quando inserito nel dock"</string>
- <string name="screensaver_settings_summary_dock_and_charging" msgid="8485905100159376156">"Inserito nel dock e in carica"</string>
+ <string name="screensaver_settings_summary_dock_and_charging" msgid="8485905100159376156">"Agganciato alla base e in carica"</string>
<string name="screensaver_settings_summary_sleep" msgid="6555922932643037432">"Durante la ricarica"</string>
<string name="screensaver_settings_summary_dock" msgid="6997766385189369733">"Quando inserito nel dock"</string>
<string name="screensaver_settings_summary_never" msgid="4988141393040918450">"Mai"</string>
@@ -1951,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accessibilità"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Tastiera fisica"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Tasti rimbalzati"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"La tastiera ignora le pressioni ripetute velocemente dello stesso tasto"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Soglia antirimbalzo dei tasti"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Scegli la durata di tempo in cui la tastiera ignora le pressioni ripetute dei tasti"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizzato"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valore personalizzato"</string>
<string name="slow_keys" msgid="2891452895499690837">"Tasti lenti"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Regola il tempo di risposta per la pressione di un tasto"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Tasti permanenti"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Premi un tasto alla volta per le scorciatoie invece di tenere premuti più tasti contemporaneamente"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tasti del mouse"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Usa la tastiera per controllare il puntatore"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Scorrimento invertito del mouse"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scorri verso l\'alto per spostare la pagina in basso"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Scambia i tasti sinistro e destro"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Usa il tasto sinistro del mouse come il destro"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Scorciatoie da tastiera"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostra l\'elenco di scorciatoie"</string>
@@ -2039,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Scegli un nuovo tasto per <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accessibilità della tastiera fisica"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Tasti permanenti, tasti rimbalzati, tasti del mouse"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Ripeti tasti"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Ritardo prima della ripetizione"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Frequenza ripetizione"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Tieni premuto un tasto per ripetere il relativo carattere finché non lo rilasci"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Layout <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predefinito"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatico: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2447,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Anteprima"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opzioni standard"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Lingua"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Dimensioni sottotitoli codificati"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stile sottotitoli"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opzioni personalizzate"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Colore sfondo"</string>
@@ -2575,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Regola consumo alimentazione"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pacchetti inclusi"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Le app funzionano normalmente"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Livello della batteria basso"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Attiva il Risparmio energetico per prolungare la durata della batteria"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Prolunga la durata della batteria"</string>
@@ -2992,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Disconnettere questa VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Disconnetti"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versione"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versione <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Rimuovi VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Sostituire la rete VPN esistente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Impostare la rete VPN sempre attiva?"</string>
@@ -3414,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00-17:00, giorni feriali\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventi nel calendario"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} è attiva}=2{{mode_1} e {mode_2} sono attive}=3{{mode_1}, {mode_2} e {mode_3} sono attive}other{{mode_1}, {mode_2} e altre # sono attive}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Può essere attivata automaticamente 1 modalità}other{Possono essere attivate automaticamente # modalità}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Non impostata"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Disattivata"</string>
@@ -3924,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Crea una modalità"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Modalità personalizzata"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Nome della modalità"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Il nome della modalità non può essere vuoto"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Scegli un\'icona"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Eventi nel calendario"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Routine Buonanotte"</string>
@@ -5158,7 +5175,7 @@
<string name="multiple_users_title_keywords" msgid="2395593167746225172">"più, utenti, profili, persone, account, sensore, molti"</string>
<string name="wireless_debugging_main_switch_title" msgid="8463499572781441719">"Usa debug wireless"</string>
<string name="graphics_driver_main_switch_title" msgid="6125172901855813790">"Usa Preferenze del driver di grafica"</string>
- <string name="night_light_main_switch_title" msgid="3428298022467805219">"Usa Luminosità notturna"</string>
+ <string name="night_light_main_switch_title" msgid="3428298022467805219">"Usa luminosità notturna"</string>
<string name="nfc_main_switch_title" msgid="6295839988954817432">"Usa NFC"</string>
<string name="adaptive_brightness_main_switch_title" msgid="2681666805191642737">"Usa la luminosità adattiva"</string>
<string name="wifi_calling_main_switch_title" msgid="4070224008346815634">"Usa Chiamate Wi-Fi"</string>
@@ -5468,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Cerca in Impostazioni"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contatti, spazio di archiviazione, account"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Archiviazione contatti"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nessun account predefinito"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Solo dispositivo"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"I nuovi contatti non verranno sincronizzati con un account"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"I contatti verranno salvati sul dispositivo e sincronizzati con il tuo account per impostazione predefinita"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Errore durante l\'impostazione dell\'account predefinito"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nessun account impostato come predefinito"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Solo dispositivo"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Aggiungi un account per iniziare"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Cerchia e Cerca"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Tocca e tieni premuto il pulsante Home o la barra di navigazione per eseguire una ricerca usando i contenuti sullo schermo."</string>
</resources>
diff --git a/res/values-iw/arrays.xml b/res/values-iw/arrays.xml
index 6d19195..28db091 100644
--- a/res/values-iw/arrays.xml
+++ b/res/values-iw/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"פתית שלג"</item>
<item msgid="7952183800501346803">"שמשייה"</item>
<item msgid="799139025758265891">"כלי עבודה"</item>
- <item msgid="1330084588359129896">"אוהל"</item>
+ <item msgid="8112685757657659269">"פסנתר"</item>
<item msgid="3861584909935022342">"סרט צילום (פילם)"</item>
<item msgid="5827426100157335512">"ספר"</item>
<item msgid="8585828346253128384">"פרח לוטוס"</item>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 0595601..c744ece 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"השבתה של Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"האפשרות הזו משביתה את התכונה Bluetooth LE Audio אם המכשיר תומך ביכולות חומרה של LE audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"מצב Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"הצגת המתג של LE audio בפרטי המכשיר"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"מעקף רשימת ההיתרים של Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"שימוש ב-LE Audio כברירת מחדל גם אם הציוד ההיקפי של ה-LE Audio לא אומת כעומד בקריטריונים של רשימת ההיתרים."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"הגדרה אוטומטית באמצעות הרשת והאותות האלחוטיים"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"אזור זמן אוטומטי"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"הגדרה אוטומטית בהתאם לרשתות הסלולריות בקרבתך"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"הגדרה אוטומטית באמצעות מיקום המכשיר, אם האפשרות זמינה. יכול להיות שצריך גם חיבור Wi-Fi פעיל."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"הגדרה אוטומטית באמצעות מיקום המכשיר, אם האפשרות זמינה"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"לפי ברירת המחדל באזור"</string>
<string name="date_time_24hour" msgid="286679379105653406">"פורמט 24 שעות"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"שעה"</string>
@@ -562,7 +566,7 @@
<string name="work_profile_category_header" msgid="85707750968948517">"פרופיל העבודה"</string>
<string name="private_space_title" msgid="1752064212078238723">"המרחב הפרטי"</string>
<string name="private_space_summary" msgid="2274405892301976238">"נעילה והסתרה של אפליקציות פרטיות"</string>
- <string name="private_space_description" msgid="4059594203775816136">"שמירת אפליקציות פרטיות במרחב נפרד שאפשר להסתיר או לנעול"</string>
+ <string name="private_space_description" msgid="4059594203775816136">"כדאי לשמור אפליקציות פרטיות במרחב נפרד שאפשר להסתיר או לנעול"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"נעילה של המרחב הפרטי"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"אפשר לפתוח את המרחב הפרטי באותה דרך שפותחים את המכשיר או לבחור בשיטת נעילה אחרת"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"שימוש בשיטה לביטול נעילת המסך"</string>
@@ -624,7 +628,7 @@
<string name="private_space_setup_title" msgid="2272968244329821450">"המרחב הפרטי"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"אפשר להסתיר או לנעול אפליקציות פרטיות במרחב נפרד. מומלץ להשתמש בחשבון Google ייעודי לאבטחה נוספת."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"איך זה עובד"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320">""<b>"יצירת חשבון Google למרחב הפרטי"</b>\n"אם משתמשים בחשבון ייעודי למרחב הפרטי, אפשר למנוע מקבצים, תמונות ואימיילים מסונכרנים להופיע מחוץ למרחב"</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320">""<b>"יצירת חשבון Google למרחב הפרטי"</b>\n"אם לא רוצים שקבצים, תמונות ואימיילים מסונכרנים יופיעו מחוץ למרחב, מומלץ להשתמש בחשבון ייעודי למרחב הפרטי"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"הגדרת נעילה"</b>\n"אפשר לנעול את המרחב הפרטי כדי למנוע מאנשים אחרים לפתוח אותו"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"התקנת אפליקציות"</b>\n"במרחב הפרטי אפשר להתקין אפליקציות שרוצים שיישארו פרטיות"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"חשוב לזכור"</string>
@@ -1804,7 +1808,7 @@
<string name="application_size_label" msgid="6407051020651716729">"גודל האפליקציה"</string>
<string name="external_code_size_label" msgid="7375146402660973743">"אפליקציה של אחסון USB"</string>
<string name="data_size_label" msgid="7814478940141255234">"נתוני משתמש"</string>
- <string name="uninstall_text" msgid="315764653029060126">"הסרת התקנה"</string>
+ <string name="uninstall_text" msgid="315764653029060126">"הסרה"</string>
<string name="uninstall_all_users_text" msgid="5924715251087176474">"להסרת התקנה עבור כל המשתמשים"</string>
<string name="install_text" msgid="4558333621516996473">"התקנה"</string>
<string name="disable_text" msgid="5146002260857428005">"השבתה"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"נגישות"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"מקלדת פיזית"</string>
<string name="bounce_keys" msgid="7419450970351743904">"מקשים חוזרים"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"המערכת מתעלמת מהקשות מהירות חוזרות על אותו המקש במקלדת"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"הסף לסינון הקשות חוזרות"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"צריך לבחור את משך הזמן שבו המערכת מתעלמת מהקשות חוזרות על מקשים במקלדת"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 שניות"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 שניות"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 שניות"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"בהתאמה אישית"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ערך מותאם אישית"</string>
<string name="slow_keys" msgid="2891452895499690837">"מקשים איטיים"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"שינוי הזמן שעובר מהקשה על מקש ועד להפעלה שלו"</string>
<string name="sticky_keys" msgid="7317317044898161747">"מקשים \"דביקים\""</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"מקישים אחד-אחד על רצף של מקשי קיצור, ולא צריך ללחוץ עליהם בו-זמנית."</string>
<string name="mouse_keys" msgid="6237254627808525540">"מקשי העכבר"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"שליטה בסמן באמצעות המקלדת"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"גלילה הפוכה עם העכבר"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"גלילה למעלה להזזת הדף למטה"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"החלפה בין הלחצן השמאלי ללחצן הימני"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"שימוש בלחצן השמאלי של העכבר כלחצן הימני"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"מקשי קיצור"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"הצגת רשימה של מקשי הקיצור"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"יש לבחור מפתח חדש עבור <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"תכונות נגישות שפועלות באמצעות מקלדת פיזית"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"מקשים \"דביקים\", מקשים חוזרים, לחצני העכבר"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"חזרה על מקשים"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"השהיה לפני חזרה"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"קצב החזרה"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"לוחצים לחיצה ארוכה על מקש כדי לחזור על התו שלו עד שמפסיקים ללחוץ על המקש"</string>
<string name="ime_label_title" msgid="8994569521516807168">"פריסה של <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ברירת מחדל"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"אוטומטי: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2231,10 +2249,10 @@
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"יש להחליק למעלה בעזרת שתי אצבעות"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture_talkback" msgid="7422753388389160524">"יש להחליק למעלה בעזרת שלוש אצבעות"</string>
<string name="accessibility_shortcut_edit_dialog_title_software" msgid="6505512764022389951">"לחצן הנגישות"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_floating_button" msgid="6266489864614886247">"צריך להקיש על הלחצן הצף"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_floating_button" msgid="6266489864614886247">"הקשה על הלחצן הצף"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_by_gesture" msgid="4775049370625630546">"תנועה להפעלת תכונות הנגישות"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"צריך להקיש על לחצן הנגישות <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> בחלק התחתון של המסך. כדי לעבור בין תכונות, צריך ללחוץ לחיצה ארוכה על לחצן הנגישות."</string>
- <string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{מחליקים למעלה מהחלק התחתון של המסך. כדי לעבור בין תכונות, מחליקים למעלה ומחזיקים.}one{מחליקים למעלה עם # אצבעות מהחלק התחתון של המסך. כדי לעבור בין תכונות, מחליקים למעלה עם # אצבעות ומחזיקים.}two{מחליקים למעלה עם # אצבעות מהחלק התחתון של המסך. כדי לעבור בין תכונות, מחליקים למעלה עם # אצבעות ומחזיקים.}other{מחליקים למעלה עם # אצבעות מהחלק התחתון של המסך. כדי לעבור בין תכונות, מחליקים למעלה עם # אצבעות ומחזיקים.}}"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{החלקה למעלה מהחלק התחתון של המסך. כדי לעבור בין תכונות, החלקה למעלה והחזקת האצבעות.}one{החלקה למעלה עם # אצבעות מהחלק התחתון של המסך. כדי לעבור בין תכונות, החלקה למעלה עם # אצבעות והשארה שלהן.}two{החלקה למעלה עם # אצבעות מהחלק התחתון של המסך. כדי לעבור בין תכונות, החלקה למעלה עם # אצבעות והשארה שלהן.}other{החלקה למעלה עם # אצבעות מהחלק התחתון של המסך. כדי לעבור בין תכונות, החלקה למעלה עם # אצבעות והשארה שלהן.}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_floating" msgid="4459254227203203324"><annotation id="link">"אפשרויות נוספות"</annotation></string>
<string name="footer_learn_more_content_description" msgid="8843798273152131341">"מידע נוסף על <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"הגדרות מהירות"</string>
@@ -2243,7 +2261,7 @@
<string name="accessibility_feature_shortcut_setting_summary_quick_settings" msgid="7006526933552889373">"הגדרות מהירות"</string>
<string name="accessibility_shortcut_edit_dialog_title_hardware" msgid="844089763968552142">"לחצני עוצמת הקול"</string>
<string name="accessibility_shortcut_hardware_keyword" msgid="2483152542320987022">"לחצני עוצמת הקול"</string>
- <string name="accessibility_shortcut_edit_dialog_summary_hardware" msgid="2503134386397991634">"יש ללחוץ לחיצה ארוכה על שני הלחצנים של עוצמת הקול"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_hardware" msgid="2503134386397991634">"לחיצה ארוכה על שני הלחצנים של עוצמת הקול"</string>
<string name="accessibility_shortcut_edit_screen_title_two_finger_double_tap" msgid="8952595692906527694">"הקשה כפולה עם %1$d אצבעות"</string>
<string name="accessibility_shortcut_edit_screen_summary_two_finger_double_tap" msgid="385404127425496362">"מקישים הקשה כפולה במהירות על המסך עם %1$d אצבעות"</string>
<string name="accessibility_shortcut_edit_screen_title_triple_tap" msgid="3314488747597058942">"הקשה משולשת"</string>
@@ -2288,7 +2306,7 @@
<string name="accessibility_force_invert_title" msgid="5015366813138748407">"הגדרת עיצוב כהה לכל האפליקציות"</string>
<string name="accessibility_force_invert_summary" msgid="1882329675950887268">"רלוונטי לאפליקציות ללא עיצוב כהה משלהן. בחלק מהאפליקציות עשויות להיות בעיות תצוגה, כמו היפוך צבעים."</string>
<string name="accessibility_disable_animations" msgid="2993529829457179058">"הסרת אנימציות"</string>
- <string name="accessibility_disable_animations_summary" msgid="5828228669556554565">"הפחתת התנועה במסך"</string>
+ <string name="accessibility_disable_animations_summary" msgid="5828228669556554565">"יהיו פחות תנועות במסך"</string>
<string name="accessibility_toggle_primary_mono_title" msgid="7587152099472946571">"אודיו במונו"</string>
<string name="accessibility_toggle_primary_mono_summary" msgid="1935283927319407303">"שילוב ערוצים כאשר מפעילים אודיו"</string>
<string name="accessibility_toggle_primary_balance_title" msgid="7332275200153366714">"איזון אודיו"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"תצוגה מקדימה"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"אפשרויות רגילות"</string>
<string name="captioning_locale" msgid="5533303294290661590">"שפה"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"גודל כתובית"</string>
<string name="captioning_preset" msgid="4174276086501638524">"סגנון כתוביות"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"אפשרויות מותאמות אישית"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"צבע הרקע"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"התאמת צריכת סוללה"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"חבילות כלולות"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"האפליקציות פועלות כרגיל"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"הסוללה חלשה"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"יש להפעיל את האפשרות \'חיסכון בסוללה\' כדי להאריך את חיי הסוללה"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"שיפור חיי הסוללה"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"האם לנתק את ה-VPN הזה?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ניתוק"</string>
<string name="vpn_version" msgid="6344167191984400976">"גרסה"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"גרסה <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"אני רוצה לשכוח את ה-VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"האם להחליף רשת VPN קיימת?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"האם להגדיר את רשת ה-VPN בחיבור תמידי?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00 - 17:00 ימי חול\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"אירועים ביומן"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{מצב פעיל אחד ({mode_1})}=2{{mode_1} ו{mode_2} פעילים}=3{{mode_1}, {mode_2}, ו{mode_3} פעילים}one{{mode_1}, {mode_2} ועוד # פעילים}other{{mode_1}, {mode_2} ועוד # פעילים}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{מצב אחד יכול לפעול באופן אוטומטי}one{# מצבים יכולים לפעול באופן אוטומטי}two{# מצבים יכולים לפעול באופן אוטומטי}other{# מצבים יכולים לפעול באופן אוטומטי}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"מצב מופעל"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"לא הוגדר"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"מצב מושבת"</string>
@@ -3698,7 +3721,7 @@
<string name="notif_type_conversation_summary" msgid="179142405410217101">"SMS, הודעות טקסט וסוגים אחרים של תקשורת"</string>
<string name="notif_type_alerting" msgid="4713073696855718576">"התראות"</string>
<string name="notif_type_alerting_summary" msgid="4681068287836313604">"ייתכן שיופעל צלצול או רטט בהתאם להגדרות"</string>
- <string name="notif_type_silent" msgid="6273951794420331010">"שקטות"</string>
+ <string name="notif_type_silent" msgid="6273951794420331010">"מצב שקט"</string>
<string name="notif_type_silent_summary" msgid="7820923063105060844">"התראות שאף פעם לא משמיעות צלילים ולא מפעילות רטט"</string>
<string name="notification_listener_allowed" msgid="5536962633536318551">"יש הרשאה"</string>
<string name="notification_listener_not_allowed" msgid="3352962779597846538">"אין הרשאה"</string>
@@ -3710,7 +3733,7 @@
<string name="notif_listener_more_settings_desc" msgid="7995492074281663658">"הגדרות נוספות זמינות בתוך האפליקציה הזו"</string>
<string name="notification_polite_title" msgid="6121016426991791557">"הפוגת התראות"</string>
<string name="notification_polite_main_control_title" msgid="5812529809151927149">"שימוש בהפוגת התראות"</string>
- <string name="notification_polite_description" msgid="5497748284893832854">"כשמתקבלות הרבה התראות בפרק זמן קצר, המכשיר ינמיך את עוצמת הקול ויצמצם את כמות ההתראות למשך עד שתי דקות. שיחות, התרעות ושיחות בעדיפות גבוהה לא מושפעות. \n\nניתן למצוא התראות שהתקבלו במהלך ההפוגה על ידי משיכה למטה מהחלק העליון של המסך."</string>
+ <string name="notification_polite_description" msgid="5497748284893832854">"אם קיבלת הרבה התראות תוך זמן קצר, המכשיר ינמיך את עוצמת הקול ויצמצם את ההפרעות למשך עד 2 דקות. ההפוגה לא חלה על שיחות, שעונים מעוררים ושיחות בעדיפות גבוהה. \n\nכדי למצוא את ההתראות שהתקבלו במהלך ההפוגה, מושכים למטה מראש המסך."</string>
<string name="notification_polite_work" msgid="8823596456640216391">"הפעלה בפרופילי העבודה"</string>
<string name="notification_polite_work_summary" msgid="5014189280132951378">"הפעלה באפליקציות של פרופיל העבודה"</string>
<string name="vr_listeners_title" msgid="4960357292472540964">"שירותי סיוע של VR"</string>
@@ -3837,7 +3860,7 @@
<string name="zen_mode_messages_list" msgid="5431014101342361882">"הודעות"</string>
<string name="zen_mode_messages_title" msgid="1777598523485334405">"הודעות"</string>
<string name="zen_mode_messages_header" msgid="253721635061451577">"הודעות שיכולות להפריע"</string>
- <string name="zen_mode_messages_footer" msgid="6002468050854126331">"כדי שבטוח יישמע צליל התראה כשייכנסו הודעות מורשות, צריך לוודא שהמכשיר נמצא במצב \'צלצול\'"</string>
+ <string name="zen_mode_messages_footer" msgid="6002468050854126331">"כדי שהמכשיר ישמיע צליל התראה כשמגיעות הודעות מורשות, צריך להעביר אותו למצב \'צלצול\'"</string>
<string name="zen_mode_custom_messages_footer" msgid="7545180036949550830">"במצב \'<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>\', הודעות נכנסות ייחסמו. ניתן לשנות את ההגדרות כדי לאפשר לחברים, לבני משפחה או לאנשי קשר אחרים ליצור איתך קשר."</string>
<string name="zen_mode_all_messages_summary" msgid="3756267858343104554">"כל ההודעות יכולות להגיע אליך"</string>
<string name="zen_mode_all_calls_summary" msgid="7337907849083824698">"כל השיחות יכולות להגיע אליך"</string>
@@ -3940,7 +3963,7 @@
<string name="zen_mode_blurb_immersive" msgid="5884004861848687869">"חוסמים הסחות דעת והפרעות במכשיר ומתרכזים טוב יותר"</string>
<string name="zen_mode_blurb_theater" msgid="2999237960059524225">"מסירים את כל הסחות דעת ונהנים מסביבה שקטה"</string>
<string name="zen_mode_blurb_managed" msgid="5473921634985032149">"התאמה אישית של חווית המשתמש ושל ההגדרות במכשיר למשתמשים שונים"</string>
- <string name="zen_mode_blurb_generic" msgid="3041601339807075625">"מצמצמים הפרעות: אפשר לקבל התראות רק מאפליקציות מסוימות ומאנשים חשובים"</string>
+ <string name="zen_mode_blurb_generic" msgid="3041601339807075625">"פחות הסחות דעת: יתקבלו התראות רק מאפליקציות נבחרות ומאנשים חשובים"</string>
<string name="zen_mode_inspiration_schedule_time" msgid="5596540503159096153">"הגדרת מצב עם לוח זמנים קבוע"</string>
<string name="zen_mode_inspiration_schedule_calendar" msgid="3678727180860212700">"שמירה על סנכרון המכשיר עם האירועים של היום"</string>
<string name="zen_mode_inspiration_bedtime" msgid="6294822414181670666">"מתעוררים עם תחושה שהכול מושלם"</string>
@@ -3992,7 +4015,7 @@
<string name="app_launch_open_domain_urls_title" msgid="4805388403977096285">"פתיחת קישורים נתמכים"</string>
<string name="app_launch_open_in_app" msgid="2208182888681699512">"באפליקציה"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"בדפדפן"</string>
- <string name="app_launch_top_intro_message" msgid="9037324384325518290">"בחירת האופן שבו קישורים לאתרים ייפתחו באפליקציה הזו"</string>
+ <string name="app_launch_top_intro_message" msgid="9037324384325518290">"כאן בוחרים איך לפתוח באפליקציה הזו קישורים לדפי אינטרנט"</string>
<string name="app_launch_links_category" msgid="2380467163878760037">"קישורים שייפתחו באפליקציה הזו"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"קישורים נתמכים"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"העדפות אחרות שמוגדרות כברירת מחדל"</string>
@@ -5341,7 +5364,7 @@
<string name="about_phone_device_name_warning" msgid="3243226572404472381">"המכשיר שלך גלוי לאפליקציות שהתקנת. כמו כן, ייתכן שאנשים אחרים יראו אותו בהתחברות למכשירי Bluetooth, לרשת Wi-Fi, או בהגדרת נקודת Wi-Fi לשיתוף אינטרנט."</string>
<string name="grammatical_gender_title" msgid="8584242850477270828">"לשון הפנייה"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"בחירת לשון הפנייה"</string>
- <string name="content_protection_preference_title" msgid="5069260032659193074">"מתבצעת סריקה לאיתור אפליקציות מטעות"</string>
+ <string name="content_protection_preference_title" msgid="5069260032659193074">"סריקה לאיתור אפליקציות מטעות"</string>
<string name="content_protection_preference_summary" msgid="2252393849408445391">"בדיקת הפעילות באפליקציה לאיתור פישינג"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"שימוש בסריקה לגילוי אפליקציות שיש בהן ניסיונות הונאה"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"שימוש בסריקה לגילוי אפליקציות לצורכי עבודה שיש בהן ניסיונות הונאה"</string>
@@ -5369,7 +5392,7 @@
<string name="audio_sharing_stream_name_title" msgid="8156859441897180940">"שם"</string>
<string name="audio_sharing_stream_password_title" msgid="7026649168165764602">"סיסמה"</string>
<string name="audio_sharing_stream_compatibility_title" msgid="5690947186724469918">"שיפור התאימות"</string>
- <string name="audio_sharing_stream_compatibility_description" msgid="8170241188606110963">"ההגדרה הזו עוזרת למכשירים מסוימים, כמו מכשירי שמיעה, להתחבר על ידי הפחתת איכות האודיו"</string>
+ <string name="audio_sharing_stream_compatibility_description" msgid="8170241188606110963">"ההגדרה הזו מורידה את איכות האודיו כדי שמכשירים כמו מכשירי שמיעה יוכלו להתחבר"</string>
<string name="audio_sharing_stream_compatibility_disabled_description" msgid="2586408353546825682">"ההגדרה הזו משביתה את שיתוף האודיו כדי להגדיר את התאימות"</string>
<string name="audio_sharing_nearby_audio_title" msgid="4795438407040677177">"האזנה לאודיו בקרבת מקום"</string>
<string name="audio_sharing_footer_description" msgid="4786942197840271680">"התכונה \'שיתוף אודיו\' תומכת ב-Auracast™"</string>
@@ -5463,13 +5486,13 @@
<string name="homepage_search" msgid="6759334912284663559">"חיפוש בהגדרות"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"אנשי קשר, אחסון, חשבון"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"אחסון אנשי הקשר"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"לא הוגדרה ברירת מחדל"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"מכשיר בלבד"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"אנשי קשר חדשים לא יסונכרנו עם חשבון כלשהו"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"אנשי הקשר יישמרו במכשיר ויוסנכרנו עם החשבון שלך כברירת מחדל"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"אירעה שגיאה בהגדרה של חשבון ברירת המחדל"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"לא הוגדרה ברירת מחדל"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"מכשיר בלבד"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"כדי להתחיל, צריך להוסיף חשבון"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"מקיפים ומחפשים"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"לוחצים לחיצה ארוכה על לחצן דף הבית או על נקודת האחיזה לניווט כדי להפעיל חיפוש של התוכן שמופיע על המסך."</string>
</resources>
diff --git a/res/values-ja/arrays.xml b/res/values-ja/arrays.xml
index e5ac9e5..82c1342 100644
--- a/res/values-ja/arrays.xml
+++ b/res/values-ja/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"雪の結晶"</item>
<item msgid="7952183800501346803">"ビーチパラソル"</item>
<item msgid="799139025758265891">"工具セット"</item>
- <item msgid="1330084588359129896">"テント"</item>
+ <item msgid="8112685757657659269">"ピアノ"</item>
<item msgid="3861584909935022342">"フィルムリール"</item>
<item msgid="5827426100157335512">"書籍"</item>
<item msgid="8585828346253128384">"ハスの花"</item>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 213c202..04dbf3d 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audio を無効にする"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"デバイスが LE オーディオ ハードウェア機能に対応している場合に、Bluetooth LE Audio 機能を無効にします。"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio モード"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE Audio の切替をデバイスの詳細に表示"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio の許可リストを回避する"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio の周辺機器が許可リストの基準を満たしていない場合でも、デフォルトで LE Audio を使用します。"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ネットワークとワイヤレス通信を使用して自動的に設定します"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"タイムゾーンの自動設定"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"付近のモバイル ネットワークに基づいて自動的に設定します"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"可能であればデバイスの位置情報で自動設定します。アクティブな Wi-Fi 接続が必要になることもあります。"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"可能であればデバイスの位置情報で自動設定します"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"言語 / 地域で一般的な形式を使用する"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24時間表示"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"時刻"</string>
@@ -1949,15 +1953,29 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"キーボードの同じキーが連続で押された場合は、その操作を無視します"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"バウンスキーのしきい値"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"キーボードのキーが連続で押されても無視する時間を選択します"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"カスタム"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"カスタム値"</string>
<string name="slow_keys" msgid="2891452895499690837">"スローキー"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"押されたキーが有効になるまでの時間を設定します"</string>
<string name="sticky_keys" msgid="7317317044898161747">"固定キー"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ショートカットで複数のキーを同時に押すのではなく 1 つずつ押します"</string>
<string name="mouse_keys" msgid="6237254627808525540">"マウスキー"</string>
+ <string name="mouse_keys_main_title" msgid="3570638931365221460">"マウスキーを使用する"</string>
<string name="mouse_keys_summary" msgid="7030731235143286467">"キーボードを使用してポインタを操作します"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"マウスの逆スクロール"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"上にスクロールすると、ページ下部に移動します"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"左右のボタンを入れ替える"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"左のマウスボタンを右のマウスボタンとして使用します"</string>
+ <string name="mouse_key_main_page_title" msgid="8051692181770475257">"<xliff:g id="KEYBOARD_NAME">%s</xliff:g> のマウスキー"</string>
+ <string name="mouse_keys_directional_summary" msgid="8108444346340180562">"<xliff:g id="DIRECTIONAL_LABEL">%s</xliff:g> キーを使用してマウスポインタを移動します"</string>
+ <string name="mouse_keys_click_summary" msgid="1642125742164614577">"<xliff:g id="CLICK_LABEL">%s</xliff:g> キーを使用してマウスのメインボタンをクリックします"</string>
+ <string name="mouse_keys_press_hold_summary" msgid="2313418505798763112">"<xliff:g id="PRESS_HOLD_LABEL">%s</xliff:g> キーを使用して、マウスのメインボタンを長押しします"</string>
+ <string name="mouse_keys_release_summary" msgid="2379239679203818720">"<xliff:g id="RELEASE_LABEL">%s</xliff:g> キーを使用してマウスのメインボタンを離します"</string>
+ <string name="mouse_keys_toggle_scroll_summary" msgid="8129249227018251990">"<xliff:g id="RELEASE_LABEL_1">%1$s</xliff:g> キーを使用してスクロール モードを切り替えます。<xliff:g id="RELEASE_LABEL_2">%2$s</xliff:g> キーでビューを上、下、左、右にスクロールします"</string>
+ <string name="mouse_keys_release2_summary" msgid="2395196580659122185">"<xliff:g id="RELEASE_2_LABEL">%s</xliff:g> キーを使用して、マウスの 2 番目のボタンをクリックします"</string>
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"キーボード ショートカット"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ショートカットのリストを表示"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"仕事用プロファイルのキーボードとツール"</string>
@@ -2026,10 +2044,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> の新しいキーを選択してください"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"物理キーボードのユーザー補助"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"固定キー、バウンスキー、マウスキー"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"キーの繰り返し"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"リピートまでの時間"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"リピート速度"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"キーを長押しすると、キーを離すまでその文字が繰り返されます"</string>
<string name="ime_label_title" msgid="8994569521516807168">"レイアウト: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"デフォルト"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"自動: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2452,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"プレビュー"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"標準オプション"</string>
<string name="captioning_locale" msgid="5533303294290661590">"言語"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"字幕のサイズ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"字幕スタイル"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"カスタマイズオプション"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"背景色"</string>
@@ -2562,6 +2579,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"消費電力の調整"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"含まれているパッケージ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"アプリは正常に実行されています"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"バッテリー残量が少なくなっています"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"バッテリー セーバーを ON にしてバッテリーを長持ちさせます"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"バッテリー寿命の改善"</string>
@@ -2979,6 +3000,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"この VPN の接続を解除しますか?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"接続を解除"</string>
<string name="vpn_version" msgid="6344167191984400976">"バージョン"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"バージョン <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN を削除"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"既存の VPN を置き換えますか?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"常時接続 VPN を設定しますか?"</string>
@@ -3401,7 +3423,7 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"「平日の午前 9 時から午後 5 時」"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"カレンダーの予定"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} がアクティブです}=2{{mode_1} と {mode_2} がアクティブです}=3{{mode_1}、{mode_2}、{mode_3} がアクティブです}other{{mode_1}、{mode_2}、他 # 個がアクティブです}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 個のモードを自動的に ON にできます}other{# 個のモードを自動的に ON にできます}}"</string>
+ <string name="zen_modes_summary" msgid="2576893588489258390">"{count,plural, =0{サイレント モード}=1{{mode_1}}=2{{mode_1}、{mode_2}}other{{mode_1}、{mode_2}、{mode_3}}}"</string>
<string name="zen_mode_active_text" msgid="5002406772481439437">"ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"未設定"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"無効"</string>
@@ -5451,12 +5473,16 @@
<string name="audio_streams_main_page_password_dialog_cannot_edit" msgid="9020898619297520153">"共有中はパスワードを編集できません。パスワードを変更するには、まず音声の共有を OFF にしてください。"</string>
<string name="audio_streams_qr_code_scanner_label" msgid="8799703301071378034">"QR コードスキャナ"</string>
<string name="audio_streams_qr_code_help_with_link" msgid="5542328067190486479"><annotation id="link">"ご不明な点がある場合"</annotation></string>
- <string name="homepage_search" msgid="6759334912284663559">"検索設定"</string>
+ <string name="homepage_search" msgid="6759334912284663559">"設定を検索"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"連絡先, ストレージ, アカウント"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"連絡先アプリのストレージ"</string>
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"デバイスのみ"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"新しい連絡先はアカウントと同期されません"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"デフォルトでは、連絡先はデバイスに保存されて、アカウントと同期されます"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"デフォルトは設定されていません"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"デフォルトのアカウントの設定中にエラーが発生しました"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"デフォルトは設定されていません"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"デバイスのみ"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"開始するにはアカウントを追加してください"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"かこって検索"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ホームボタンまたはナビゲーション ハンドルを長押しすると、画面上のコンテンツを使って検索できます。"</string>
</resources>
diff --git a/res/values-ka/arrays.xml b/res/values-ka/arrays.xml
index cd428c1..ba848ad 100644
--- a/res/values-ka/arrays.xml
+++ b/res/values-ka/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ფიფქი"</item>
<item msgid="7952183800501346803">"სანაპიროს ქოლგა"</item>
<item msgid="799139025758265891">"სახელოსნოს ხელსაწყოები"</item>
- <item msgid="1330084588359129896">"კარავი"</item>
+ <item msgid="8112685757657659269">"პიანინო"</item>
<item msgid="3861584909935022342">"კინოკადრი"</item>
<item msgid="5827426100157335512">"დაჯავშნა"</item>
<item msgid="8585828346253128384">"ლოტოსის ყვავილი"</item>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 6f64a8b..99467d4 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE-აუდიოს გათიშვა"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Bluetooth LE AUDIO-ს ფუნქცია ითიშება, თუ მოწყობილობას აქვს LE AUDIO-ს აპარატურული გარჩევადობები."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE-აუდიო რეჟიმი"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE-აუდიო გადართვის ჩვენება მოწყობილობის დეტალებში"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE-აუდიოს დაშვებულთა სიისთვის გვერდის ავლა"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"გამოიყენეთ LE-აუდიო ნაგულისხმევი სახით, თუნდაც LE-აუდიო პერიფერიული მოწყობილობა არ შეესაბამებოდეს დაშვებულთა სიის კრიტერიუმს."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ავტომატურად დაყენება თქვენი ქსელის და უსადენო სიგნალების გამოყენებით"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ავტომატური სასაათო სარტყელი"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ავტომატურად დაყენება თქვენთან ახლომდებარე მობილურ ქსელებზე დაყრდნობით"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ავტომატურად დაყენება მოწყობილობის მდებარეობით, თუ ხელმისაწვდომია. შეიძლება მოითხოვოს აქტიური Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ავტომატურად დაყენება მოწყობილობის მდებარეობით, თუ ხელმისაწვდომია"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ლოკალის ნაგულისხმევი პარამეტრის გამოყენება"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-საათიანი ფორმატი"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"დრო"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"კლავიატურა აიგნორებს ერთსა და იმავე კლავიშზე სწრაფ, განმეორებით დაჭერებს"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"კლავიშების ასხლეტის ზღურბლი"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"აირჩიეთ დროის ხანგრძლივობა, რომლის განმავლობაშიც თქვენი კლავიატურა აიგნორებს კლავიშის განმეორებით დაჭერას"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 წმ"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 წმ"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 წმ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 წმ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 წმ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 წმ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"მორგებული"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"მორგებული მნიშვნელობა"</string>
<string name="slow_keys" msgid="2891452895499690837">"ნელი კლავიშები"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"არეგულირებს დროს, რომელიც სჭირდება კლავიშის დაჭერას აქტივაციისთვის"</string>
<string name="sticky_keys" msgid="7317317044898161747">"კლავიშების ფიქსაცია"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"მალსახმობებისთვის დააჭირეთ კლავიშებს ცალ-ცალკე და არა ერთდროულად"</string>
<string name="mouse_keys" msgid="6237254627808525540">"მაუსის კლავიშები"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"თქვენი კლავიატურის გამოყენება კურსორის სამართავად"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"მაუსით უკუგადაადგილება"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"ზემოთ გადაადგილება გვერდის ჩამოსაწევად"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"მარცხენა და მარჯვენა ღილაკების ფუნქციის გაცვლა"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"გამოიყენეთ მაუსის მარცხენა ღილაკი მარჯვენის ფუნქციით"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"კლავიატურის მალსახმობები"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"მალსახმობების სიის ჩვენება"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"სამსახურის პროფილის კლავიატურა და ხელსაწყოები"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"აირჩიეთ ახალი კლავიში <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>-ისთვის:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ფიზიკური კლავიატურის მისაწვდომობა"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"კლავიშების ფიქსაცია, მრავალჯერადი დაჭერის შეზღუდვა კლავიშებზე, მაუსის კლავიშები"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"განმეორებადი კლავიშები"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"დაყოვნება განმეორებამდე"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"გამეორების სიხშირე"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ხანგრძლივად დააჭირეთ კლავიშზე, რათა განმეორებით აიკრიფოს სიმბოლო, სანამ კლავიშიდან თითს აიღებთ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> განლაგება"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ნაგულისხმევი"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ავტომატური: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"წინასწარ ნახვა"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"სტანდარტული პარამეტრები"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ენა"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"სუბტიტრების ზომა"</string>
<string name="captioning_preset" msgid="4174276086501638524">"ტიტრის სტილი"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"მორგებული პარამეტრები"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"ფონის ფერი"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ენერგიის მოხმარების მორგება"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"შესული პაკეტები"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"აპები გაშვებულია ჩვეულებრივად"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ბატარეა იცლება"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ჩართეთ ბატარეის დამზოგი ბატარეის მუშაობის გასახანგრძლივებლად"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ბატარეის მუშაობის ხანგრძლივობის გაუმჯობესება"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"გსურთ ამ VPN-თან კავშირის გაწყვეტა?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"კავშირის გაწყვეტა"</string>
<string name="vpn_version" msgid="6344167191984400976">"ვერსია"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ვერსია <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN-ის დავიწყება"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"გსურთ არსებული VPN-ის ჩანაცვლება?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"გსურთ ყოველთვის ჩართული VPN-ის დაყენება?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„09:00 —17:00, კვირის დღეები“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"კალენდრის მოვლენები"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} აქტიურია}=2{{mode_1} და {mode_2} აქტიურია}=3{{mode_1}, {mode_2} და {mode_3} აქტიურია}other{{mode_1}, {mode_2} და # სხვა აქტიურია}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 რეჟიმი შესაძლოა ჩაირთოს ავტომატურად}other{# რეჟიმი შესაძლოა ჩაირთოს ავტომატურად}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ჩართული"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"არ არის დაყენებული"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"გათიშულია"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"მხოლოდ მოწყობილობა"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"ახალი კონტაქტები არ სინქრონიზდება ანგარიშთან"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"კონტაქტები შეინახება თქვენს მოწყობილობაში და სინქრონიზდება თქვენს ანგარიშთან ნაგულისხმევად"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ნაგულისხმევი ანგარიში დაყენებული არ არის"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ნაგულისხმევი ანგარიშის დაყენებისას წარმოიშვა შეცდომა"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ნაგულისხმევი ანგარიში დაყენებული არ არის"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"მხოლოდ მოწყობილობა"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"დასაწყებად დაამატეთ ანგარიში"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ძიება წრის მოხაზვით"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ეკრანზე არსებული კონტენტის გამოყენებით ძიებისთვის ხანგრძლივად შეეხეთ მთავარი ეკრანის ღილაკს ან ნავიგაციის ზოლს."</string>
</resources>
diff --git a/res/values-kk/arrays.xml b/res/values-kk/arrays.xml
index 4e7f4d0..5efc68b 100644
--- a/res/values-kk/arrays.xml
+++ b/res/values-kk/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Ұлпа қар"</item>
<item msgid="7952183800501346803">"Жағажай қолшатыры"</item>
<item msgid="799139025758265891">"Шеберхана құралдары"</item>
- <item msgid="1330084588359129896">"Шатыр"</item>
+ <item msgid="8112685757657659269">"Пианино"</item>
<item msgid="3861584909935022342">"Кинопленка"</item>
<item msgid="5827426100157335512">"Кітап"</item>
<item msgid="8585828346253128384">"Лотос гүлі"</item>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index db84d7c..64b1892 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audio функциясын өшіру"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Құрылғы LE Audio жабдық мүмкіндіктерін қолдайтын болса, Bluetooth LE Audio функциясы өшіріледі."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio режимі"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE Audio ауыстырғышын \"Құрылғы туралы мәлімет\" бөлімінде көрсету"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bypass Bluetooth LE Audio рұқсат тізімін айналып өту"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio перифериялық құрылғысының рұқсат тізімі шарттарына сәйкес келуі расталмаса да, LE Audio әдепкісінше пайдаланылады."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Желі мен сымсыз сигналдар арқылы автоматты түрде орнатылады."</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Aвтоматты уақыт белдеуі"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Маңайдағы мобильдік желілер негізінде автоматты түрде орнату"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Құрылғы локациясы (қолжетімді болса) арқылы автоматты түрде орнатылады. Қосулы Wi-Fi байланысы да қажет болуы мүмкін."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Құрылғы локациясы (қолжетімді болса) арқылы автоматты түрде орнатылады."</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Жергілікті әдепкі формат"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 сағаттық формат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Уақыт"</string>
@@ -624,7 +628,7 @@
<string name="private_space_setup_title" msgid="2272968244329821450">"Құпия кеңістік"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Жеке қолданбаларыңызды бөлек кеңістікке жасырып қоюға немесе құлыппен жауып қоюға болады. Қосымша қауіпсіздік үшін арнайы Google аккаунтын пайдаланыңыз."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Бұл қалай жұмыс істейді?"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Кеңістіңіз үшін Google аккаунтын жасау"</b>\n"Арнайы аккаунтты пайдалансаңыз, синхрондалған файлдар, фотосуреттер мен электрондық хаттар кеңістігіңізден тыс көрсетілмейді."</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Кеңістік үшін Google аккаунтын жасау"</b>\n"Арнайы аккаунтыңыз болса, синхрондалған файлдар, фотосуреттер мен электрондық хаттар кеңістігіңізден тыс көрсетілмейді."</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Құлыптау функциясын орнату"</b>\n"Кеңістігіңізді басқа адамдар ашып алмауы үшін, оны құлыптаңыз."</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Қолданбалар орнату"</b>\n"Кеңістігіңізге құпия сақтағыңыз келетін қолданбаларды орнатуға болады."</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Есте сақтаңыз"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Арнайы мүмкіндіктер"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Физикалық пернетақта"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Қайтару пернелері"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Пернетақта бір перненің тез арада қайталап басылуын елемейді."</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Пернелердің байқаусызда басылуын елемеу шегі"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Пернетақта пернелердің қайталап басылуын елемейтін уақыт ұзақтығын таңдаңыз."</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 с"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 с"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 с"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Арнаулы"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"арнаулы мән"</string>
<string name="slow_keys" msgid="2891452895499690837">"Баяу пернелер"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Басқаннан кейін перненің іске қосылу уақытын реттейді."</string>
<string name="sticky_keys" msgid="7317317044898161747">"Бекітілген пернелер"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Жылдам пәрмендерді пайдалану үшін пернелерді бірге баспай-ақ, бір пернені бір рет бассаңыз болады."</string>
<string name="mouse_keys" msgid="6237254627808525540">"Тінтуір пернелері"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Меңзерді басқару үшін пернетақтаны пайдаланыңыз."</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Тінтуірмен кері айналдыру"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Бетті төмен жылжыту үшін жоғары қарай айналдырыңыз."</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Сол және оң жақ түймелердің орындарын ауыстырыңыз"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Тінтуірдің сол жақ түймесін оң жақ түйме ретінде пайдаланыңыз."</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Перне тіркесімдері"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Перне тіркесімдерінің тізімін көрсету"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> жаңа пернесін таңдау:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Физикалық пернетақтаның арнайы мүмкіндіктері"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Бекітілген пернелер, серпімді пернелер, тінтуір пернелері"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Пернелерді қайталау"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Қайталау алдындағы кідіріс"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Қайталау жиілігі"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Пернені басып тұру арқылы таңбаны қайталап жазу"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> форматы"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Әдепкі"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автоматты: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Алғы көрініс"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандартты опциялар"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Тіл"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Жазу өлшемі"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Субтитр стилі"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Реттеу опциялары"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Артқы фон түсі"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Қуат қолданысын бейімдеу"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Қамтылған орамдар"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Қолданбалар қалыпты жұмыс істеп тұр"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Батарея деңгейі төмен"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Батарея жұмысын ұзарту үшін батареяны үнемдеу режимін қосыңыз."</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Батарея жұмысын ұзартыңыз"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Осы VPN желісі ажыратылсын ба?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ажырату"</string>
<string name="vpn_version" msgid="6344167191984400976">"Нұсқа"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g> нұсқасы"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ұмыту"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Бар VPN қолданбасын ауыстыру керек пе?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Әрқашан қосулы VPN режимін орнату"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00–17:00 жұмыс күндері\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Күнтізбедегі іс-шаралар"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} қосулы}=2{{mode_1} және {mode_2} қосулы}=3{{mode_1}, {mode_2} және {mode_3} қосулы}other{{mode_1}, {mode_2} және тағы # режим қосулы}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режимді автоматты түрде қосуға болады.}other{# режимді автоматты түрде қосуға болады.}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ҚОСУЛЫ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Орнатылмаған"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Өшірілді"</string>
@@ -5459,16 +5482,16 @@
<string name="audio_streams_main_page_password_dialog_cannot_edit" msgid="9020898619297520153">"Бөлісу кезінде құпия сөзді өзгертуге болмайды. Өзгерту үшін алдымен аудио бөлісу функциясын өшіріңіз."</string>
<string name="audio_streams_qr_code_scanner_label" msgid="8799703301071378034">"QR кодының сканері"</string>
<string name="audio_streams_qr_code_help_with_link" msgid="5542328067190486479"><annotation id="link">"Көмек керек пе?"</annotation></string>
- <string name="homepage_search" msgid="6759334912284663559">"Іздеу параметрлері"</string>
+ <string name="homepage_search" msgid="6759334912284663559">"Параметрлерден іздеу"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"контактілер, жад, аккаунт"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Контактілер жады"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Әдепкі аккаунт таңдалмаған"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Тек құрылғы"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Жаңа контактілер аккаунтпен синхрондалмайды."</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Контактілер әдепкісінше аккаунтыңызбен синхрондалады және құрылғыңызға сақталады."</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Әдепкі аккаунт орнату кезінде қате шықты."</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Әдепкі аккаунт таңдалмаған."</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Құрылғы ғана"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Бастау үшін аккаунт қосыңыз."</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Қоршау арқылы іздеу"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Экрандағы контенттің көмегімен іздеу үшін негізгі экран түймесін немесе навигация тетігін басып тұрыңыз."</string>
</resources>
diff --git a/res/values-km/arrays.xml b/res/values-km/arrays.xml
index 5d97701..e0d7b35 100644
--- a/res/values-km/arrays.xml
+++ b/res/values-km/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ផ្កាព្រិល"</item>
<item msgid="7952183800501346803">"ឆត្រនៅតាមឆ្នេរ"</item>
<item msgid="799139025758265891">"ឧបករណ៍រោងជាង"</item>
- <item msgid="1330084588359129896">"តង់"</item>
+ <item msgid="8112685757657659269">"ព្យាណូ"</item>
<item msgid="3861584909935022342">"ដុំហ្វីលភាពយន្ត"</item>
<item msgid="5827426100157335512">"សៀវភៅ"</item>
<item msgid="8585828346253128384">"ផ្កាឈូក"</item>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index b49f011..9736f0b 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"បិទប៊្លូធូស LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"បិទមុខងារប៊្លូធូស LE Audio ប្រសិនបើឧបករណ៍អាចប្រើសមត្ថភាពហាតវែរ LE Audio បាន។"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"មុខងារប៊្លូធូស LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"បង្ហាញប៊ូតុងបិទ/បើក LE Audio ក្នុងព័ត៌មានលម្អិតអំពីឧបករណ៍"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"រំលងបញ្ជីអនុញ្ញាតប៊្លូធូស LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ប្រើ LE Audio តាមលំនាំដើម ទោះបីជាមិនបានផ្ទៀងផ្ទាត់ឧបករណ៍ខាងក្រៅ LE Audio ដើម្បីឱ្យបំពេញតាមលក្ខខណ្ឌបញ្ជីអនុញ្ញាតក៏ដោយ។"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"កំណត់ដោយស្វ័យប្រវត្តិដោយប្រើបណ្ដាញ និងសញ្ញាឥតខ្សែរបស់អ្នក"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ល្វែងម៉ោងស្វ័យប្រវត្តិ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"កំណត់ដោយស្វ័យប្រវត្តិដោយផ្អែកលើបណ្ដាញទូរសព្ទចល័តដែលនៅជិតអ្នក"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"កំណត់ដោយស្វ័យប្រវត្តិដោយប្រើទីតាំងឧបករណ៍អ្នក ប្រសិនបើមាន។ ក៏អាចតម្រូវឱ្យមានការតភ្ជាប់ Wifi ដែលកំពុងដំណើរការផងដែរ។"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"កំណត់ដោយស្វ័យប្រវត្តិដោយប្រើទីតាំងឧបករណ៍អ្នក ប្រសិនបើមាន"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ប្រើតាមតំបន់"</string>
<string name="date_time_24hour" msgid="286679379105653406">"ប្រើប្រព័ន្ធ ២៤ ម៉ោង"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"ម៉ោង"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"ភាពងាយស្រួល"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"ក្ដារចុចរូបវ័ន្ត"</string>
<string name="bounce_keys" msgid="7419450970351743904">"គ្រាប់ចុចឡង"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"ក្ដារចុចមិនអើពើនឹងការចុចដដែលៗយ៉ាងរហ័សនៃគ្រាប់ចុចដដែល"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"កម្រិតកំណត់គ្រាប់ចុចឡង"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ជ្រើសរើសរយៈពេលដែលក្តារចុចរបស់អ្នកមិនអើពើនឹងការចុចគ្រាប់ចុចដដែលៗ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 វិ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 វិ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 វិ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"ផ្ទាល់ខ្លួន"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"តម្លៃផ្ទាល់ខ្លួន"</string>
<string name="slow_keys" msgid="2891452895499690837">"គ្រាប់ចុចយឺត"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"កែតម្រូវរយៈពេលនៃការចុចគ្រាប់ចុចដើម្បីបើកដំណើរការ"</string>
<string name="sticky_keys" msgid="7317317044898161747">"គ្រាប់ចុចស្អិត"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ចុចគ្រាប់ចុចមួយក្នុងមួយលើកសម្រាប់ផ្លូវកាត់ជំនួសឱ្យការចុចគ្រាប់ចុចឱ្យជាប់រួមគ្នា"</string>
<string name="mouse_keys" msgid="6237254627808525540">"គ្រាប់ចុចម៉ៅស៍"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"ប្រើក្តារចុចរបស់អ្នកដើម្បីគ្រប់គ្រងសញ្ញាព្រួញ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"ការរំកិលម៉ៅស៍បញ្រ្ចាស"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"រំកិលឡើងលើ ដើម្បីផ្លាស់ទីទំព័រចុះក្រោម"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ដោះដូររវាងប៊ូតុងឆ្វេង និងប៊ូតុងស្ដាំ"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ប្រើប៊ូតុងម៉ៅស៍ខាងឆ្វេងជាប៊ូតុងម៉ៅស៍ខាងស្ដាំរបស់អ្នក"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"ផ្លូវកាត់ក្តារចុច"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"បង្ហាញបញ្ជីផ្លូវកាត់"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"ជ្រើសរើសប៊ូតុងថ្មីសម្រាប់ <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>៖"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ភាពងាយស្រួលប្រើប្រាស់ក្ដារចុចរូបវន្ត"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"គ្រាប់ចុចស្អិត គ្រាប់ចុចលោត គ្រាប់ចុចម៉ៅស៍"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"គ្រាប់ចុចដែលចុចឡើងវិញ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ពន្យារពេលមុនការចុចឡើងវិញ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"អត្រាចុចឡើងវិញ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ចុចឱ្យជាប់លើគ្រាប់ចុចណាមួយ ដើម្បីចុចតួអក្សររបស់វាឡើងវិញ រហូតទាល់តែគ្រាប់ចុចត្រូវបានលែង"</string>
<string name="ime_label_title" msgid="8994569521516807168">"ប្លង់ <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"លំនាំដើម"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ស្វ័យប្រវត្តិ៖ <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"មើលសាកល្បង"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ជម្រើសស្តង់ដារ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ភាសា"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"ទំហំអក្សររត់"</string>
<string name="captioning_preset" msgid="4174276086501638524">"រចនាប័ទ្មអក្សររត់"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ជម្រើសតាមតម្រូវការ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"ពណ៌ផ្ទៃខាងក្រោយ"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"កែការប្រើថាមពល"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"កញ្ចប់រួមបញ្ចូល"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"កម្មវិធីកំពុងដំណើរការជាធម្មតា"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"កម្រិតថ្មជិតអស់ហើយ"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"បើកមុខងារសន្សំថ្ម ដើម្បីបង្កើនកម្រិតថាមពលថ្ម"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"បង្កើនកម្រិតថាមពលថ្ម"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ផ្តាច់ VPN នេះ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ផ្ដាច់"</string>
<string name="vpn_version" msgid="6344167191984400976">"កំណែ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"កំណែ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"បំភ្លេច VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ជំនួស VPN ដែលមានស្រាប់ឬ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"កំណត់ VPN ឲ្យបើកជានិច្ចឬ?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 ព្រឹក - 5 ល្ងាចនៃថ្ងៃធ្វើការ\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"ព្រឹត្តិការណ៍ក្នុងប្រតិទិន"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} កំពុងដំណើរការ}=2{{mode_1} និង {mode_2} កំពុងដំណើរការ}=3{{mode_1}, {mode_2} និង {mode_3} កំពុងដំណើរការ}other{{mode_1}, {mode_2}និង # ទៀតកំពុងដំណើរការ}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{មុខងារ 1 អាចបើកដោយស្វ័យប្រវត្តិ}other{មុខងារ # អាចបើកដោយស្វ័យប្រវត្តិ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"បើក"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"មិនបានកំណត់"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"បានបិទ"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"ស្វែងរកការកំណត់"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contacts, ទំហំផ្ទុក, គណនី"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"ទំហំផ្ទុក Contacts"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"មិនបានកំណត់លំនាំដើម"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"សម្រាប់តែឧបករណ៍"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"ទំនាក់ទំនងថ្មីៗនឹងមិនត្រូវបានធ្វើសមកាលកម្មជាមួយគណនីទេ"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"ទំនាក់ទំនងនឹងត្រូវបានរក្សាទុកទៅក្នុងឧបករណ៍របស់អ្នក និងធ្វើសមកាលកម្មទៅគណនីរបស់អ្នកតាមលំនាំដើម"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"មានបញ្ហាក្នុងការកំណត់គណនីលំនាំដើម"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"មិនបានកំណត់លំនាំដើម"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"សម្រាប់តែឧបករណ៍"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"សូមបញ្ចូលគណនី ដើម្បីចាប់ផ្ដើម"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"គូររង្វង់ដើម្បីស្វែងរក"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ចុចប៊ូតុងទំព័រដើម ឬដងរុករកឱ្យជាប់ ដើម្បីស្វែងរកដោយប្រើខ្លឹមសារនៅលើអេក្រង់របស់អ្នក។"</string>
</resources>
diff --git a/res/values-kn/arrays.xml b/res/values-kn/arrays.xml
index 3487549..dcf2761 100644
--- a/res/values-kn/arrays.xml
+++ b/res/values-kn/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ಸ್ನೋಫ್ಲೇಕ್"</item>
<item msgid="7952183800501346803">"ಬೀಚ್ ಛತ್ರಿಗಳು"</item>
<item msgid="799139025758265891">"ಕಾರ್ಯಾಗಾರದ ಟೂಲ್ಗಳು"</item>
- <item msgid="1330084588359129896">"ಟೆಂಟ್"</item>
+ <item msgid="8112685757657659269">"ಪಿಯಾನೋ"</item>
<item msgid="3861584909935022342">"ಫಿಲಂ ರೀಲ್"</item>
<item msgid="5827426100157335512">"ಕಾಯ್ದಿರಿಸಿ"</item>
<item msgid="8585828346253128384">"ಕಮಲದ ಹೂವು"</item>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 6fd0df1..485d953 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ಬ್ಲೂಟೂತ್ LE ಆಡಿಯೋವನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ಸಾಧನವು LE ಆಡಿಯೋ ಹಾರ್ಡ್ವೇರ್ ಸಾಮರ್ಥ್ಯಗಳನ್ನು ಬೆಂಬಲಿಸಿದರೆ ಈ ಆಯ್ಕೆಯು ಬ್ಲೂಟೂತ್ LE ಆಡಿಯೋ ಫೀಚರ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ಬ್ಲೂಟೂತ್ LE ಆಡಿಯೋ ಮೋಡ್"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ಸಾಧನ ವಿವರಗಳಲ್ಲಿ LE ಆಡಿಯೋ ಟಾಗಲ್ ತೋರಿಸಿ"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ಬೈಪಾಸ್ ಬ್ಲೂಟೂತ್ LE ಆಡಿಯೊ ಅನುಮತಿ ಪಟ್ಟಿ"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ಅನುಮತಿ ಪಟ್ಟಿ ಮಾನದಂಡಗಳನ್ನು ಪೂರೈಸಲು, LE ಆಡಿಯೊ ಪೆರಿಫೆರಲ್ ಅನ್ನು ದೃಢೀಕರಿಸಿರದಿದ್ದರೂ ಸಹ ಡೀಫಾಲ್ಟ್ ಆಗಿ LE ಆಡಿಯೊ ಬಳಸಿ."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ಮತ್ತು ವೈರ್ಲೆಸ್ ಸಿಗ್ನಲ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆಟ್ ಮಾಡಿ"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ಸ್ವಯಂಚಾಲಿತ ಸಮಯವಲಯ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ನಿಮ್ಮ ಸಮೀಪದ ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ಗಳನ್ನು ಆಧರಿಸಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆಟ್ ಮಾಡಿ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ಲಭ್ಯವಿದ್ದರೆ, ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಬಳಸಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆಟ್ ಮಾಡಿ. ಸಕ್ರಿಯ Wi-Fi ಕನೆಕ್ಷನ್ ಬೇಕಾಗಬಹುದು."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ಲಭ್ಯವಿದ್ದರೆ, ನಿಮ್ಮ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಬಳಸಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸೆಟ್ ಮಾಡಿ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ಭಾಷೆ ಡೀಫಾಲ್ಟ್ ಬಳಸಿ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-ಗಂಟೆ ಫಾರ್ಮ್ಯಾಟ್ ಬಳಸಿ"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"ಸಮಯ"</string>
@@ -1834,7 +1838,7 @@
<string name="filter" msgid="9039576690686251462">"ಫಿಲ್ಟರ್"</string>
<string name="filter_dlg_title" msgid="3086282431958601338">"ಫಿಲ್ಟರ್ ಆಯ್ಕೆಗಳನ್ನು ಆರಿಸಿ"</string>
<string name="filter_apps_all" msgid="5705421199299914620">"ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
- <string name="filter_apps_disabled" msgid="5068011814871004105">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆಪ್ಗಳು"</string>
+ <string name="filter_apps_disabled" msgid="5068011814871004105">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ ಆ್ಯಪ್ಗಳು"</string>
<string name="filter_apps_third_party" msgid="9049447784849114843">"ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗಿದೆ"</string>
<string name="filter_apps_running" msgid="535465683273284141">"ಚಾಲನೆಯಲ್ಲಿದೆ"</string>
<string name="not_installed" msgid="5074606858798519449">"ಈ ಬಳಕೆದಾರರಿಗಾಗಿ ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"ಒಂದೇ ಕೀನ ತ್ವರಿತ ಪುನರಾವರ್ತಿತ ಪ್ರೆಸ್ಗಳನ್ನು ಕೀಬೋರ್ಡ್ ನಿರ್ಲಕ್ಷಿಸುತ್ತದೆ"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"ಬೌನ್ಸ್ ಕೀ ಥ್ರೆಶೋಲ್ಡ್"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಪುನರಾವರ್ತಿತ ಕೀ ಪ್ರೆಸ್ಗಳನ್ನು ನಿರ್ಲಕ್ಷಿಸಬೇಕಾದ ಸಮಯದ ಅವಧಿಯನ್ನು ಆರಿಸಿ"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2ಸೆ"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4ಸೆ"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6ಸೆ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2ಸೆ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4ಸೆ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6ಸೆ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"ಕಸ್ಟಮ್"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ಕಸ್ಟಮ್ ಮೌಲ್ಯ"</string>
<string name="slow_keys" msgid="2891452895499690837">"ಸ್ಲೋ ಕೀಗಳು"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"ಕೀ ಪ್ರೆಸ್ ಸಕ್ರಿಯಗೊಳ್ಳಲು ತೆಗೆದುಕೊಳ್ಳುವ ಸಮಯವನ್ನು ಅಡ್ಜಸ್ಟ್ ಮಾಡುತ್ತದೆ"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ಸ್ಟಿಕಿ ಕೀಗಳು"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ಕೀಗಳನ್ನು ಜೊತೆಯಾಗಿ ಕೆಳಗೆ ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವ ಬದಲಾಗಿ ಶಾರ್ಟ್ಕಟ್ಗಳಿಗಾಗಿ ಒಂದು ಬಾರಿ ಒಂದು ಕೀ ಅನ್ನು ಒತ್ತಿ"</string>
<string name="mouse_keys" msgid="6237254627808525540">"ಮೌಸ್ ಕೀಗಳು"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"ಪಾಯಿಂಟರ್ ಅನ್ನು ಕಂಟ್ರೋಲ್ ಮಾಡಲು ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಅನ್ನು ಬಳಸಿ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"ಮೌಸ್ ಹಿಮ್ಮುಖ ಸ್ಕ್ರಾಲ್ ಮಾಡುವಿಕೆ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"ಪುಟವನ್ನು ಕೆಳಕ್ಕೆ ಸರಿಸಲು ಮೇಲಕ್ಕೆ ಸ್ಕ್ರಾಲ್ ಮಾಡಿ"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ಎಡ ಮತ್ತು ಬಲ ಬಟನ್ಗಳನ್ನು ಬದಲಾಯಿಸಿ"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ಎಡ ಮೌಸ್ ಬಟನ್ ಅನ್ನು ನಿಮ್ಮ ಬಲ ಬಟನ್ ಆಗಿ ಬಳಸಿ"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"ಕೀಬೋರ್ಡ್ ಶಾರ್ಟ್ಕಟ್ಗಳು"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ಶಾರ್ಟ್ಕಟ್ಗಳ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸಿ"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್ ಕೀಬೋರ್ಡ್ಗಳು ಮತ್ತು ಉಪಕರಣಗಳು"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> ಗಾಗಿ ಹೊಸ ಕೀ ಆಯ್ಕೆಮಾಡಿ:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ಭೌತಿಕ ಕೀಬೋರ್ಡ್ ಆ್ಯಕ್ಸೆಸಿಬಿಲಿಟಿ"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ಸ್ಟಿಕಿ ಕೀಗಳು, ಬೌನ್ಸ್ ಕೀಗಳು, ಮೌಸ್ ಕೀಗಳು"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"ಕೀಗಳನ್ನು ಪುನರಾವರ್ತಿಸಿ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ಪುನರಾವರ್ತನೆಗೆ ಮೊದಲು ವಿಳಂಬ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ಪುನರಾವರ್ತಿತ ದರ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ಕೀ ಬಿಡುಗಡೆ ಆಗುವವರೆಗೆ ಅದರ ಅಕ್ಷರವನ್ನು ಪುನರಾವರ್ತಿಸಲು ಕೀಯನ್ನು ಹೋಲ್ಡ್ ಮಾಡಿ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> ಲೇಔಟ್"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ಡಿಫಾಲ್ಟ್"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ಆಟೋಮೆಟಿಕ್: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ಪೂರ್ವವೀಕ್ಷಣೆ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ಪ್ರಮಾಣಿತ ಆಯ್ಕೆಗಳು"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ಭಾಷೆ"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"ಕ್ಯಾಪ್ಶನ್ ಗಾತ್ರ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"ಶೀರ್ಷಿಕೆಯ ಶೈಲಿ"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ಕಸ್ಟಮ್ ಆಯ್ಕೆಗಳು"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"ಹಿನ್ನೆಲೆ ಬಣ್ಣ"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ವಿದ್ಯುತ್ ಬಳಕೆಯನ್ನು ಹೊಂದಿಸಿ"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ಒಳಗೊಂಡ ಪ್ಯಾಕೇಜ್ಗಳು"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ಅಪ್ಲಿಕೇಶನ್ಗಳು ಸಾಮಾನ್ಯವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿವೆ"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ಬ್ಯಾಟರಿ ಮಟ್ಟ ಕಡಿಮೆ ಇದೆ"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ವಿಸ್ತರಿಸಲು ಬ್ಯಾಟರಿ ಸೇವರ್ ಅನ್ನು ಆನ್ ಮಾಡಿ"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ಸುಧಾರಿಸಿ"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ಈ VPN ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸುವುದೇ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿ"</string>
<string name="vpn_version" msgid="6344167191984400976">"ಆವೃತ್ತಿ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ಆವೃತ್ತಿ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ಮರೆತುಬಿಡು"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ VPN ಸ್ಥಾನಾಂತರಿಸುವುದೇ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN ಯಾವಾಗಲೂ ಆನ್ ಆಗಿರುವಂತೆ ಹೊಂದಿಸುವುದೇ?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"ವಾರದ ದಿನಗಳಲ್ಲಿ 9 AM - 5 PM\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"ಕ್ಯಾಲೆಂಡರ್ ಈವೆಂಟ್ಗಳು"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ಸಕ್ರಿಯವಾಗಿದೆ}=2{{mode_1} ಮತ್ತು {mode_2} ಸಕ್ರಿಯವಾಗಿವೆ}=3{{mode_1}, {mode_2}, ಮತ್ತು {mode_3} ಸಕ್ರಿಯವಾಗಿವೆ}one{{mode_1}, {mode_2}, ಮತ್ತು # ಇತ್ಯಾದಿಗಳು ಸಕ್ರಿಯವಾಗಿವೆ}other{{mode_1}, {mode_2}, ಮತ್ತು # ಇತ್ಯಾದಿಗಳು ಸಕ್ರಿಯವಾಗಿವೆ}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ಮೋಡ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗಬಹುದು}one{# ಮೋಡ್ಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗಬಹುದು}other{# ಮೋಡ್ಗಳು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗಬಹುದು}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ಆನ್ ಆಗಿದೆ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"ಸಾಧನ ಮಾತ್ರ"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"ಹೊಸ ಸಂಪರ್ಕಗಳನ್ನು ಖಾತೆಯ ಜೊತೆ ಸಿಂಕ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"ಸಂಪರ್ಕಗಳನ್ನು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಸೇವ್ ಮಾಡಲಾಗುತ್ತದೆ ಮತ್ತು ಡೀಫಾಲ್ಟ್ ಆಗಿ ನಿಮ್ಮ ಖಾತೆಗೆ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ಡೀಫಾಲ್ಟ್ ಆಗಿ ಯಾವುದನ್ನೂ ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ಡೀಫಾಲ್ಟ್ ಖಾತೆಯನ್ನು ಸೆಟ್ ಮಾಡುವಾಗ ದೋಷ ಎದುರಾಗಿದೆ"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ಡೀಫಾಲ್ಟ್ ಆಗಿ ಯಾವುದನ್ನೂ ಸೆಟ್ ಮಾಡಿಲ್ಲ"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"ಸಾಧನ ಮಾತ್ರ"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ಪ್ರಾರಂಭಿಸಲು ಒಂದು ಖಾತೆಯನ್ನು ಸೇರಿಸಿ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ಹುಡುಕಲು ಒಂದು ಸರ್ಕಲ್ ರಚಿಸಿ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಮೇಲಿನ ಕಂಟೆಂಟ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಹುಡುಕಲು ಹೋಮ್ ಬಟನ್ ಅಥವಾ ನ್ಯಾವಿಗೇಶನ್ ಹ್ಯಾಂಡಲ್ ಅನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಒತ್ತಿ ಹಿಡಿಯಿರಿ."</string>
</resources>
diff --git a/res/values-ko/arrays.xml b/res/values-ko/arrays.xml
index babd76d..0d2685a 100644
--- a/res/values-ko/arrays.xml
+++ b/res/values-ko/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"눈송이"</item>
<item msgid="7952183800501346803">"비치 파라솔"</item>
<item msgid="799139025758265891">"워크숍 도구"</item>
- <item msgid="1330084588359129896">"텐트"</item>
+ <item msgid="8112685757657659269">"피아노"</item>
<item msgid="3861584909935022342">"필름 릴"</item>
<item msgid="5827426100157335512">"책"</item>
<item msgid="8585828346253128384">"연꽃"</item>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 22c7755..0031f5f 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"블루투스 LE 오디오 사용 중지"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"기기가 LE 오디오 하드웨어 기능을 지원하는 경우 블루투스 LE 오디오 기능을 사용 중지합니다."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"블루투스 LE 오디오 모드"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"기기 세부정보에 LE 오디오 전환 버튼 표시"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"블루투스 LE 오디오 허용 목록 우회"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE 오디오 주변기기가 허용 목록 기준을 충족하는 것으로 확인되지 않은 경우에도 기본적으로 LE 오디오를 사용합니다."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"네트워크 및 무선 신호를 사용하여 자동으로 설정합니다."</string>
<string name="zone_auto_title" msgid="3520584257065861479">"시간대 자동 설정"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"주변의 모바일 네트워크를 기반으로 자동으로 설정합니다."</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"가능한 경우, 기기 위치를 사용하여 자동으로 설정합니다. 활성 상태의 Wi-Fi 연결도 필요할 수 있습니다."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"가능한 경우, 기기 위치를 사용하여 자동으로 설정합니다."</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"언어 기본값 사용"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24시간 형식 사용"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"시간"</string>
@@ -562,14 +566,14 @@
<string name="work_profile_category_header" msgid="85707750968948517">"직장 프로필"</string>
<string name="private_space_title" msgid="1752064212078238723">"비공개 스페이스"</string>
<string name="private_space_summary" msgid="2274405892301976238">"비공개 앱을 잠그고 숨겨진 상태로 유지"</string>
- <string name="private_space_description" msgid="4059594203775816136">"비공개 앱을 숨기거나 잠글 수 있는 별도의 스페이스에 보관하세요."</string>
+ <string name="private_space_description" msgid="4059594203775816136">"숨기거나 잠글 수 있는 별도의 스페이스에 비공개 앱을 보관하세요."</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"비공개 스페이스 잠금"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"기기를 잠금 해제하는 방식과 동일하게 비공개 스페이스를 잠금 해제하거나 다른 잠금 방식을 선택할 수 있습니다."</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"기기 화면 잠금 사용"</string>
<string name="private_space_biometric_title" msgid="3934339826674553174">"얼굴 및 지문 잠금 해제"</string>
<string name="private_space_fingerprint_title" msgid="5989254643211889931">"지문 잠금 해제"</string>
<string name="private_space_face_title" msgid="3290402865367663079">"얼굴 인식 잠금 해제"</string>
- <string name="private_space_biometric_summary" msgid="4403837276018724581">"탭하여 설정"</string>
+ <string name="private_space_biometric_summary" msgid="4403837276018724581">"설정하려면 탭하세요."</string>
<string name="private_space_fingerprint_unlock_title" msgid="3614016453395789051">"비공개 스페이스용 지문 잠금 해제"</string>
<string name="private_space_face_unlock_title" msgid="462248384776453613">"비공개 스페이스용 얼굴 인식 잠금 해제"</string>
<string name="private_space_biometric_unlock_title" msgid="1978145237698659673">"비공개 스페이스용 얼굴 인식 및 지문 잠금 해제"</string>
@@ -608,7 +612,7 @@
<string name="private_space_category_system" msgid="1286843321867285700">"시스템"</string>
<string name="private_space_delete_title" msgid="636873505724100006">"비공개 스페이스 삭제"</string>
<string name="private_space_delete_header" msgid="4594429153176776184">"비공개 스페이스를 삭제하시겠습니까?"</string>
- <string name="private_space_delete_summary" msgid="7507302208399543921">"비공개 스페이스가 기기에서 영구적으로 삭제되며, \n\n해당 스페이스에 있는 모든 앱과 관련 데이터도 휴대전화의 "<b>"내부 저장소"</b>"에서 영구적으로 삭제됩니다."</string>
+ <string name="private_space_delete_summary" msgid="7507302208399543921">"비공개 스페이스가 기기에서 영구적으로 삭제됩니다. \n\n해당 스페이스에 있는 모든 앱과 관련 데이터도 휴대전화의 "<b>"내부 저장소"</b>"에서 영구적으로 삭제됩니다."</string>
<string name="private_space_accounts" msgid="1078277762792056395">"다음 계정이 비공개 스페이스에서 삭제됩니다."</string>
<string name="private_space_delete_button_label" msgid="1256981385318225002">"삭제"</string>
<string name="private_space_confirm_deletion_header" msgid="3468651585498942977">"비공개 스페이스 삭제 중…"</string>
@@ -622,7 +626,7 @@
<string name="private_space_cancel_label" msgid="379259667396956886">"취소"</string>
<string name="private_space_setup_button_label" msgid="2094882154623560585">"설정"</string>
<string name="private_space_setup_title" msgid="2272968244329821450">"비공개 스페이스"</string>
- <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"별도의 스페이스에서 비공개 앱을 숨기거나 잠급니다. 추가 보안을 위해 전용 Google 계정을 사용하세요."</string>
+ <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"별도의 스페이스에서 비공개 앱을 숨기거나 잠글 수 있습니다. 추가 보안을 위해 전용 Google 계정을 사용하세요."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"작동 원리"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"스페이스를 위한 Google 계정 만들기"</b>\n"전용 계정을 사용하면 동기화된 파일, 사진, 이메일이 스페이스 외부에 표시되는 것을 방지할 수 있습니다."</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"잠금 설정"</b>\n"다른 사용자가 스페이스를 열지 못하게 하려면 스페이스를 잠급니다."</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"접근성"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"물리적 키보드"</string>
<string name="bounce_keys" msgid="7419450970351743904">"바운스 키"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"동일한 키를 빠르게 반복해서 누를 시 키보드에서 이를 무시합니다."</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"바운스 키 기준점"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"키보드에서 반복 키 입력을 무시하는 시간을 선택하세요"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2초"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4초"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6초"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"맞춤"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"맞춤 값"</string>
<string name="slow_keys" msgid="2891452895499690837">"느린 키"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"키를 누를 때 활성화하기까지 걸리는 시간을 조정합니다."</string>
<string name="sticky_keys" msgid="7317317044898161747">"고정키"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"단축키를 사용할 때 키를 함께 누르지 않고 한 번에 하나씩 누릅니다"</string>
<string name="mouse_keys" msgid="6237254627808525540">"마우스 키"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"키보드를 사용하여 포인터를 제어합니다."</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"마우스 역방향 스크롤"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"위로 스크롤하여 페이지 아래로 이동합니다."</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"왼쪽 및 오른쪽 버튼 바꾸기"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"왼쪽 마우스 버튼을 오른쪽 버튼으로 사용합니다."</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"단축키"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"단축키 목록 표시"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>의 새 키 선택:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"실제 키보드 접근성"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"고정키, 바운스 키, 마우스 키"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"키 반복"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"반복 전 지연"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"반복 속도"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"키를 길게 눌러 문자를 반복해서 입력하고 키에서 손을 뗍니다."</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> 레이아웃"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"기본"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"자동: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"미리보기"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"표준 옵션"</string>
<string name="captioning_locale" msgid="5533303294290661590">"언어"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"자막 크기"</string>
<string name="captioning_preset" msgid="4174276086501638524">"자막 스타일"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"맞춤설정 옵션"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"배경색"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"전원 사용 조절"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"포함된 패키지"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"앱이 정상적으로 작동 중"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"배터리 잔량 부족"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"절전 모드를 사용 설정하여 배터리 수명을 늘리세요"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"배터리 수명 개선"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"이 VPN을 연결 해제하시겠습니까?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"연결 해제"</string>
<string name="vpn_version" msgid="6344167191984400976">"버전"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"버전 <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN 삭제"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"기존 VPN을 교체하시겠습니까?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"연결 유지 VPN을 설정하시겠습니까?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\'평일 오전 9시~오후 5시\'"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"캘린더 일정"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} 모드가 활성화됨}=2{{mode_1} 및 {mode_2} 모드가 활성화됨}=3{{mode_1}, {mode_2}, {mode_3} 모드가 활성화됨}other{{mode_1}, {mode_2} 외 #개 모드가 활성화됨}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{모드 1개가 자동으로 사용 설정될 수 있음}other{모드 #개가 자동으로 사용 설정될 수 있음}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"사용"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"설정되지 않음"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"사용 중지됨"</string>
@@ -3761,7 +3784,7 @@
<string name="notification_channels_other" msgid="18159805343647908">"기타"</string>
<string name="no_channels" msgid="4716199078612071915">"이 앱에서 게시한 알림이 없음"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"사용하지 않는 카테고리 표시"</string>
- <string name="app_settings_link" msgid="6725453466705333311">"앱 내 추가 설정"</string>
+ <string name="app_settings_link" msgid="6725453466705333311">"앱 추가 설정"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"사용하지 않는 카테고리 표시"</string>
<string name="hide_unused_channels" msgid="2019739275175707170">"사용하지 않는 카테고리 숨기기"</string>
<string name="deleted_channels" msgid="8489800381509312964">"{count,plural, =1{카테고리 #개 삭제됨}other{카테고리 #개 삭제됨}}"</string>
@@ -3823,7 +3846,7 @@
<string name="zen_mode_conversations_count" msgid="3199310723073707153">"{count,plural, =0{없음}=1{대화 1개}other{대화 #개}}"</string>
<string name="zen_mode_from_conversations_settings" msgid="2411930666794576607">"대화 설정"</string>
<string name="zen_mode_people_calls_messages_section_title" msgid="6815202112413762206">"예외 대상"</string>
- <string name="zen_mode_people_footer" msgid="7710707353004137431">"메시지 또는 전화 앱에서 나에게 알림을 전송할 수 없을 때에도 여기에서 선택한 사용자는 앱을 통해 나에게 연락할 수 있습니다."</string>
+ <string name="zen_mode_people_footer" msgid="7710707353004137431">"메시지 또는 전화 앱에서 나에게 알림을 전송할 수 없을 때에도 여기에서 선택한 사람은 이러한 앱을 통해 나에게 연락할 수 있습니다."</string>
<string name="zen_mode_calls_title" msgid="2078578043677037740">"전화"</string>
<string name="zen_mode_calls" msgid="7653245854493631095">"전화"</string>
<string name="zen_mode_calls_list" msgid="5044730950895749093">"전화"</string>
@@ -5180,7 +5203,7 @@
<string name="all_apps" msgid="3054120149509114789">"모든 앱"</string>
<string name="request_manage_bluetooth_permission_dont_allow" msgid="8798061333407581300">"허용 안함"</string>
<string name="uwb_settings_title" msgid="8578498712312002231">"초광대역(UWB)"</string>
- <string name="uwb_settings_summary" msgid="3074271396764672268">"UWB를 지원하는 근처 기기의 상대적인 위치를 파악할 수 있도록 돕습니다."</string>
+ <string name="uwb_settings_summary" msgid="3074271396764672268">"UWB를 지원하는 주변 기기의 상대적인 위치를 파악하도록 돕습니다."</string>
<string name="uwb_settings_summary_airplane_mode" msgid="1328864888135086484">"UWB를 사용하려면 비행기 모드를 사용 중지하세요."</string>
<string name="uwb_settings_summary_no_uwb_regulatory" msgid="3465456428217979428">"현재 위치에서는 UWB를 사용할 수 없습니다."</string>
<string name="thread_network_settings_title" msgid="4212301030523859220">"스레드"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"설정 검색"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"연락처, 저장소, 계정"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"연락처 저장소"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"기본 설정 없음"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"기기만"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"새 연락처는 계정과 동기화되지 않습니다."</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"연락처가 기기에 저장되고 기본적으로 계정과 동기화됩니다."</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"기본 계정을 설정하는 중에 오류가 발생했습니다."</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"기본 설정 없음"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"기기만"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"계정을 추가하여 시작하세요."</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"서클 투 서치"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"화면의 콘텐츠를 사용해 검색하려면 홈 버튼 또는 탐색 핸들을 길게 터치합니다."</string>
</resources>
diff --git a/res/values-ky/arrays.xml b/res/values-ky/arrays.xml
index ecd3a22..7514614 100644
--- a/res/values-ky/arrays.xml
+++ b/res/values-ky/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Кар бүртүгү"</item>
<item msgid="7952183800501346803">"Кумдуу жээктеги чатыр"</item>
<item msgid="799139025758265891">"Устаканадагы аспаптар"</item>
- <item msgid="1330084588359129896">"Чатыр"</item>
+ <item msgid="8112685757657659269">"Пианино"</item>
<item msgid="3861584909935022342">"Тасма түрмөгү"</item>
<item msgid="5827426100157335512">"Аудиокитеп"</item>
<item msgid="8585828346253128384">"Лотос гүлү"</item>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 877a930..af47fa2 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE audio\'ну өчүрүү"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Эгер түзмөктө аппараттык мүмкүнчүлүктөр болсо, Bluetooth LE Audio функциясы өчүрүлөт."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio режими"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Түзмөктүн чоо-жайынан LE Audio которгучун көрсөтүү"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio ак тизмесин кыйгап өтүү"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio тышкы түзмөгү ак тизменин талабына жооп берери ырасталбаса да, LE Audio\'ну демейки шартта колдонуңуз."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Тармак жана зымсыз сигналдар аркылуу автоматтык түрдө орнотуу"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Убакыт алкагын автоматтык түрдө аныктоо"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Жаныңыздагы мобилдик тармактардын негизинде автоматтык түрдө орнотуу"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Түзмөктүн турган жеринин негизинде автоматтык түрдө орнотуу. Wifi\'га туташуу керектелиши мүмкүн."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Түзмөктүн турган жеринин негизинде автоматтык түрдө орнотуу"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Демейки жергиликтүү форматты колдонуу"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 сааттык форматты колдонуу"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Убакыт"</string>
@@ -562,7 +566,7 @@
<string name="work_profile_category_header" msgid="85707750968948517">"Жумуш профили"</string>
<string name="private_space_title" msgid="1752064212078238723">"Жеке мейкиндик"</string>
<string name="private_space_summary" msgid="2274405892301976238">"Жеке колдонмолорду кулпулап жана жашырып коюңуз"</string>
- <string name="private_space_description" msgid="4059594203775816136">"Жеке колдонмолорду жашырып же кулпулай ала турган өзүнчө мейкиндикте сактаңыз"</string>
+ <string name="private_space_description" msgid="4059594203775816136">"Жеке колдонмолорду жашырылуучу же кулпулануучу өзүнчө мейкиндикте сактаңыз"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Жеке мейкиндикти кулпулоо"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Жеке мейкиндикти түзмөгүңүздүн кулпусу менен бекитип же башка кулпуну тандай аласыз"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"Түзмөктүн экранын кулпулоо ыкмасын колдонуу"</string>
@@ -625,12 +629,12 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Жеке колдонмолоруңуз үчүн мейкиндик түзүп, каалаган учурда жашырып же кулпулап коёсуз. Коопсуздук максатында өзүнчө Google аккаунтун колдонуңуз."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Ал кантип иштейт"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Жеке мейкиндик үчүн Google аккаунтун түзүү"</b>\n"Эгер атайын дайындалган аккаунтту түзсөңүз, жеке мейкиндиктен сырткары жайгашкан файлдар, сүрөттөр жана электрондук каттар шайкештирилбейт"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Кулпу коюңуз"</b>\n"Башкалар ачып албашы үчүн жеке мейкиндигиңизди кулпулап коюңуз"</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Колдонмолорду орнотуу"</b>\n"Жеке мейкиндикте купуя сактагыңыз келген колдонмолорду орнотуңуз"</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Кулпу коюңуз"</b>\n"Жеке мейкиндигиңизди башкалар ачып албагандай кылып кулпулап коюңуз"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Колдонмолорду орнотуңуз"</b>\n"Аларды өзүңүз гана колдоносуз"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Эскертүү"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Жеке мейкиндикти кулпулаганыңызда колдонмолор иштебей калат"</b>\n"Жеке мейкиндикти кулпулаганыңызда андагы колдонмолор иштебей калат жана алардан билдирмелерди албай каласыз"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Жеке мейкиндиктер фондук режимде иштеп же маанилүү билдирмелерди жөнөтүшү керек болгон колдонмолорго (мисалы, медициналык колдонмолор) ылайыксыз. Мындай мейкиндик кулпуланганда, фондогу аракеттер жана билдирмелер токтотулат.\n\nЖеке мейкиндик кулпуланганда андагы колдонмолор уруксаттарда, купуялык тактасында жана башка параметрлерде көрүнбөйт.\n\nЖеке мейкиндигиңизди жаңы түзмөккө жылдырууга болбойт. Башка түзмөктө колдонуу үчүн башка жеке мейкиндикти тууралашыңыз керек болот.\n\nЖеке мейкиндигиңизге түзмөгүңүзгө зыянкеч колдонмолорду орноткон же аны өз компьютерине кошуп алган адам кире алат."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Жеке мейкиндиктер фондук режимде иштеп же маанилүү билдирмелерди жөнөтүшү керек болгон колдонмолорго (мисалы, медициналык колдонмолор) ылайыксыз. Мындай мейкиндик кулпуланганда фондогу аракеттер жана билдирмелер токтотулат.\n\nЖеке мейкиндик кулпуланганда андагы колдонмолор уруксаттарда, купуялык тактасында жана башка параметрлерде көрүнбөйт.\n\nЖеке мейкиндикти жаңы түзмөктө калыбына келтирүүгө болбойт. Башка түзмөктө колдонуу үчүн башка мейкиндикти тууралашыңыз керек.\n\nЖеке мейкиндигиңизге түзмөгүңүзгө зыянкеч колдонмолорду орноткон же аны өз компьютерине кошуп алган адам кире алат."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Жеке мейкиндиктер фондук режимде иштеген же маанилүү билдирмелерди жөнөткөн колдонмолорго (мисалы, медициналык колдонмолор) жарабайт. Мындай мейкиндик кулпуланганда, фондогу аракеттер токтоп, билдирмелер келбей калат.\n\nОшондой эле андагы колдонмолор уруксаттар экранында, купуялык тактасында жана башка параметрлерде көрүнбөйт.\n\nЖеке мейкиндик жаңы түзмөктө калыбына келбейт, бирок жаңысын түзсөңүз болот.\n\nЖеке мейкиндигиңизге түзмөгүңүзгө кесепеттүү колдонмолорду орноткон же аны өз компьютерине кошуп алган адам кирип кетиши мүмкүн."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Жеке мейкиндиктер фондук режимде иштеген же маанилүү билдирмелерди жөнөткөн колдонмолорго (мисалы, медициналык колдонмолор) жарабайт. Мындай мейкиндик кулпуланганда, фондогу аракеттер токтоп, билдирмелер келбей калат.\n\nОшондой эле андагы колдонмолор уруксаттар экранында, купуялык тактасында жана башка параметрлерде көрүнбөйт.\n\nЖеке мейкиндик жаңы түзмөктө калыбына келбейт, бирок жаңысын түзсөңүз болот.\n\nЖеке мейкиндигиңизге түзмөгүңүзгө кесепеттүү колдонмолорду орноткон же аны өз компьютерине кошуп алган адам кирип кетиши мүмкүн."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Жеке мейкиндик тууралуу кеңири маалымат"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Буга аз эле убакыт кетет"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"Жеке мейкиндик туураланууда…"</string>
@@ -1783,7 +1787,7 @@
<string name="advanced_settings_summary" msgid="1823765348195530035">"Көбүрөөк тууралоо опцияларын көрсөтүү"</string>
<string name="application_info_label" msgid="1015706497694165866">"Колдонмо тууралуу"</string>
<string name="storage_label" msgid="2522307545547515733">"Сактагыч"</string>
- <string name="auto_launch_label" msgid="4069860409309364872">"Демейки шарт боюнча ачуу"</string>
+ <string name="auto_launch_label" msgid="4069860409309364872">"Демейки шартта ачуу"</string>
<string name="auto_launch_label_generic" msgid="5033137408273064599">"Демейки"</string>
<string name="screen_compatibility_label" msgid="7549658546078613431">"Экрандын шайкештиги"</string>
<string name="permissions_label" msgid="1708927634370314404">"Уруксаттар"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Бир эле баскычтын удаа басылганы этибарга алынбайт"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Удаа басылган баскычтардын мааниси"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Баскычтын удаа басылганы этибарга алынбаган убакыттын узундугун тандаңыз"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 сек."</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 сек."</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 сек."</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 сек."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 сек."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 сек."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Жеке"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"жеке маани"</string>
<string name="slow_keys" msgid="2891452895499690837">"Жай баскычтар"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Басылган баскыч качан эске алынарын тууралайт"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Жабышма баскычтар"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Ыкчам баскычтарды чогуу басып туруунун ордуна бирден басасыз"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Чычкандын баскычтары"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Курсорду баскычтоптон көзөмөлдөңүз"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Чычкан менен артка сыдыруу"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Баракты ылдый жылдыруу үчүн экранды өйдө сыдырыңыз"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Сол жана оң баскычтарды алмаштырыңыз"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Чычкандын сол баскычын оң баскыч катары колдонуңуз"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Ыкчам баскычтар"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Ыкчам баскычтардын тизмеси көрүнөт"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Жумуш профилинин баскычтоптору жана куралдары"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> үчүн жаңы ачкыч тандаңыз:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Аппараттык баскычтоптогу атайын мүмкүнчүлүктөр"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Жабышма баскычтар, Кайтаруу баскычтары, Чычкандын баскычтары"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Баскычтарды кайталоо"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Кайталанганга чейинки кечигүү"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Кайталоо ылдамдыгы"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Символду кайталап терүү үчүн баскычты коё бербей басып туруңуз"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> калыбы"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Демейки"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автоматтык: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Алдын ала көрүү"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандарттык опциялар"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Тили"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Коштомо жазуунун өлчөмү"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Коштомо жазуунун стили"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Ылайыкташтырылган тууралоолор"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Фондун түсү"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Кубат сарпталышын тууралоо"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Камтылган топтомдор"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Колдонмолор туура иштеп жатат"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Батареянын деңгээли төмөн"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Батареяны көбүрөөк убакытка жеткирүү үчүн Батареяны үнөмдөгүч режимин күйгүзүңүз"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Батареяны көбүрөөк убакытка жеткирүү"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Бул VPN ажыратылсынбы?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ажыратуу"</string>
<string name="vpn_version" msgid="6344167191984400976">"Версия"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g> версиясы"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN профили унутулсун"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Учурдагы VPN алмаштырылсынбы?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Туруктуу VPN\'ди жөндөйсүзбү?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Иш күндөрү саат 09:00 баштап 17:00 чейин\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Жылнаамадагы иш-чаралар"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} иштеп жатат}=2{{mode_1} жана {mode_2} иштеп жатат}=3{{mode_1}, {mode_2} жана {mode_3} иштеп жатат}other{{mode_1}, {mode_2} жана дагы # иштеп жатат}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режимди автоматтык түрдө күйгүзүүгө болот}other{# режимди автоматтык түрдө күйгүзүүгө болот}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"КҮЙҮК"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Туураланган эмес"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Өчүк"</string>
@@ -3980,11 +4011,11 @@
<string name="memtag_learn_more" msgid="1596145970669119776">"Өркүндөтүлгөн эстутумду коргоо жөнүндө толук маалымат алыңыз."</string>
<string name="opening_paragraph_delete_profile_unknown_company" msgid="2951348192319498135">"Бул жумуш профилин төмөнкү башкарат:"</string>
<string name="managing_admin" msgid="2633920317425356619">"Төмөнкү башкарат <xliff:g id="ADMIN_APP_LABEL">%s</xliff:g>"</string>
- <string name="launch_by_default" msgid="892824422067985734">"Демейки шарт боюнча ачуу"</string>
+ <string name="launch_by_default" msgid="892824422067985734">"Демейки шартта ачуу"</string>
<string name="app_launch_open_domain_urls_title" msgid="4805388403977096285">"Колдоого алынган шилтемелерди ачуу"</string>
<string name="app_launch_open_in_app" msgid="2208182888681699512">"Колдонмодо"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"Серепчиңизде"</string>
- <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Колдонмодо шилтемелер кантип ачылышы керек экенин тандаңыз"</string>
+ <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Колдонмодо шилтемелер кантип ачыларын тандаңыз"</string>
<string name="app_launch_links_category" msgid="2380467163878760037">"Ушул колдонмодо ачылган шилтемелер"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"Колдоого алынган шилтемелер"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"Башка демейки жөндөөлөр"</string>
@@ -4023,7 +4054,7 @@
<string name="unused_apps_switch" msgid="7595419855882245772">"Колдонулбаган колдонмолордун ишин тындыруу"</string>
<string name="unused_apps_switch_summary" msgid="2171098908014596802">"Уруксаттар өчүрүлүп, убактылуу файлдар тазаланып, билдирмелер келбей калат"</string>
<string name="unused_apps_switch_v2" msgid="7464060328451454469">"Колдонмо колдонулбаса, аны тескеңиз"</string>
- <string name="unused_apps_switch_summary_v2" msgid="3182898279622036805">"Уруксаттарды алып салып, убактылуу файлдарды жок кылып, билдирмелерди токтотуңуз жана колдонмону архивдеңиз"</string>
+ <string name="unused_apps_switch_summary_v2" msgid="3182898279622036805">"Уруксаттарды алып салып, убактылуу файлдарды жок кылып, билдирмелерди токтотуп, колдонмону архивдейсиз"</string>
<string name="filter_all_apps" msgid="6645539744080251371">"Бардык колдонмолор"</string>
<string name="filter_enabled_apps" msgid="8868356616126759124">"Орнотулган колдонмолор"</string>
<string name="filter_instant_apps" msgid="2292108467020380068">"Ыкчам ачылуучу колдонмолор"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Түзмөк аркылуу гана"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Жаңы байланыштар аккаунтта шайкештирилбейт"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Байланыштар түзмөгүңүздө сакталып, аккаунтуңузда демейки шартта шайкештирилет"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Демейки параметрлер коюлган жок"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Демейки аккаунтту орнотуп жатканда ката кетти"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Демейки аккаунт орнотулган жок"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Түзмөктө гана"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Баштоо үчүн аккаунт кошуңуз"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Тегеректеп издөө"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Экрандагы нерселер боюнча издөө үчүн Башкы бет баскычын же өтүү тилкесин коё бербей басып туруңуз."</string>
</resources>
diff --git a/res/values-lo/arrays.xml b/res/values-lo/arrays.xml
index 6dcbd8d..d4b312d 100644
--- a/res/values-lo/arrays.xml
+++ b/res/values-lo/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ເກັດຫິມະ"</item>
<item msgid="7952183800501346803">"ຄັນຮົ່ມຫາດຊາຍ"</item>
<item msgid="799139025758265891">"ເຄື່ອງມືເວີກຊັອບ"</item>
- <item msgid="1330084588359129896">"ເຕັ້ນ"</item>
+ <item msgid="8112685757657659269">"ເປຍໂນ"</item>
<item msgid="3861584909935022342">"ມ້ວນຟີມ"</item>
<item msgid="5827426100157335512">"ປຶ້ມ"</item>
<item msgid="8585828346253128384">"ດອກບົວ"</item>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 2207ee4..0bc0d9f 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ປິດການນຳໃຊ້ສຽງ Bluetooth LE"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ປິດການນຳໃຊ້ຄຸນສົມບັດສຽງ Bluetooth LE ຫາກອຸປະກອນຮອງຮັບຄວາມສາມາດຂອງຮາດແວສຽງ LE."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ໂໝດສຽງ Bluetooth LE"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ສະແດງການສະຫຼັບສຽງ LE ໃນລາຍລະອຽດອຸປະກອນ"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ຂ້າມລາຍຊື່ອະນຸຍາດສຽງ Bluetooth LE"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ໃຊ້ສຽງ LE ໂດຍຄ່າເລີ່ມຕົ້ນເຖິງວ່າອຸປະກອນຕໍ່ພ່ວງສຽງ LE ຈະບໍ່ໄດ້ຮັບການຢັ້ງຢືນວ່າເປັນໄປຕາມເກນລາຍຊື່ອະນຸຍາດກໍຕາມ."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ຕັ້ງຄ່າອັດຕະໂນມັດໂດຍໃຊ້ເຄືອຂ່າຍ ແລະ ສັນຍານໄຮ້ສາຍຂອງທ່ານ"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ເຂດເວລາອັດຕະໂນມັດ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ຕັ້ງຄ່າອັດຕະໂນມັດໂດຍອີງຕາມເຄືອຂ່າຍມືຖືທີ່ຢູ່ໃກ້ກັບທ່ານ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ຕັ້ງຄ່າອັດຕະໂນມັດໂດຍໃຊ້ສະຖານທີ່ອຸປະກອນຂອງທ່ານ (ຫາກມີ). ອາດຕ້ອງມີການເຊື່ອມຕໍ່ Wi-Fi ທີ່ເປີດໃຊ້ຢູ່ນຳ."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ຕັ້ງຄ່າອັດຕະໂນມັດໂດຍໃຊ້ສະຖານທີ່ອຸປະກອນຂອງທ່ານ, ຫາກມີ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ໃຊ້ຄ່າເລີ່ມຕົ້ນຂອງສະຖານທີ່"</string>
<string name="date_time_24hour" msgid="286679379105653406">"ໃຊ້ຮູບແບບ 24 ຊົ່ວໂມງ"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"ເວລາ"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"ການຊ່ວຍເຂົ້າເຖິງ"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"ແປ້ນພິມພາຍນອກ"</string>
<string name="bounce_keys" msgid="7419450970351743904">"ປຸ່ມດີດກັບ"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"ແປ້ນພິມຈະບໍ່ສົນໃຈການກົດປຸ່ມຊ້ຳໆໄວໆຂອງປຸ່ມດຽວກັນ"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"ເກນການຍົກເລີກການກົດປຸ່ມຊໍ້າໆ"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ເລືອກໄລຍະເວລາທີ່ແປ້ນພິມຂອງທ່ານບໍ່ສົນໃຈການກົດປຸ່ມຊໍ້າໆ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 ວິ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 ວິ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 ວິ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"ກຳນົດເອງ"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ຄ່າທີ່ກຳນົດເອງ"</string>
<string name="slow_keys" msgid="2891452895499690837">"ເພີ່ມໄລຍະເວລາໃນການກົດປຸ່ມ"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"ປັບແກ້ເວລາທີ່ມັນໃຊ້ສໍາລັບການກົດປຸ່ມເພື່ອເປີດໃຊ້"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ປຸ່ມກົດຄ້າງ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ກົດເທື່ອລະປຸ່ມເພື່ອໃຊ້ທາງລັດແທນການກົດປຸ່ມຄ້າງໄວ້ຮ່ວມກັນ"</string>
<string name="mouse_keys" msgid="6237254627808525540">"ແປ້ນເມົ້າ"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"ໃຊ້ແປ້ນພິມຂອງທ່ານເພື່ອຄວບຄຸມຕົວຊີ້"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"ການເລື່ອນເມົ້າຖອຍຫຼັງ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"ເລື່ອນຂຶ້ນເພື່ອຍ້າຍໜ້າລົງ"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ສະຫຼັບປຸ່ມຊ້າຍ ແລະ ຂວາ"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ໃຊ້ປຸ່ມເມົ້າເບື້ອງຊ້າຍເປັນປຸ່ມເບື້ອງຂວາຂອງທ່ານ"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"ປຸ່ມລັດແປ້ນພິມ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ສະແດງລາຍຊື່ຂອງທາງລັດ"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"ເລືອກປຸ່ມໃໝ່ສຳລັບ <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ການຊ່ວຍເຂົ້າເຖິງແປ້ນພິມພາຍນອກ"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ປຸ່ມກົດຄ້າງ, ປຸ່ມຕີກັບ, ແປ້ນເມົ້າ"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"ປຸ່ມຊ້ຳ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ຄວາມຊັກຊ້າກ່ອນການກົດຊ້ຳ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ອັດຕາການກົດຊ້ຳ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ກົດປຸ່ມຄ້າງໄວ້ເພື່ອເຮັດຊ້ຳຕົວອັກສອນຂອງມັນຈົນກວ່າປຸ່ມຈະຖືກປ່ອຍ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"ໂຄງຮ່າງ <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ຄ່າເລີ່ມຕົ້ນ"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ອັດຕະໂນມັດ: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ຕົວຢ່າງ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ໂຕເລືອກມາດຕະຖານ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ພາສາ"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"ຂະໜາດຄຳບັນຍາຍ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"ຮູບແບບຄຳບັນຍາຍ"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ໂຕເລືອກກຳນົດເອງ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"ສີພື້ນຫຼັງ"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ປັບແຕ່ງການໃຊ້ພະລັງງານ"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ແພັກເກດທີ່ຮວມມານຳ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ແອັບຕ່າງໆກຳລັງເຮັດວຽກຕາມປົກກະຕິ"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ລະດັບແບັດເຕີຣີເຫຼືອໜ້ອຍ"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ທ່ານສາມາດເປີດໃຊ້ຕົວປະຢັດແບັດເຕີຣີເພື່ອຍືດອາຍຸແບັດເຕີຣີໄດ້"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ປັບປຸງອາຍຸແບັດເຕີຣີ"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ຕັດການເຊື່ອມຕໍ່ VPN ນີ້ບໍ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ຕັດການເຊື່ອມຕໍ່"</string>
<string name="vpn_version" msgid="6344167191984400976">"ເວີຊັນ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ເວີຊັນ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"ລືມ VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ຂຽນທັບ VPN ທີ່ມີຢູ່ກ່ອນແລ້ວຂອງທ່ານບໍ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Set always-on VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"09:00 - 17:00 ໂມງ ຈັນຫາສຸກ\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"ນັດໝາຍປະຕິທິນ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ເຮັດວຽກຢູ່}=2{{mode_1} ແລະ {mode_2} ເຮັດວຽກຢູ່}=3{{mode_1}, {mode_2} ແລະ {mode_3} ເຮັດວຽກຢູ່}other{{mode_1}, {mode_2} ແລະ ອີກ # ໂໝດເຮັດວຽກຢູ່}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{ສາມາດເປີດໃຊ້ 1 ໂໝດໂດຍອັດຕະໂນມັດ}other{ສາມາດເປີດໃຊ້ # ໂໝດໂດຍອັດຕະໂນມັດ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ເປີດ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"ບໍ່ໄດ້ຕັ້ງຄ່າ"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ປິດການນຳໃຊ້ຢູ່"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"ຊອກຫາໃນການຕັ້ງຄ່າ"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"ລາຍຊື່ຜູ້ຕິດຕໍ່, ບ່ອນຈັດເກັບຂໍ້ມູນ, ບັນຊີ"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"ບ່ອນຈັດເກັບຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ບໍ່ມີການຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"ອຸປະກອນເທົ່ານັ້ນ"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"ລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່ຈະບໍ່ຖືກຊິ້ງຂໍ້ມູນກັບບັນຊີ"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຈະຖືກບັນທຶກໄປໃສ່ອຸປະກອນ ແລະ ຊິ້ງຂໍ້ມູນໄປຫາບັນຊີຂອງທ່ານເປັນຄ່າເລີ່ມຕົ້ນ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ການຕັ້ງຄ່າບັນຊີເລີ່ມຕົ້ນຜິດພາດ"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ບໍ່ມີການຕັ້ງຄ່າເລີ່ມຕົ້ນ"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"ອຸປະກອນເທົ່ານັ້ນ"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ເພີ່ມບັນຊີເພື່ອເລີ່ມຕົ້ນ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ແຕ້ມວົງມົນເພື່ອຊອກຫາ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ແຕະປຸ່ມໜ້າທຳອິດ ຫຼື ດ້າມຈັບນຳທາງຄ້າງໄວ້ເພື່ອຊອກຫາໂດຍໃຊ້ເນື້ອຫາຢູ່ໜ້າຈໍຂອງທ່ານ."</string>
</resources>
diff --git a/res/values-lt/arrays.xml b/res/values-lt/arrays.xml
index af16799..6566f11 100644
--- a/res/values-lt/arrays.xml
+++ b/res/values-lt/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snaigė"</item>
<item msgid="7952183800501346803">"Paplūdimio skėtis"</item>
<item msgid="799139025758265891">"Darbo įrankiai"</item>
- <item msgid="1330084588359129896">"Palapinė"</item>
+ <item msgid="8112685757657659269">"Pianinas"</item>
<item msgid="3861584909935022342">"Kino juosta"</item>
<item msgid="5827426100157335512">"Knyga"</item>
<item msgid="8585828346253128384">"Lotoso žiedas"</item>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 73a6572..e06fd1c 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"„Bluetooth LE Audio“ išjungimas"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Jei įrenginys palaiko „LE Audio“ aparatinės įrangos galimybes, išjungiama funkcija „Bluetooth LE Audio“."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"„Bluetooth LE Audio“ režimas"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Rodyti „LE Audio“ jungiklį įrenginio informacijoje"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"„Bluetooth LE Audio“ leidžiamųjų sąrašo išskyrimas"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Naudoti „LE Audio“ pagal numatytuosius nustatymus, net jei „LE Audio“ išorinis įrenginys nebuvo patvirtintas kaip atitinkantis leidžiamųjų sąrašo kriterijus."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Nustatykite automatiškai pagal tinklo ir belaidžio ryšio signalus"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatinė laiko juosta"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Nustatykite automatiškai pagal netoliese esančius mobiliojo ryšio tinklus"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Nustatykite automatiškai pagal įrenginio vietovę, jei ji pasiekiama. Taip pat gali būti reikalingas aktyvus „Wi-Fi“ ryšys."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Nustatykite automatiškai pagal įrenginio vietovę, jei ji pasiekiama"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Naudoti numatytuosius lokalės nustatymus"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Naudoti 24 val. formatą"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Laikas"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Pritaikomumas"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fizinė klaviatūra"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Peradresavimo klavišai"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Klaviatūra nepaiso greitai kartojamų to paties klavišo paspaudimų"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Peradresavimo klavišų slenkstis"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Pasirinkite, kiek laiko klaviatūra nepaiso pasikartojančių klavišų paspaudimų"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 sek."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 sek."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 sek."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Tinkinta"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"priskirta vertė"</string>
<string name="slow_keys" msgid="2891452895499690837">"Lėtieji klavišai"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Koreguojamas laikas, per kurį aktyvinamas klavišo paspaudimas"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Atmenieji klavišai"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Norėdami naudoti spartųjį klavišą, vienu metu paspauskite vieną klavišą, užuot laikę nuspaudę kelis klavišus"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Pelės klavišai"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Naudodami klaviatūrą valdykite žymeklį"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Atvirkštinis slinkimas pele"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Slinkite aukštyn, kad pereitumėte puslapiu žemyn"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Sukeisti kairįjį ir dešinįjį mygtukus"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Naudokite kairįjį pelės mygtuką kaip dešinįjį"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Spartieji klavišai"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Rodyti sparčiųjų klavišų sąrašą"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Pasirinkite naują „<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>“ slaptažodį:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Fizinės klaviatūros pritaikomumas"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Atmenieji klavišai, pakartotinių paspaudimų kontrolė, pelės klavišai"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Klavišų kartojimas"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Atidėti iki pakartojimo"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Kartojimo dažnis"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Laikykite paspaudę klavišą, kad kartotumėte jo simbolį, kol klavišas bus atleistas"</string>
<string name="ime_label_title" msgid="8994569521516807168">"„<xliff:g id="IME_LABEL">%s</xliff:g>“ išdėstymas"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Numatytasis"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatinis: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Peržiūra"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standartinės parinktys"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Kalba"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Subtitrų dydis"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Subtitrų stilius"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Tinkintos parinktys"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Fono spalva"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Reguliuoti maitinimo naudojimą"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Įtraukti paketai"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Programos veikia įprastai"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Žemas akumuliatoriaus lygis"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Įjunkite Akumuliatoriaus tausojimo priemonę, kad akumuliatorius veiktų ilgiau"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Akumuliatoriaus veikimo laiko pailginimas"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Atsijungti nuo šio VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Atsijungti"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versija"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g> vers."</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Pamiršti VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Pakeisti esamą VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Nustatyti visada įjungtą VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„9.00–17.00 darbo dienomis“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalendoriaus įvykiai"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Aktyvus režimas „{mode_1}“}=2{Aktyvūs režimai „{mode_1}“ ir „{mode_2}“}=3{Aktyvūs režimai „{mode_1}“, „{mode_2}“ ir „{mode_3}“}one{Aktyvūs režimai „{mode_1}“ ir „{mode_2}“ ir dar #}few{Aktyvūs režimai „{mode_1}“ ir „{mode_2}“ ir dar #}many{Aktyvūs režimai „{mode_1}“ ir „{mode_2}“ ir dar #}other{Aktyvūs režimai „{mode_1}“ ir „{mode_2}“ ir dar #}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Vieną režimą galima įjungti automatiškai}one{# režimą galima įjungti automatiškai}few{# režimus galima įjungti automatiškai}many{# režimo galima įjungti automatiškai}other{# režimų galima įjungti automatiškai}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ĮJUNGTA"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nenustatyta"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Išjungta"</string>
@@ -5464,13 +5487,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Nustatymų paieška"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontaktai, saugykla, paskyra"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontaktų saugykla"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Numatytoji paskyra nenustatyta"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Tik įrenginys"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nauji kontaktai nebus sinchronizuojami su paskyra"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Pagal numatytuosius nustatymus kontaktai bus išsaugomi įrenginyje ir sinchronizuojami su paskyra"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Nustatant numatytąją paskyrą įvyko klaida"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Numatytoji paskyra nenustatyta"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Tik įrenginys"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Jei norite pradėti, pridėkite paskyrą"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Paieška apibrėžiant"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Jei norite ieškoti naudodami turinį ekrane, palieskite ir palaikykite pagrindinio puslapio mygtuką arba naršymo rankenėlę."</string>
</resources>
diff --git a/res/values-lv/arrays.xml b/res/values-lv/arrays.xml
index 4412a86..5626332 100644
--- a/res/values-lv/arrays.xml
+++ b/res/values-lv/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Sniegpārsliņa"</item>
<item msgid="7952183800501346803">"Saulessargs"</item>
<item msgid="799139025758265891">"Darbnīcas rīki"</item>
- <item msgid="1330084588359129896">"Telts"</item>
+ <item msgid="8112685757657659269">"Klavieres"</item>
<item msgid="3861584909935022342">"Filmas rullītis"</item>
<item msgid="5827426100157335512">"Grāmata"</item>
<item msgid="8585828346253128384">"Lotosa zieds"</item>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index d5fcafd..aaa6f47 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Atspējot Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Tiek atspējota Bluetooth LE Audio funkcija, ja ierīcē tiek atbalstītas LE Audio aparatūras iespējas."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio režīms"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE Audio slēdzis informācijā par ierīci"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Apiet Bluetooth LE Audio atļaušanas sarakstu"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Pēc noklusējuma izmantot LE Audio, pat ja nav pārbaudīta LE Audio perifērijas ierīces atbilstība atļaušanas saraksta kritērijiem."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Iestatīt automātiski, izmantojot tīklu un bezvadu signālus."</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automātiska laika joslu noteikšana"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Iestatīt automātiski, ņemot vērā mobilos tīklus jūsu tuvumā."</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Iestatīt, izmantojot ierīces atrašanās vietu (ja pieejama). Var vajadzēt aktīvu Wi-Fi savienojumu."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Iestatīt automātiski, izmantojot ierīces atrašanās vietu (ja pieejama)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Izmantot lokalizācijas noklusējuma vērtību"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Izmantot 24 stundu formātu"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Laiks"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Pieejamība"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fiziskā tastatūra"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Atlēcienu taustiņi"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Tastatūra ignorē ātri atkārtotu viena taustiņa nospiešanu."</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Atlēcienu taustiņu slieksnis"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Izvēlieties, cik ilgi tastatūra ignorēs atkārtotu taustiņu nospiešanu."</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Pielāgots"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"pielāgota vērtība"</string>
<string name="slow_keys" msgid="2891452895499690837">"Lēnie taustiņi"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Tiek pielāgots laiks, kas nepieciešams, lai aktivizētu nospiestu taustiņu."</string>
<string name="sticky_keys" msgid="7317317044898161747">"Taustiņu ķēde"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Izmantojot īsinājumtaustiņus, vienlaikus nospiediet tikai vienu taustiņu, nevis turiet nospiestus vairākus taustiņus."</string>
<string name="mouse_keys" msgid="6237254627808525540">"Peles taustiņi"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Izmantojiet tastatūru, lai kontrolētu rādītāju."</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Peles ritināšana atpakaļgaitā"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Ritiniet augšup, lai pārvietotu lapu uz leju"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Apmainīt vietām kreiso un labo pogu"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Izmantojiet peles kreiso pogu kā labo"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Īsinājumtaustiņi"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Rādīt īsinājumtaustiņu sarakstu"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Izvēlieties jaunu taustiņu — <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Fiziskās tastatūras pieejamība"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Taustiņu ķēde, atlēcienu taustiņi, peles taustiņi"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Taustiņu atkārtošana"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Aizkave pirms atkārtošanas"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Atkārtošanas intervāls"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Turot taustiņu nospiestu, tiks atkārtoti ievadīta tā rakstzīme, līdz taustiņš tiks atlaists."</string>
<string name="ime_label_title" msgid="8994569521516807168">"Izkārtojums: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Noklusējums"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automātiski: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Priekšskatījums"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standarta opcijas"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Valoda"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Parakstu lielums"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Subtitru stils"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Pielāgotas opcijas"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Fona krāsa"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Noregulēt strāvas patēriņu"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Iekļautās pakotnes"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Lietotnes darbojas normāli"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Zems akumulatora uzlādes līmenis"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Lai paildzinātu akumulatora darbību, ieslēdziet akumulatora enerģijas taupīšanas režīmu"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Akumulatora darbības paildzināšana"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vai pārtraukt šo VPN savienojumu?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Pārtraukt savienojumu"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versija"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versija <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Aizmirst VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vai aizstāt esošo VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vai iestatīt vienmēr ieslēgtu VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"“Darbdienās plkst. 9:00–17:00”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalendāra pasākumi"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Režīms {mode_1} ir aktīvs}=2{Režīmi {mode_1} un {mode_2} ir aktīvi}=3{Režīmi {mode_1}, {mode_2} un {mode_3} ir aktīvi}zero{Režīmi {mode_1}, {mode_2} un vēl # ir aktīvi}one{Režīmi {mode_1}, {mode_2} un vēl # ir aktīvi}other{Režīmi {mode_1}, {mode_2} un vēl # ir aktīvi}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 režīmu var ieslēgt automātiski}zero{# režīmus var ieslēgt automātiski}one{# režīmu var ieslēgt automātiski}other{# režīmus var ieslēgt automātiski}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"IESLĒGTS"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nav iestatīts"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Atspējots"</string>
@@ -5463,13 +5486,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Meklēšanas iestatījumi"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontaktpersonas, krātuve, konts"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontaktpersonu krātuve"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nav iestatīts noklusējuma konts"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Tikai ierīcē"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Jaunas kontaktpersonas netiks sinhronizētas ar kontu."</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Pēc noklusējuma kontaktpersonas tiks saglabātas jūsu ierīcē un sinhronizētas ar jūsu kontu."</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Iestatot noklusējuma kontu, radās kļūda."</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nav iestatīts noklusējuma konts"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Tikai ierīcē"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Lai sāktu darbu, pievienojiet kontu."</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Apvilkt un meklēt"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Pieskarieties un turiet pogu “Sākums” vai navigācijas turi, lai meklētu, izmantojot ekrāna saturu."</string>
</resources>
diff --git a/res/values-mk/arrays.xml b/res/values-mk/arrays.xml
index 916f2a3..e4b8599 100644
--- a/res/values-mk/arrays.xml
+++ b/res/values-mk/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Снегулка"</item>
<item msgid="7952183800501346803">"Чадор за плажа"</item>
<item msgid="799139025758265891">"Алати во работилница"</item>
- <item msgid="1330084588359129896">"Шатор"</item>
+ <item msgid="8112685757657659269">"Пијано"</item>
<item msgid="3861584909935022342">"Филмска лента"</item>
<item msgid="5827426100157335512">"Книга"</item>
<item msgid="8585828346253128384">"Цвет на лотос"</item>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 6fa7263..d89e4cf 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Оневозможи Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Ја оневозможува функцијата Bluetooth LE Audio ако уредот поддржува хардверски способности за LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Режим за Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Прекинувач за LE Audio во „Детали за уредот“"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Игнорирај го списокот со дозволени за Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Користи LE Audio стандардно дури и ако не е потврдено дека периферното LE Audio ги исполнува критериумите на списокот со дозволени."</string>
@@ -130,7 +134,7 @@
<string name="connected_device_fast_pair_device_title" msgid="543124539265592392">"Поврзано со сметка"</string>
<string name="connected_device_previously_associated_fast_pair_device_title" msgid="8353405823992023457">"Претходно користено со сметката"</string>
<string name="connected_device_add_device_summary" msgid="8671009879957120802">"Bluetooth ќе се вклучи за спарување"</string>
- <string name="connected_device_connections_title" msgid="4164120115341579170">"Поставки за врски"</string>
+ <string name="connected_device_connections_title" msgid="4164120115341579170">"Поставки за поврзување"</string>
<string name="connected_device_previously_connected_screen_title" msgid="8823331744788100605">"Претходно поврзани"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"Bluetooth е вклучен"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"Прикажи ги сите"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Поставете автоматски со вашата мрежа и безжични сигнали"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Автоматска временска зона"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Поставете автоматски според мобилните мрежи во ваша близина"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Поставете автоматски со локацијата на уредот, ако е достапна. Може да треба и активна Wi-Fi врска."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Постави автоматски со локацијата на уредот, ако е достапна"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Користи локален стандард"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Користи 24-часовен формат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Време"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Пристапност"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Физичка тастатура"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Игнорирај повторени притискања"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Тастатурата игнорира брзи притискања на истото копче што се повторуваат"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Праг на игнор. на повт. притискање"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Изберете го времетраењето кога вашата тастатура ги игнорира повторените притискања на копчињата"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 с."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 с."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 с."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Приспособено"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"приспособена вредност"</string>
<string name="slow_keys" msgid="2891452895499690837">"Бавни копчиња"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Го приспособува времето за да се активира притискање копче"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Лепливи копчиња"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Притискајте ги копчињата за кратенки едно по едно наместо да ги држите копчињата притиснати заедно"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Копчиња на глувчето"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Користете ја тастатурата за да го контролирате покажувачот"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Обратно лизгање на глувчето"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Лизгајте нагоре за да ја преместите страницата надолу"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Заменете ги местата на левото и десното копче"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Користете го левото копче на глувчето како десно"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Кратенки на тастатурата"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Прикажи список со кратенки"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Изберете ново копче за <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Пристапност до физичка тастатура"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"лепливи копчиња, копчиња за игнорирање повторени притискања, копчиња на глувчето"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Повторување на копчињата"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Доцнење пред повторување"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Стапка на повторување"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Притиснете и задржете некое копче за да го повторувате неговиот знак додека не го пуштите копчето"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Распоред на <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Стандардно"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автоматски: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Преглед"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандардни опции"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Јазик"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Големина на титлови"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Стил на титловите"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Приспособени опции"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Боја на заднина"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Приспособи употреба на струја"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Вклучени пакети"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Апликациите работат нормално"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Нивото на батеријата е слабо"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Вклучете „Штедач на батерија“ за да го продолжи траењето на батеријата"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Подобрете го траењето на батеријата"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Да се исклучи оваа VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Прекини врска"</string>
<string name="vpn_version" msgid="6344167191984400976">"Верзија"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Верзија <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Заборави VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Да се замени постојната VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Да се постави „секогаш вклучена“ VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„работни денови, 9:00 – 17:00“"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Настани во календарот"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Активен е {mode_1}}=2{Активни се {mode_1} и {mode_2}}=3{Активни се {mode_1}, {mode_2} и {mode_3}}one{Активни се {mode_1}, {mode_2} и уште #}other{Активни се {mode_1}, {mode_2} и уште #}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режим може да се вклучи автоматски}one{# режим може да се вклучат автоматски}other{# режими може да се вклучат автоматски}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ВКЛУЧЕНО"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Не е поставено"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Оневозможено"</string>
@@ -3759,7 +3782,7 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"Апликацијава не испраќа известувања"</string>
<string name="notification_channels" msgid="1502969522886493799">"Категории"</string>
<string name="notification_channels_other" msgid="18159805343647908">"Друго"</string>
- <string name="no_channels" msgid="4716199078612071915">"Апликацијава не објави ниедно известување"</string>
+ <string name="no_channels" msgid="4716199078612071915">"Апликацијава нема објавено ниедно известување"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"Прикажи ги некористените категории"</string>
<string name="app_settings_link" msgid="6725453466705333311">"Дополнителни поставки во апликацијата"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"Прикажи ги некористените категории"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Пребарувајте низ поставките"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"контакти, складирање, сметка"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Складирање контакти"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Нема поставено стандардна сметка"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Само уред"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Новите контакти нема да се синхронизираат со сметка"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Контактите ќе се зачувуваат на вашиот уред и стандардно ќе се синхронизираат со вашата сметка"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Грешка при поставувањето на стандардната сметка"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Нема поставено стандардна сметка"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Само уред"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Додајте сметка за да започнете"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Пребарување со заокружување"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Допрете и задржете го копчето за почетен екран или лентата за навигација за да пребарувате со содржините на екранот."</string>
</resources>
diff --git a/res/values-ml/arrays.xml b/res/values-ml/arrays.xml
index bd20789..8d30538 100644
--- a/res/values-ml/arrays.xml
+++ b/res/values-ml/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"മഞ്ഞുകട്ട"</item>
<item msgid="7952183800501346803">"ബീച്ച് കുട"</item>
<item msgid="799139025758265891">"വർക്ക്ഷോപ്പ് ടൂളുകൾ"</item>
- <item msgid="1330084588359129896">"ടെന്റ്"</item>
+ <item msgid="8112685757657659269">"പിയാനോ"</item>
<item msgid="3861584909935022342">"ഫിലിം റീൽ"</item>
<item msgid="5827426100157335512">"പുസ്തകം"</item>
<item msgid="8585828346253128384">"താമരപ്പൂവ്"</item>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 07c653a..6ebb09d 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE ഓഡിയോ പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ഉപകരണം LE ഓഡിയോ ഹാർഡ്വെയർ ശേഷികളെ പിന്തുണയ്ക്കുന്നുണ്ടെങ്കിൽ Bluetooth LE ഓഡിയോ ഫീച്ചർ പ്രവർത്തനരഹിതമാക്കുന്നു."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE ഓഡിയോ മോഡ്"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ഉപകരണ വിശദാംശങ്ങളിൽ LE ഓഡിയോ ടോഗിൾ കാണിക്കൂ"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE ഓഡിയോ വൈറ്റ്ലിസ്റ്റ് ബൈപാസ് ചെയ്യുക"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE ഓഡിയോ പെരിഫറൽ, വൈറ്റ്ലിസ്റ്റ് മാനദണ്ഡം പാലിക്കുന്നുണ്ടോയെന്ന് പരിശോധിച്ചുറപ്പിച്ചിട്ടില്ലെങ്കിലും ഡിഫോൾട്ടായി LE ഓഡിയോ ഉപയോഗിക്കുക."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"നിങ്ങളുടെ നെറ്റ്വർക്കും വയർലെസ് സിഗ്നലുകളും ഉപയോഗിച്ച് സ്വയമേവ സജ്ജീകരിക്കുക"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"സ്വയമേവ ഉള്ള സമയമേഖല"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"നിങ്ങളുടെ സമീപമുള്ള മൊബൈൽ നെറ്റ്വർക്കുകളുടെ അടിസ്ഥാനത്തിൽ സ്വയമേവ സജ്ജീകരിക്കുക"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ലഭ്യമെങ്കിൽ, ഉപകരണ ലൊക്കേഷൻ ഉപയോഗിച്ച് സ്വയമേവ സജ്ജീകരിക്കുക. സജീവ വൈഫൈ കണക്ഷനും ആവശ്യമായേക്കാം."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ലഭ്യമാണെങ്കിൽ, നിങ്ങളുടെ ഉപകരണ ലൊക്കേഷൻ ഉപയോഗിച്ച് സ്വയമേവ സജ്ജീകരിക്കുക"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ഡിഫോൾട്ട് ഭാഷ ഉപയോഗിക്കുക"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-മണിക്കൂർ ഫോർമാറ്റ് ഉപയോഗിക്കുക"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"സമയം"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"ഒരേ കീ അതിവേഗം ആവർത്തിച്ച് അമർത്തുന്നത് കീബോർഡ് അവഗണിക്കും"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"ബൗൺസ് കീ ത്രെഷോൾഡ്"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"നിങ്ങളുടെ കീബോർഡ്, ആവർത്തിച്ചുള്ള കീ അമർത്തലുകൾ അവഗണിക്കേണ്ടതിന്റെ സമയദൈർഘ്യം തിരഞ്ഞെടുക്കുക"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 സെക്കൻഡ്"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 സെക്കൻഡ്"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 സെക്കൻഡ്"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 സെക്കൻഡ്"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 സെക്കൻഡ്"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 സെക്കൻഡ്"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"ഇഷ്ടാനുസൃതം"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ഇഷ്ടാനുസൃത മൂല്യം"</string>
<string name="slow_keys" msgid="2891452895499690837">"സ്ലോ കീകൾ"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"കീ അമർത്തൽ സജീവമാകാൻ എടുക്കുന്ന സമയം ക്രമീകരിക്കുന്നു"</string>
<string name="sticky_keys" msgid="7317317044898161747">"സ്റ്റിക്കി കീകൾ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"കുറുക്കുവഴികൾക്കായി, കീകൾ ഒരുമിച്ച് അമർത്തിപ്പിടിക്കുന്നതിന് പകരം ഒരു സമയം ഒരു കീ അമർത്തുക"</string>
<string name="mouse_keys" msgid="6237254627808525540">"മൗസ് കീകൾ"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"പോയിന്റർ നിയന്ത്രിക്കാൻ നിങ്ങളുടെ കീബോർഡ് ഉപയോഗിക്കുക"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"മൗസ് വിപരീത ദിശയിൽ സ്ക്രോൾ ചെയ്യൽ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"പേജ് താഴേക്ക് നീക്കാൻ മുകളിലേക്ക് സ്ക്രോൾ ചെയ്യുക"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ഇടത്, വലത് ബട്ടണുകൾ സ്വാപ്പ് ചെയ്യുക"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ഇടത് മൗസ് ബട്ടൺ വലത് ബട്ടണായി ഉപയോഗിക്കുക"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"കീബോഡ് കുറുക്കുവഴികൾ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"കുറുക്കുവഴികളുടെ ലിസ്റ്റ് കാണിക്കുക"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"ഔദ്യോഗിക പ്രൊഫൈൽ കീബോർഡുകളും ടൂളുകളും"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> എന്നതിനായി പുതിയ കീ തിരഞ്ഞെടുക്കൂ:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ഫിസിക്കൽ കീബോർഡ് ഉപയോഗസഹായി"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"സ്റ്റിക്കി കീകൾ, ബൗൺസ് കീകൾ, മൗസ് കീകൾ"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"ആവർത്തിക്കുന്ന കീകൾ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ആവർത്തിക്കുന്നതിന് മുമ്പുള്ള കാലതാമസം"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ആവർത്തന നിരക്ക്"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"കീ വിടുന്നത് വരെ അതിന്റെ പ്രതീകം ആവർത്തിക്കാൻ കീ അമർത്തിപ്പിടിക്കുക"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> ലേഔട്ട്"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ഡിഫോൾട്ട്"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"സ്വയമേവ: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"പ്രിവ്യൂ ചെയ്യുക"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"സാധാരണ ഓപ്ഷനുകൾ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ഭാഷ"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"സബ്ടൈറ്റിലിന്റെ വലുപ്പം"</string>
<string name="captioning_preset" msgid="4174276086501638524">"അടിക്കുറിപ്പ് സ്റ്റൈൽ"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ഇഷ്ടാനുസൃത ഓപ്ഷനുകൾ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"പശ്ചാത്തല വര്ണം"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"പവർ ഉപയോഗം ക്രമീകരിക്കുക"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ഉൾപ്പെടുത്തിയ പാക്കേജുകൾ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ആപ്പുകൾ സാധാരണ രീതിയിൽ റൺ ചെയ്യുന്നു"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ബാറ്ററി നില കുറവാണ്"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ബാറ്ററി ലെെഫ് വർദ്ധിപ്പിക്കാൻ ബാറ്ററി സേവർ ഓണാക്കുക"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ബാറ്ററി ലെെഫ് മെച്ചപ്പെടുത്തുക"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ഈ VPN വിച്ഛേദിക്കണോ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"വിച്ഛേദിക്കുക"</string>
<string name="vpn_version" msgid="6344167191984400976">"പതിപ്പ്"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"പതിപ്പ് <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN മറക്കുക"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"നിലവിലുള്ള VPN-ന് പകരം പുതിയതാക്കണോ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"\'എല്ലായ്പ്പോഴും ഓൺ\' VPN സജ്ജമാക്കണോ?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"പ്രവൃത്തിദിവസങ്ങളിൽ 9 AM - 5 PM\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"കലണ്ടർ ഇവന്റുകൾ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} സജീവമാണ്}=2{{mode_1}, {mode_2} എന്നിവ സജീവമാണ്}=3{{mode_1}, {mode_2}, {mode_3} എന്നിവ സജീവമാണ്}other{{mode_1}, {mode_2} എന്നിവയും മറ്റ് # എണ്ണവും സജീവമാണ്}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{ഒരു മോഡിന് സ്വയമേവ ഓണാകാനാകും}other{# മോഡുകൾക്ക് സ്വയമേവ ഓണാകാനാകും}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ഓണാണ്"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"സജ്ജീകരിച്ചിട്ടില്ല"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"പ്രവർത്തനരഹിതമാക്കി"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"ഉപകരണം മാത്രം"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"പുതിയ കോൺടാക്റ്റുകൾ ഒരു അക്കൗണ്ടുമായി സമന്വയിപ്പിക്കില്ല"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"കോൺടാക്റ്റുകൾ നിങ്ങളുടെ ഉപകരണത്തിൽ സംരക്ഷിക്കുകയും ഡിഫോൾട്ടായി നിങ്ങളുടെ അക്കൗണ്ടിലേക്ക് സമന്വയിപ്പിക്കുകയും ചെയ്യും"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ഡിഫോൾട്ട് ഒന്നും സജ്ജമാക്കിയിട്ടില്ല"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ഡിഫോൾട്ട് അക്കൗണ്ട് സജ്ജീകരിക്കുന്നതിൽ പിശക്"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ഡിഫോൾട്ട് ഒന്നും സജ്ജീകരിച്ചിട്ടില്ല"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"ഉപകരണം മാത്രം"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ആരംഭിക്കുന്നതിന് ഒരു അക്കൗണ്ട് ചേർക്കുക"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"തിരയാൻ വട്ടം വരയ്ക്കൽ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"നിങ്ങളുടെ സ്ക്രീനിലുള്ള ഉള്ളടക്കം ഉപയോഗിച്ച് തിരയാൻ ഹോം ബട്ടൺ അല്ലെങ്കിൽ നാവിഗേഷൻ ഹാൻഡിൽ സ്പർശിച്ചുപിടിക്കുക."</string>
</resources>
diff --git a/res/values-mn/arrays.xml b/res/values-mn/arrays.xml
index d7083c8..76bd912 100644
--- a/res/values-mn/arrays.xml
+++ b/res/values-mn/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Цасан ширхэг"</item>
<item msgid="7952183800501346803">"Далайн эргийн шүхэр"</item>
<item msgid="799139025758265891">"Урлангийн багаж хэрэгсэл"</item>
- <item msgid="1330084588359129896">"Майхан"</item>
+ <item msgid="8112685757657659269">"Төгөлдөр хуур"</item>
<item msgid="3861584909935022342">"Зургийн хальс"</item>
<item msgid="5827426100157335512">"Ном"</item>
<item msgid="8585828346253128384">"Бадамлянхуа цэцэг"</item>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index a729377..9ec6654 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE аудиог идэвхгүй болгох"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Хэрэв төхөөрөмж LE аудио техник хангамжийн чадамжийг дэмждэг бол Bluetooth LE аудио онцлогийг идэвхгүй болгоно."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Аудио горим"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Төхөөрөмжийн дэлгэрэнгүйд LE аудионы асаах/унтраахыг харуул"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Аудиогийн зөвшөөрсөн жагсаалтыг алгасах"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Аудиогийн нэмэлт хэрэгслийг Зөвшөөрсөн жагсаалтын шалгуурт нийцэж байгаа эсэхийг баталгаажуулаагүй байсан ч өгөгдмөлөөр LE Аудиог ашиглана уу."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Таны сүлжээ болон утасгүй дохиог ашиглан автоматаар тохируулна"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Автомат цагийн бүс"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Таны ойролцоох хөдөлгөөнт холбооны сүлжээнд үндэслэн автоматаар тохируулна"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Таны төхөөрөмжийн байршлыг ашиглан автоматаар тохируулна. Идэвхтэй Wi-Fi холболт мөн шаардаж болно"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Таны төхөөрөмжийн байршил байгаа тохиолдолд тухайн байршлыг ашиглан автоматаар тохируулна"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Бүс нутгийн өгөгдмөлийг ашиглах"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 цагийн формат ашиглах"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Цаг"</string>
@@ -821,7 +825,7 @@
<string name="manage_device_admin" msgid="1044620606203916275">"Төхөөрөмжийн админы апп"</string>
<string name="number_of_device_admins_none" msgid="152926922020437312">"Идэвхтэй апп алга"</string>
<string name="number_of_device_admins" msgid="3402909995362162876">"{count,plural, =1{Идэвхтэй # апп}other{Идэвхтэй # апп}}"</string>
- <string name="manage_trust_agents" msgid="6410149930029992356">"Итгэмжлэгдсэн төлөөлөгч"</string>
+ <string name="manage_trust_agents" msgid="6410149930029992356">"Итгэмжлэгдсэн агент"</string>
<string name="disabled_because_no_backup_security" msgid="4998095356607488854">"Ашиглахын тулд эхлээд дэлгэцийн түгжээг тохируулна уу"</string>
<string name="manage_trust_agents_summary" msgid="6423843123607674286">"Аль нь ч биш"</string>
<string name="manage_trust_agents_summary_on" msgid="3302574418419446146">"{count,plural, =1{Идэвхтэй 1 итгэмжлэгдсэн агент}other{Идэвхтэй # итгэмжлэгдсэн агент}}"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Хандалт"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Биет гар"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Ойх түлхүүрүүд"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Гар нэг товчийн давтагдсан шуурхай даралтыг үл хэрэгсэнэ"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Ойх товчийн босго"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Таны гар давтагдсан товчийн даралтыг үл хэрэгсэх хугацааг сонгоорой"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 сек"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 сек"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 сек"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Захиалгат"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"захиалгат утга"</string>
<string name="slow_keys" msgid="2891452895499690837">"Удаан товчнууд"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Товчийн даралт идэвхжихэд зарцуулах хугацааг тохируулна"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Бэхэлсэн түлхүүрүүд"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Товчлолд товчлууруудыг хамтад нь удаан дарахын оронд нэг удаад нэг товчлуур дарна уу"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Хулганын товч"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Заагчийг хянахад гараа ашиглана уу"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Хулганыг урвуу гүйлгэх"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Хуудсыг доош зөөхийн тулд дээш гүйлгэнэ үү"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Зүүн, баруун товчнуудыг солих"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Хулганын зүүн товчийг баруун товчоороо ашиглана уу"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Гарын товчлол"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Товчлолын жагсаалтыг харуулах"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>-н шинэ товч сонгоно уу:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Биет гарын хандалт"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Бэхэлсэн товч, буцаах товч, хулганын товч"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Товчийг давтах"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Давтахаас өмнөх саатал"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Давтах хурд"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Товчийг суллах хүртэл тэмдгийг нь давтахын тулд тухайн товчин дээр удаан дарна уу"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> бүдүүвч"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Өгөгдмөл"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автомат: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Урьдчилж харах"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандарт сонголтууд"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Хэл"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Тайлбарын хэмжээ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Тайлбарын загвар"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Тусгай сонголтууд"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Дэвсгэр өнгө"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Цэнэг ашиглалтыг тохируулах"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Агуулагдсан багцууд"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Апп хэвийн ажиллаж байна"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Батарейн түвшин бага байна"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Батарейн ажиллах хугацааг уртасгахын тулд Батарей хэмнэгчийг асаана уу"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Батарейн ажиллах хугацааг сайжруулах"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Энэ VPN-г салгах уу?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Салгах"</string>
<string name="vpn_version" msgid="6344167191984400976">"Хувилбар"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g>-р хувилбар"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN-г мартах"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Энэ VPN-г солих уу?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN-г тогтмол асаалттайгаар тохируулах уу?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Ажлын өдрүүдэд 09:00 - 17:00\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Календарийн үйл явдал"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} идэвхтэй байна}=2{{mode_1} болон {mode_2} идэвхтэй байна}=3{{mode_1}, {mode_2}, {mode_3} идэвхтэй байна}other{{mode_1}, {mode_2} болон өөр # горим идэвхтэй байна}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 горим автоматаар асах боломжтой}other{# горим автоматаар асах боломжтой}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"АСААЛТТАЙ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Тохируулаагүй"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Идэвхгүй болгосон"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Хайлтын тохиргоо"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"харилцагчид, хадгалах сан, бүртгэл"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Харилцагчдын хадгалах сан"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Өгөгдмөл бүртгэл тохируулаагүй"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Зөвхөн төхөөрөмж"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Шинэ харилцагчдыг бүртгэлтэй синк хийхгүй"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Харилцагчдыг өгөгдмөлөөр таны төхөөрөмжид хадгалж, бүртгэлд тань синк хийнэ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Үндсэн бүртгэлийг тохируулахад алдаа гарлаа"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Үндсэн бүртгэл тохируулаагүй"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Зөвхөн төхөөрөмж"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Эхлүүлэхийн тулд бүртгэл нэмнэ үү"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Тойруулж зураад хай"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Дэлгэц дээрээ байгаа контентыг ашиглан хайхын тулд Нүүр хуудасны товч, навигацын бариулд хүрээд удаан дарна уу."</string>
</resources>
diff --git a/res/values-mr/arrays.xml b/res/values-mr/arrays.xml
index a6ff624..08024ff 100644
--- a/res/values-mr/arrays.xml
+++ b/res/values-mr/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"स्नोफ्लेक"</item>
<item msgid="7952183800501346803">"समुद्रकिनाऱ्यावर वापरली जाणारी छत्री"</item>
<item msgid="799139025758265891">"कारखान्यातील अवजारे"</item>
- <item msgid="1330084588359129896">"तंबू"</item>
+ <item msgid="8112685757657659269">"पियानो"</item>
<item msgid="3861584909935022342">"फिल्म रील"</item>
<item msgid="5827426100157335512">"पुस्तक"</item>
<item msgid="8585828346253128384">"कमळाचे फूल"</item>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index b32a4a1..b5395c9 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ब्लूटूथ LE ऑडिओ बंद करा"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"डिव्हाइसला LE ऑडिओ हार्डवेअरसंबंधित क्षमतांचा सपोर्ट असल्यास, ब्लूटूथ LE ऑडिओ वैशिष्ट्य बंद करते."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ब्लूटूथ LE ऑडिओ मोड"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"डिव्हाइस तपशील यांत LE ऑडिओ टॉगल दाखवा"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ब्लूटूथ LE ऑडिओ अनुमती सूची बायपास करा"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"अनुमती सूचीच्या निकषांची पूर्तता करण्यासाठी LE ऑडिओ पेरिफेरलची पडताळणी केली नसली, तरीही बाय डीफॉल्ट LE ऑडिओ वापरा."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"तुमचे नेटवर्क आणि वायरलेस सिग्नल वापरून आपोआप सेट करा"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ऑटोमॅटिक टाइम झोन"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"तुमच्या जवळपासच्या मोबाइल नेटवर्कच्या आधारे आपोआप सेट करा"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"उपलब्ध असल्यास, तुमचे डिव्हाइस स्थान वापरून आपोआप सेट करा. अॅक्टिव्ह वायफाय कनेक्शनदेखील आवश्यक असू शकते."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"तुमचे डिव्हाइस स्थान उपलब्ध असल्यास, ते वापरून आपोआप सेट करा"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"लोकॅल डीफॉल्ट वापरा"</string>
<string name="date_time_24hour" msgid="286679379105653406">"२४ तास फॉरमॅट वापरा"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"वेळ"</string>
@@ -668,7 +672,7 @@
<string name="fingerprint_delete_title" msgid="5412123164503407098">"\'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\' हटवा"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="4104208067277655068">"तुम्ही तुमची फिंगरप्रिंट तुमचे कार्य प्रोफाइल अनलॉक करण्यासाठी, खरेदी ऑथोराइझ करण्यासाठी किंवा कार्य ॲप्समध्ये साइन इन करण्यासाठी वापरू शकणार नाही."</string>
<string name="encryption_settings_title" msgid="2848716008695618360">"एंक्रिप्शन"</string>
- <string name="encrypted_summary" msgid="545623487587251207">"एंक्रिप्ट केले"</string>
+ <string name="encrypted_summary" msgid="545623487587251207">"एन्क्रिप्ट केले"</string>
<string name="no_screen_lock_issue_title" msgid="1814109590692792891">"स्क्रीन लॉक सेट करा"</string>
<string name="no_screen_lock_issue_summary" msgid="2383217853510608406">"अतिरिक्त सुरक्षेसाठी, या डिव्हाइसकरिता पिन, पॅटर्न किंवा पासवर्ड सेट करा."</string>
<string name="no_screen_lock_issue_action_label" msgid="2691229130486382863">"स्क्रीन लॉक सेट करा"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"कीबोर्ड एकसारख्या की झटपट वारंवार प्रेस करण्याकडे दुर्लक्ष करतो"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"बाउन्स कीची मर्यादा"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"तुमचा कीबोर्ड वारंवार की प्रेस करण्याकडे दुर्लक्ष करतो तो कालावधी निवडा"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"०.२से"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"०.४से"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"०.६से"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"०.२से"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"०.४से"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"०.६से"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"कस्टम"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"कस्टम मूल्य"</string>
<string name="slow_keys" msgid="2891452895499690837">"स्लो की"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"ॲक्टिव्हेट करण्यासाठी की प्रेस करण्याकरिता लागणारा वेळ ॲडजस्ट करतात"</string>
<string name="sticky_keys" msgid="7317317044898161747">"स्टिकी की"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"की एकत्र धरून ठेवण्याऐवजी शॉर्टकटसाठी एकावेळी एक की प्रेस करा"</string>
<string name="mouse_keys" msgid="6237254627808525540">"माउस की"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"पॉइंटर नियंत्रित करण्यासाठी तुमचा कीबोर्ड वापरा"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"माउस रिव्हर्स स्क्रोलिंग"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"पेज खाली हलवण्यासाठी वरती स्क्रोल करा"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"डावे व उजवे बटण स्वॅप करा"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"माऊसच्या डाव्या बटणाला तुमचे उजवे बटण म्हणून वापरा"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"कीबोर्ड शॉर्टकट"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"शॉर्टकटची सूची दाखवा"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"कार्य प्रोफाइल कीबोर्ड आणि टूल"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> साठी नवीन की निवडा:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"वास्तविक कीबोर्ड अॅक्सेसिबिलिटी"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"स्टिकी की, बाउन्स की, माउस की"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"की रिपीट करा"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"रिपीट करण्यापूर्वीचा विलंब"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"रिपीट करण्याचा दर"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"एखादी की रिलीझ करेपर्यंत तिचा वर्ण रिपीट करण्यासाठी ती की धरून ठेवा"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> लेआउट"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"डीफॉल्ट"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ऑटोमॅटिक: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"पूर्वावलोकन"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"मानक पर्याय"</string>
<string name="captioning_locale" msgid="5533303294290661590">"भाषा"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"कॅप्शनचा आकार"</string>
<string name="captioning_preset" msgid="4174276086501638524">"कॅप्शन शैली"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"कस्टम पर्याय"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"बॅकग्राउंडचा रंग"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"पॉवर वापर समायोजित करा"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"समाविष्ट पॅकेज"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"अॅप्स नेहमीप्रमाणे चालत आहेत"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"बॅटरीची पातळी कमी आहे"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"बॅटरी लाइफ वाढवण्यासाठी बॅटरी सेव्हर सुरू करा"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"बॅटरी लाइफ सुधारा"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"हे VPN डिस्कनेक्ट करायचे?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"डिस्कनेक्ट करा"</string>
<string name="vpn_version" msgid="6344167191984400976">"आवृत्ती"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"आवृत्ती <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN विसरा"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"विद्यमान VPN पुनर्स्थित करायचे?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"नेहमी-सुरू VPN सेट करायचे?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"आठवड्यातील दिवस सकाळी ९ - संध्याकाळी ५\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"कॅलेंडर इव्हेंट"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} अॅक्टिव्ह आहे}=2{{mode_1} आणि {mode_2} अॅक्टिव्ह आहेत}=3{{mode_1}, {mode_2} आणि{mode_3} अॅक्टिव्ह आहेत}other{{mode_1}, {mode_2} आणि आणखी # अॅक्टिव्ह आहेत}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{१ मोड आपोआप सुरू होऊ शकतो}other{# मोड आपोआप सुरू होऊ शकतात}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"सुरू आहे"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"सेट केलेला नाही"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"बंद केला आहे"</string>
@@ -3751,7 +3782,7 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"हे अॅप सूचना पाठवत नाही"</string>
<string name="notification_channels" msgid="1502969522886493799">"वर्गवाऱ्या"</string>
<string name="notification_channels_other" msgid="18159805343647908">"अन्य"</string>
- <string name="no_channels" msgid="4716199078612071915">"या ॲपने कोणत्याही सूचना पोस्ट केल्या नाहीत"</string>
+ <string name="no_channels" msgid="4716199078612071915">"या ॲपने कोणत्याही नोटिफिकेशन पोस्ट केल्या नाहीत"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"न वापरलेल्या वर्गवाऱ्या दाखवा"</string>
<string name="app_settings_link" msgid="6725453466705333311">"अॅपमधील अतिरिक्त सेटिंग्ज"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"न वापरलेल्या वर्गवाऱ्या दाखवा"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"केवळ डिव्हाइस"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"खात्यासह नवीन संपर्क सिंक केले जाणार नाहीत"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"संपर्क हे तुमच्या डिव्हाइसमध्ये सेव्ह केले जातील आणि बाय डीफॉल्ट तुमच्या खात्यामध्ये सिंक केले जातील"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"कोणतेही डीफॉल्ट अकाउंट सेट केलेले नाही"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"डीफॉल्ट खाते सेट करताना एरर आली"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"कोणतेही डीफॉल्ट अकाउंट सेट केलेले नाही"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"केवळ डिव्हाइस"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"सुरू करण्यासाठी एखादे खाते जोडा"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"शोधण्यासाठी वर्तुळ करा"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"तुमच्या स्क्रीनवरील आशय वापरून शोधण्यासाठी होम बटण किंवा नेव्हिगेशन हँडल स्पर्श करून धरून ठेवा."</string>
</resources>
diff --git a/res/values-ms/arrays.xml b/res/values-ms/arrays.xml
index 11c4761..9065ddb 100644
--- a/res/values-ms/arrays.xml
+++ b/res/values-ms/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Emping salji"</item>
<item msgid="7952183800501346803">"Payung pantai"</item>
<item msgid="799139025758265891">"Alatan bengkel"</item>
- <item msgid="1330084588359129896">"Khemah"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Gelendong filem"</item>
<item msgid="5827426100157335512">"Buku"</item>
<item msgid="8585828346253128384">"Bunga teratai"</item>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index f6ef310..fa1e312 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Lumpuhkan Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Melumpuhkan ciri Bluetooth LE Audio jika peranti menyokong keupayaan perkakasan LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Mod Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Tunjukkan togol LE Audio pada Butiran Peranti"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Abaikan Senarai Dibenarkan Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Gunakan LE Audio secara lalai walaupun persisian LE Audio belum disahkan sebagai memenuhi kriteria Senarai Dibenarkan."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Tetapkan secara automatik menggunakan isyarat rangkaian dan wayarles anda"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Zon waktu automatik"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Tetapkan secara automatik berdasarkan rangkaian mudah alih berdekatan anda"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Tetapan automatik dengan lokasi peranti, jika tersedia. Sambungan Wi-Fi aktif mungkin diperlukan."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Tetapkan secara automatik menggunakan lokasi peranti anda, jika tersedia"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gunakan tetapan lalai tempat peristiwa"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gunakan format 24 jam"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Masa"</string>
@@ -607,8 +611,8 @@
<string name="private_space_hide_dialog_button" msgid="4157191429310035457">"OK"</string>
<string name="private_space_category_system" msgid="1286843321867285700">"Sistem"</string>
<string name="private_space_delete_title" msgid="636873505724100006">"Padamkan ruang persendirian"</string>
- <string name="private_space_delete_header" msgid="4594429153176776184">"Padamkan ruang privasi?"</string>
- <string name="private_space_delete_summary" msgid="7507302208399543921">"Ruang privasi anda akan dipadamkan secara kekal daripada peranti anda. \n\nSemua apl dalam ruang anda dan data apl juga akan dipadamkan secara kekal daripada "<b>"storan dalaman"</b>" telefon anda."</string>
+ <string name="private_space_delete_header" msgid="4594429153176776184">"Padamkan ruang persendirian?"</string>
+ <string name="private_space_delete_summary" msgid="7507302208399543921">"Ruang persendirian anda akan dipadamkan secara kekal daripada peranti anda. \n\nSemua apl dan data dalam ruang anda juga akan dipadamkan secara kekal daripada "<b>"storan dalaman"</b>" telefon anda."</string>
<string name="private_space_accounts" msgid="1078277762792056395">"Akaun yang berikut akan dialih keluar daripada ruang persendirian anda:"</string>
<string name="private_space_delete_button_label" msgid="1256981385318225002">"Padam"</string>
<string name="private_space_confirm_deletion_header" msgid="3468651585498942977">"Memadamkan ruang privasi…"</string>
@@ -630,8 +634,8 @@
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Sentiasa ingat"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Apl dihentikan apabila anda mengunci ruang anda"</b>\n"Apabila anda mengunci ruang anda, apl dalam ruang anda akan dihentikan dan anda tidak akan menerima pemberitahuan daripada apl itu"</string>
<string name="private_space_apps_permission_text" msgid="4416201648436201393">"Ruang privasi tidak sesuai untuk apl yang perlu dijalankan pada latar atau menghantar pemberitahuan genting seperti apl perubatan. Hal ini kerana pemberitahuan dan aktiviti latar dihentikan semasa ruang anda dikunci.\n\nApl dalam ruang privasi tidak akan dipaparkan dalam pengurus kebenaran, papan pemuka privasi dan tetapan lain apabila ruang privasi dikunci.\n\nRuang privasi anda tidak boleh dialihkan kepada peranti baharu. Anda perlu menyediakan ruang privasi lain jika anda mahu menggunakan ruang privasi itu pada peranti lain.\n\nSesiapa sahaja yang menyambungkan peranti anda kepada komputer atau memasang apl berbahaya pada peranti anda mungkin dapat mengakses ruang privasi anda."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Ruang privasi tidak sesuai untuk apl yang perlu dijalankan pada latar atau menghantar pemberitahuan genting seperti apl perubatan. Hal ini kerana pemberitahuan dan aktiviti latar dihentikan semasa ruang anda dikunci.\n\nApl dalam ruang privasi tidak akan dipaparkan dalam pengurus kebenaran, papan pemuka privasi dan tetapan lain apabila ruang privasi dikunci.\n\nRuang privasi anda tidak boleh dipulihkan pada peranti baharu. Anda perlu menyediakan ruang privasi lain jika anda mahu menggunakan ruang privasi pada peranti lain.\n\nSesiapa sahaja yang menyambungkan peranti anda kepada komputer atau memasang apl berbahaya pada peranti anda mungkin dapat mengakses ruang privasi anda."</string>
- <string name="private_space_learn_more_text" msgid="5314198983263277586">"Ketahui lebih lanjut tentang ruang privasi"</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Ruang persendirian tidak sesuai untuk apl yang perlu dijalankan pada latar atau menghantar pemberitahuan genting seperti apl perubatan. Hal ini kerana pemberitahuan dan aktiviti latar dihentikan semasa ruang anda dikunci.\n\nApl dalam ruang persendirian tidak akan dipaparkan dalam pengurus kebenaran, papan pemuka privasi dan tetapan lain apabila ruang persendirian dikunci.\n\nRuang persendirian anda tidak boleh dipulihkan pada peranti baharu. Anda perlu menyediakan ruang persendirian lain jika anda mahu menggunakan ruang persendirian pada peranti lain.\n\nSesiapa sahaja yang menyambungkan peranti anda kepada komputer atau memasang apl berbahaya pada peranti anda mungkin dapat mengakses ruang persendirian anda."</string>
+ <string name="private_space_learn_more_text" msgid="5314198983263277586">"Ketahui lebih lanjut tentang ruang persendirian"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Proses ini akan mengambil sedikit masa"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"Menyediakan ruang privasi…"</string>
<string name="private_space_error_screen_title" msgid="739381738044418346">"Tidak dapat menyediakan ruang peribadi"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Kebolehaksesan"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Papan kekunci fizikal"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Kekunci lantun"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Papan kekunci mengabaikan tekanan kekunci yang sama secara berulang"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Ambang kekunci lantun"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Pilih tempoh masa papan kekunci anda mengabaikan tekanan kekunci yang berulang"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Tersuai"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"nilai tersuai"</string>
<string name="slow_keys" msgid="2891452895499690837">"Kekunci perlahan"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Laraskan masa yang diambil untuk mengaktifkan tekanan kekunci"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Kekunci Lekit"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Tekan satu kekunci pada satu-satu masa untuk pintasan, bukan menahan beberapa kekunci secara serentak"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Kekunci tetikus"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Gunakan papan kekunci anda untuk mengawal penuding"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Penatalan terbalik tetikus"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Tatal ke atas untuk menggerakkan halaman ke bawah"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Tukar butang kiri ke kanan dan kanan ke kiri"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Gunakan butang tetikus kiri sebagai klik kanan anda"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Pintasan papan kekunci"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Tunjukkan senarai pintasan"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Pilih kunci baharu untuk <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Kebolehaksesan papan kekunci fizikal"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Kekunci lekit, Kekunci lantun, Kekunci tetikus"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Kekunci Berulang"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Lengah sebelum ulang"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Kadar Pengulangan"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Tahan kekunci ke bawah untuk mengulangi aksara tersebut sehingga kekunci tersebut dilepaskan"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Reka letak <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Lalai"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatik: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2217,7 +2235,7 @@
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction" msgid="1007756360115974649">"Untuk memulakan dan menghentikan pembesaran, ketik skrin dua kali dengan pantas menggunakan %1$d jari"</string>
<string name="accessibility_tutorial_dialog_message_quick_setting" msgid="3715446725334547432">"{count,plural, =1{Untuk menggunakan ciri ini, leret ke bawah daripada bahagian atas skrin anda. Kemudian, cari jubin {featureName}.}other{Untuk menggunakan ciri ini, leret ke bawah daripada bahagian atas skrin anda menggunakan # jari. Kemudian, cari jubin {featureName}.}}"</string>
<string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw" msgid="3847728530771929959">"Pintasan ini akan tersedia selepas anda menyelesaikan persediaan peranti."</string>
- <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Untuk menggunakan ciri ini, leret ke atas dari bahagian bawah skrin dengan menggunakan 2 jari.\n\nUntuk menukar antara ciri, leret ke atas dengan menggunakan 2 jari dan tahan."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Untuk menggunakan ciri ini, leret ke atas dari bawah skrin dengan 2 jari.\n\nUntuk beralih antara ciri, leret ke atas dengan 2 jari dan tahan."</string>
<string name="accessibility_tutorial_dialog_gesture_shortcut_instruction" msgid="7349950768250852308">"{count,plural, =1{Untuk menggunakan ciri ini, leret ke atas daripada bahagian bawah skrin anda}other{Untuk menggunakan ciri ini, leret ke atas menggunakan # jari daripada bahagian bawah skrin anda}}"</string>
<string name="accessibility_tutorial_dialog_message_gesture_talkback" msgid="8142847782708562793">"Untuk menggunakan ciri ini, leret ke atas dari bahagian bawah skrin dengan menggunakan 3 jari.\n\nUntuk menukar antara ciri, leret ke atas dengan menggunakan 3 jari dan tahan."</string>
<string name="accessibility_tutorial_dialog_message_gesture_settings" msgid="40769674586981429">"Untuk menggunakan ciri kebolehcapaian, leret ke atas dari bahagian bawah skrin dengan menggunakan 2 jari.\n\nUntuk menukar antara ciri, leret ke atas dengan menggunakan 2 hari dan tahan."</string>
@@ -2234,7 +2252,7 @@
<string name="accessibility_shortcut_edit_dialog_summary_floating_button" msgid="6266489864614886247">"Ketik butang terapung"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_by_gesture" msgid="4775049370625630546">"Gerak isyarat kebolehaksesan"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"Ketik butang kebolehaksesan <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> pada bahagian bawah skrin. Untuk beralih antara ciri, sentuh & tahan butang kebolehaksesan."</string>
- <string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Leret ke atas daripada bahagian bawah skrin. Untuk beralih antara ciri, leret ke atas dan tahan.}other{Leret ke atas menggunakan # jari daripada bahagian bawah skrin. Untuk beralih antara ciri, leret ke atas menggunakan # jari dan tahan.}}"</string>
+ <string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Leret ke atas dari bawah skrin. Untuk beralih antara ciri, leret ke atas dan tahan.}other{Leret ke atas menggunakan # jari dari bawah skrin. Untuk beralih antara ciri, leret ke atas menggunakan # jari dan tahan.}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_floating" msgid="4459254227203203324"><annotation id="link">"Lagi pilihan"</annotation></string>
<string name="footer_learn_more_content_description" msgid="8843798273152131341">"Ketahui lebih lanjut tentang <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"Tetapan Pantas"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Pratonton"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Pilihan standard"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Bahasa"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Saiz sari kata"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Gaya sari kata"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Pilihan tersuai"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Warna latar belakang"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Laraskan penggunaan kuasa"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pakej yang disertakan"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apl berjalan seperti biasa"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Aras bateri rendah"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Hidupkan Penjimat Bateri bagi melanjutkan hayat bateri"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Tingkatkan hayat bateri"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Putuskan sambungan VPN ini?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Putuskan sambungan"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versi"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versi <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Lupakan VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Gantikan VPN yang sedia ada?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Tetapkan VPN sentiasa hidup?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 PG - 5 PTG hari biasa\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Acara kalendar"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} aktif}=2{{mode_1} dan {mode_2} aktif}=3{{mode_1}, {mode_2} dan {mode_3} aktif}other{{mode_1}, {mode_2} dan # lagi aktif}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mod boleh dihidupkan secara automatik}other{# mod boleh dihidupkan secara automatik}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"HIDUP"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Tidak ditetapkan"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Dilumpuhkan"</string>
@@ -3993,11 +4016,11 @@
<string name="app_launch_open_in_app" msgid="2208182888681699512">"Pada apl"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"Pada penyemak imbas"</string>
<string name="app_launch_top_intro_message" msgid="9037324384325518290">"Pilih cara membuka pautan web untuk apl ini"</string>
- <string name="app_launch_links_category" msgid="2380467163878760037">"Pautan untuk membuka apl ini"</string>
+ <string name="app_launch_links_category" msgid="2380467163878760037">"Pautan yang dapat dibuka pada apl ini"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"Pautan yang disokong"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"Pilihan lalai lain"</string>
<string name="app_launch_add_link" msgid="8622558044530305811">"Tambahkan pautan"</string>
- <string name="app_launch_footer" msgid="4521865035105622557">"Apl boleh mengesahkan pautan untuk membuka pautan secara automatik dalam apl."</string>
+ <string name="app_launch_footer" msgid="4521865035105622557">"Apl dapat mengesahkan pautan agar terbuka secara automatik dalam apl."</string>
<string name="app_launch_verified_links_title" msgid="621908751569155356">"{count,plural, =1{# pautan disahkan}other{# pautan disahkan}}"</string>
<string name="app_launch_verified_links_message" msgid="190871133877476176">"{count,plural, =1{Pautan ini telah disahkan dan dibuka secara automatik dalam apl ini.}other{Pautan ini telah disahkan dan dibuka secara automatik dalam apl ini.}}"</string>
<string name="app_launch_dialog_ok" msgid="1446157681861409861">"OK"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Carian Tetapan"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kenalan, storan, akaun"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Storan kenalan"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Tiada akaun lalai ditetapkan"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Peranti sahaja"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Kenalan baharu tidak akan disegerakkan dengan akaun"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kenalan akan disimpan pada peranti anda dan disegerakkan kepada akaun anda secara lalai"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Ralat semasa menetapkan akaun lalai"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Tiada akaun lalai ditetapkan"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Peranti sahaja"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Tambahkan akaun untuk bermula"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Bulatkan untuk Membuat Carian"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Sentuh dan tahan butang Skrin Utama atau pemegang navigasi untuk membuat carian menggunakan kandungan pada skrin anda."</string>
</resources>
diff --git a/res/values-my/arrays.xml b/res/values-my/arrays.xml
index e7aeef7..2e18956 100644
--- a/res/values-my/arrays.xml
+++ b/res/values-my/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"နှင်းပွင့်"</item>
<item msgid="7952183800501346803">"ကမ်းခြေထီး"</item>
<item msgid="799139025758265891">"အလုပ်ရုံတူးလ်များ"</item>
- <item msgid="1330084588359129896">"တဲ"</item>
+ <item msgid="8112685757657659269">"စန္ဒရား"</item>
<item msgid="3861584909935022342">"ဖလင်လိပ်"</item>
<item msgid="5827426100157335512">"စာအုပ်"</item>
<item msgid="8585828346253128384">"ကြာပန်း"</item>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 5a0a6d1..6d3948c 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"‘ဘလူးတုသ် LE Audio’ ပိတ်ရန်"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"စက်က LE Audio ဟာ့ဒ်ဝဲစွမ်းရည်များကို ပံ့ပိုးလျှင် ဘလူးတုသ် LE Audio အင်္ဂါရပ်ကို ပိတ်သည်။"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ဘလူးတုသ် LE Audio မုဒ်"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"‘စက်အသေးစိတ်’ တွင် LE audio ခလုတ်ပြရန်"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"‘ဘလူးတုသ် LE Audio ခွင့်ပြုစာရင်း’ ကို ရှောင်ကွင်းရန်"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio အရန်ပစ္စည်းကို ‘ခွင့်ပြုစာရင်း’ သတ်မှတ်ချက်နှင့် ကိုက်ညီသည်ဟု အတည်ပြုမထားစေကာမူ LE Audio ကို မူရင်းသတ်မှတ်ချက်အတိုင်း သုံးနိုင်သည်။"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"သင့်ကွန်ရက်နှင့် ကြိုးမဲ့အချက်ပြမှုများသုံး၍ အလိုအလျောက်သတ်မှတ်သည်"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"အလိုအလျောက် ဒေသစံတော်ချိန်"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"သင့်အနီးရှိ မိုဘိုင်းကွန်ရက်များပေါ် အခြေခံ၍ အလိုအလျောက်သတ်မှတ်သည်"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ရနိုင်ပါက သင့်စက်တည်နေရာသုံး၍ အလိုအလျောက်သတ်မှတ်သည်။ ပွင့်နေသော Wifi ချိတ်ဆက်မှုလည်း လိုအပ်နိုင်သည်။"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ရနိုင်ပါက သင့်စက်တည်နေရာသုံး၍ အလိုအလျောက်သတ်မှတ်သည်"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ဒေသ၏ ဘာသာစကားစနစ်ကို သုံးရန်"</string>
<string name="date_time_24hour" msgid="286679379105653406">"၂၄-နာရီပုံစံကို အသုံးပြုရန်"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"အချိန်"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"အများသုံးနိုင်မှု"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"စက်၏ ကီးဘုတ်"</string>
<string name="bounce_keys" msgid="7419450970351743904">"ပြန်ကန်ကီးများ"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"ကီးဘုတ်သည် ကီးတစ်ခုတည်း အကြိမ်ကြိမ် အမြန်နှိပ်ခြင်းကို လျစ်လျူရှုသည်"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"ကြိမ်ထပ်နှိပ်ခြင်းများ သတ်မှတ်ချက်"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ကီးအကြိမ်ကြိမ်နှိပ်ခြင်းကို ကီးဘုတ်က လျစ်လျူရှုမည့်ကြာချိန် ရွေးပါ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"၀.၂ စက္ကန့်"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"၀.၄ စက္ကန့်"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"၀.၆ စက္ကန့်"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"စိတ်ကြိုက်"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"စိတ်ကြိုက်တန်ဖိုး"</string>
<string name="slow_keys" msgid="2891452895499690837">"အနှေးကီးများ"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"ဖွင့်ရန် ကီးနှိပ်ခြင်းအတွက် ကြာချိန်ကို ပြင်ပေးသည်"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ကပ်ခွာကီးများ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ဖြတ်လမ်းလင့်ခ်များအတွက် ခလုတ်များကို တစ်ပြိုင်တည်းဖိထားမည့်အစား တစ်ကြိမ်လျှင် ခလုတ်တစ်ခု နှိပ်နိုင်သည်"</string>
<string name="mouse_keys" msgid="6237254627808525540">"မောက်စ်ကီးများ"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"ညွှန်မှတ် ထိန်းချုပ်ရန် သင့်ကီးဘုတ်ကို သုံးပါ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"မောက်စ်ပြောင်းပြန်လှိမ့်ခြင်း"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"စာမျက်နှာအောက်သို့ ရွှေ့ရန်အတွက် အပေါ်သို့လှိမ့်ပါ"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ဘယ်နှင့်ညာခလုတ်များ ပြောင်းရန်"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ဘယ်ဘက်မောက်စ်ခလုတ်ကို ညာဘက်ခလုတ်အဖြစ် သုံးနိုင်သည်"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"လက်ကွက်ဖြတ်လမ်းများ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ဖြတ်လမ်းလင့်ခ်များစာရင်း ပြပါ"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> အတွက် ကီးအသစ်ရွေးပါ-"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ပကတိကီးဘုတ် အများသုံးနိုင်မှု"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ကပ်ခွာကီး၊ တစ်ကြိမ်နှိပ်ကီး၊ မောက်စ်ကီး"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"ပြန်ကျော့ကီးများ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ပြန်မကျော့မီ ကြန့်ကြာချိန်"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ပြန်ကျော့နှုန်း"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ကီး၏အက္ခရာကို ပြန်ကျော့ရန် ဖိထားပြီးမှ လွှတ်လိုက်ပါ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> အပြင်အဆင်"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"မူရင်း"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"အလိုအလျောက်- <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"အစမ်းကြည့်ရှုရန်"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ပုံမှန်ရွေးချယ်စရာများ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ဘာသာစကား"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"စာတန်းအရွယ်အစား"</string>
<string name="captioning_preset" msgid="4174276086501638524">"စာတန်းပုံစံ"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"စိတ်ကြိုက်ရွေးချယ်စရာများ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"နောက်ခံအရောင်"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ပါဝါအသုံးပြုမှုအား ချိန်တွယ်ခြင်း"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ပါဝင်သော ဆော့ဝဲလ်များ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"အက်ပ်များ ပုံမှန်လုပ်ဆောင်နေပါသည်"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ဘက်ထရီ အားနည်းနေသည်"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ဘက်ထရီသက်တမ်းရှည်စေရန် ‘ဘက်ထရီအားထိန်း’ ကို ဖွင့်ပါ"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ဘက်ထရီသက်တမ်း ပိုကောင်းအောင်လုပ်ပါ"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ဤ VPN အား ချိတ်ဆက်မှု ဖြုတ်လိုပါသလား။"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ဆက်သွယ်မှု ဖြတ်ရန်"</string>
<string name="vpn_version" msgid="6344167191984400976">"ဗားရှင်း"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ဗားရှင်း <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ကိုမေ့လိုက်ပါ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ရှိပြီးသား VPN ကိုအစားထိုးမလား။"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"VPN ကို အမြဲတမ်းဖွင့်ထားရန် သတ်မှတ်မလား။"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"“ကြားရက်များ နံနက် ၉ နာရီ - ညနေ ၅ နာရီ”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"ပြက္ခဒိန်အစီအစဉ်များ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ကို အသုံးပြုနေသည်}=2{{mode_1} နှင့် {mode_2} တို့ကို အသုံးပြုနေသည်}=3{{mode_1}၊ {mode_2} နှင့် {mode_3} တို့ကို အသုံးပြုနေသည်}other{{mode_1}၊ {mode_2} နှင့် နောက်ထပ် # ခုတို့ကို အသုံးပြုနေသည်}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{မုဒ် ၁ ခု အလိုအလျောက်ပွင့်နိုင်သည်}other{မုဒ် # ခု အလိုအလျောက်ပွင့်နိုင်သည်}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ဖွင့်"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"သတ်မှတ်မထားပါ"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ပိတ်ထားသည်"</string>
@@ -3759,7 +3782,7 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"ဤအက်ပ်က အကြောင်းကြားချက် မပို့ပါ"</string>
<string name="notification_channels" msgid="1502969522886493799">"အမျိုးအစားများ"</string>
<string name="notification_channels_other" msgid="18159805343647908">"အခြား"</string>
- <string name="no_channels" msgid="4716199078612071915">"ဤအက်ပ်က မည်သည့် အကြောင်းကြားချက်ကိုမျှ ပို့စ်တင်မထားပါ"</string>
+ <string name="no_channels" msgid="4716199078612071915">"ဤအက်ပ်က မည်သည့် အကြောင်းကြားချက်ကိုမျှ တင်မထားပါ"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"မသုံးသော အမျိုးအစားများကို ပြပါ"</string>
<string name="app_settings_link" msgid="6725453466705333311">"အက်ပ်အတွင်း နောက်ထပ်ဆက်တင်များ"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"မသုံးသော အမျိုးအစားများကို ပြရန်"</string>
@@ -4435,7 +4458,7 @@
<string name="keywords_system_navigation" msgid="3131782378486554934">"စနစ် လမ်းညွှန်ခြင်း၊ ခလုတ် ၂ ခု ဖြင့် လမ်းညွှန်ခြင်း၊ ခလုတ် ၃ ခု ဖြင့် လမ်းညွှန်ခြင်း၊ လက်ဟန်ဖြင့် လမ်းညွှန်ခြင်း၊ ပွတ်ဆွဲခြင်း"</string>
<string name="assistant_gesture_category_title" msgid="2478251256585807920">"ဒစ်ဂျစ်တယ်အထောက်အကူ"</string>
<string name="assistant_corner_gesture_title" msgid="1895061522687002106">"Assistant ကို ညွှန်ကြားရန် ပွတ်ဆွဲခြင်း"</string>
- <string name="assistant_corner_gesture_summary" msgid="5012534700233017955">"ဒစ်ဂျစ်တယ် Assistant အက်ပ်ကို ညွှန်ကြားရန် အောက်ခြေထောင့်မှ အပေါ်သို့ ပွတ်ဆွဲပါ"</string>
+ <string name="assistant_corner_gesture_summary" msgid="5012534700233017955">"ဒစ်ဂျစ်တယ် အထောက်အကူ အက်ပ်ကို ညွှန်ကြားရန် အောက်ခြေထောင့်မှ အပေါ်သို့ ပွတ်ဆွဲပါ"</string>
<string name="assistant_long_press_home_gesture_title" msgid="4865972278738178753">"Assistant အတွက် ပင်မခလုတ် နှိပ်ထားခြင်း"</string>
<string name="assistant_long_press_home_gesture_summary" msgid="592882226105081447">"ဒစ်ဂျစ်တယ်အထောက်အကူ အက်ပ်ကို ညွှန်ကြားရန် ပင်မခလုတ် နှိပ်ထားပါ။"</string>
<string name="low_label" msgid="6525629096999711220">"နိမ့်"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"ဆက်တင်များတွင် ရှာရန်"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"အဆက်အသွယ်များ၊ သိုလှောင်ခန်း၊ အကောင့်"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"အဆက်အသွယ်များ သိုလှောင်ခန်း"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ပုံသေ သတ်မှတ်မထားပါ"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"စက်ပစ္စည်းသီးသန့်"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"အဆက်အသွယ်အသစ်များကို အကောင့်နှင့် စင့်ခ်လုပ်မည်မဟုတ်ပါ"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"မူရင်းသတ်မှတ်ချက်အရ အဆက်အသွယ်များကို သင့်စက်တွင်သိမ်းပြီး အကောင့်နှင့် စင့်ခ်လုပ်ပါမည်"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"မူလအကောင့်ကို သတ်မှတ်ရာတွင် အမှားရှိသည်"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"မူလအကောင့် သတ်မှတ်မထားပါ"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"စက်ပစ္စည်းသီးသန့်"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"စတင်ရန် အကောင့်ထည့်ပါ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ရှာရန် ကွက်၍ဝိုင်းလိုက်ပါ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"သင့်စခရင်ပေါ်ရှိ အကြောင်းအရာသုံး၍ ရှာရန်အတွက် ပင်မခလုတ် (သို့) လမ်းညွှန်ဘားကို တို့ထိ၍ ဖိထားပါ။"</string>
</resources>
diff --git a/res/values-nb/arrays.xml b/res/values-nb/arrays.xml
index 3f45262..d217ad1 100644
--- a/res/values-nb/arrays.xml
+++ b/res/values-nb/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snøflak"</item>
<item msgid="7952183800501346803">"Strandparasoll"</item>
<item msgid="799139025758265891">"Verktøy på verksted"</item>
- <item msgid="1330084588359129896">"Telt"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Filmspole"</item>
<item msgid="5827426100157335512">"Bok"</item>
<item msgid="8585828346253128384">"Lotusblomst"</item>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index d501ad2..23f2bba 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Slå av Bluetooth LE-lyd"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Slår av Bluetooth LE-lydfunksjonen hvis enheten støtter maskinvarefunksjoner for LE-lyd."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE-lydmodus"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Vis LE-lyd-av/på-bryter i Enhetsdetaljer"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omgå godkjenningsliste for Bluetooth LE-lyd"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Bruk LE-lyd som standard, selv om det ikke er bekreftet at den eksterne LE-lydenheten overholder kriteriene for godkjenningslisten."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Angi automatisk med nettverket og trådløse signaler"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatisk tidssone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Angi automatisk basert på mobilnettverk i nærheten"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Angi automatisk med enhetsposisjonen, hvis tilgjengelig. Aktiv wifi er kanskje også nødvendig."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Angi automatisk med enhetsposisjonen, hvis tilgjengelig"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Bruk lokal standard"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Bruk 24-timers format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Tid"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Tilgjengelighet"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fysisk tastatur"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Filtertaster"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Tastaturet ignorerer raskt gjentatte trykk på samme tast"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Grense for filtertaster"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Velg hvor lenge tastaturet skal ignorere gjentatte tastetrykk"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Egendefinert"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"egendefinert verdi"</string>
<string name="slow_keys" msgid="2891452895499690837">"Hengende taster"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Justerer tiden det tar før tastetrykk aktiveres"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Trege taster"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Aktiver hurtigtaster ved å trykke på én tast av gangen i stedet for å holde flere taster inne samtidig"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Museknapper"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Bruk tastaturet til å kontrollere pekeren"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Omvendt rulling med musen"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Rull opp for å flytte siden ned"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Bytt om på venstre og høyre knapp"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Bruk venstre museknapp som høyre"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Hurtigtaster"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Vis listen over hurtigtaster"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Velg en ny tast for <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Tilgjengelighet med fysisk tastatur"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Trege taster, filtertaster, musetaster"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Gjenta taster"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Forsinkelse før gjentakelse"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Gjentakelseshastighet"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Hold en tast inne for å gjenta tegnet til du slipper opp tasten"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g>-oppsett"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Standard"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatisk: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Forhåndsvisning"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardvalg"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Språk"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tekststørrelse"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Tekststil"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Tilpassede alternativer"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Bakgrunnsfarge"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Juster strømforbruk"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pakker"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Appene kjører som normalt"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Batterinivået er lavt"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Slå på batterisparing for å forlenge batterilevetiden"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Forbedre batterilevetiden"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vil du koble fra dette VPN-et?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Koble fra"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versjon"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versjon <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Glem VPN-profilen"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vil du erstatte det nåværende VPN-et?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vil du angi alltid på-VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"«9:00–17:00 på hverdager»"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalenderaktiviteter"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} er aktiv}=2{{mode_1} og {mode_2} er aktive}=3{{mode_1}, {mode_2} og {mode_3} er aktive}other{{mode_1}, {mode_2} og # til er aktive}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modus kan slås på automatisk}other{# moduser kan slås på automatisk}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"PÅ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ikke angitt"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Deaktivert"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Søk i innstillingene"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakter, lagring, konto"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontaktlager"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ingen standard er valgt"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Bare enheten"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nye kontakter synkroniseres ikke med kontoer"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakter lagres på enheten og synkroniseres med kontoen din som standard"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Feil ved innstilling av standardkonto"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ingen standard er valgt"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Bare enheten"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Legg til en konto for å komme i gang"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Trykk og hold på hjemknappen eller navigasjonshåndtaket for å søke med innholdet på skjermen."</string>
</resources>
diff --git a/res/values-ne/arrays.xml b/res/values-ne/arrays.xml
index 2249545..2f88846 100644
--- a/res/values-ne/arrays.xml
+++ b/res/values-ne/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"हिमकण"</item>
<item msgid="7952183800501346803">"समुद्री तटमा प्रयोग गरिने छाता"</item>
<item msgid="799139025758265891">"वर्कसप प्रयोग गरिने औजारहरू"</item>
- <item msgid="1330084588359129896">"पाल"</item>
+ <item msgid="8112685757657659269">"पियानो"</item>
<item msgid="3861584909935022342">"फिल्म रिल"</item>
<item msgid="5827426100157335512">"पुस्तक"</item>
<item msgid="8585828346253128384">"कमल फूल"</item>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 37ac582..2a7c66d 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"\"ब्लुटुथ लो इनर्जी अडियो\" अफ गर्नुहोस्"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"डिभाइसमा LE अडियो हार्डवेयर चलाउन मिल्छ भने \"ब्लुटुथ लो इनर्जी अडियो\" सुविधा अफ हुन्छ।"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ब्लुटुथ लो इनर्जी अडियो मोड"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"डिभाइसको विवरणमा LE अडियोको टगल देखाउनुहोस्"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ब्लुटुथ लो इनर्जी अडियोको श्वेतसूची बाइपास गर्नुहोस्"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE अडियो पेरिफरलले श्वेतसूचीको मापदण्ड पूरा गर्छ भन्ने कुरा पुष्टि नगरिए तापनि LE अडियो डिफल्ट रूपमा प्रयोग गर्नुहोस्।"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"तपाईंको नेटवर्क र वायरलेस सिग्नल प्रयोग गरेर मिति र समय स्वतः सेट गर्नुहोस्"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"स्वचालित प्रामाणिक समय"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"तपाईंको नजिकै भएका मोबाइल नेटवर्कका आधारमा मिति र समय स्वतः सेट गर्नुहोस्"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"उपलब्ध भएमा आफ्नो डिभाइसको लोकेसन प्रयोग गरेर मिति र समय स्वतः सेट गर्नुहोस्। सक्रिय Wi-Fi कनेक्सन पनि चाहिन सक्छ।"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"उपलब्ध भएमा आफ्नो डिभाइसको लोकेसन प्रयोग गरेर मिति र समय स्वतः सेट गर्नुहोस्"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"लोकेलको डिफल्ट सेटिङ प्रयोग गर्नुहोस्"</string>
<string name="date_time_24hour" msgid="286679379105653406">"२४-घण्टे ढाँचा प्रयोग गर्नुहोस्"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"समय"</string>
@@ -624,7 +628,7 @@
<string name="private_space_setup_title" msgid="2272968244329821450">"निजी स्पेस"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"निजी एपहरू छुट्टै स्पेसमा लुकाउनुहोस् वा लक गर्नुहोस्। थप सुरक्षाका लागि विशेष Google खाता प्रयोग गर्नुहोस्।"</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"यसले काम गर्ने तरिका"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"आफ्नो स्पेसमा प्रयोग गर्नका निम्ति Google खाता बनाउनुहोस्"</b>\n"तपाईं स्पेसमा मात्र प्रयोग गर्ने प्रयोजनका लागि एउटा छुट्टै खाता बनाउनुभयो भने सिंक गरिएका फाइल, फोटो र इमेलहरू तपाईंको स्पेसभन्दा बाहिर देखिँदैन"</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"आफ्नो स्पेसमा प्रयोग गर्नका निम्ति Google खाता बनाउनुहोस्"</b>\n"तपाईं स्पेसमा मात्र प्रयोग गर्ने प्रयोजनका लागि एउटा छुट्टै खाता बनाउनुभयो भने सिंक गरिएका फाइल, फोटो र इमेलहरू तपाईंको स्पेसबाहिर देखिँदैनन्"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"लक सेटअप गर्नुहोस्"</b>\n"अरू मान्छेले तपाईंको स्पेस खोल्न नसकून् भन्नाका लागि उक्त स्पेस लक गर्नुहोस्"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"एपहरू इन्स्टल गर्नुहोस्"</b>\n"तपाईंले आफ्नो स्पेसमा गोप्य राख्न चाहेका एपहरू इन्स्टल गर्नुहोस्"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"ख्याल गर्नुहोस्"</string>
@@ -821,10 +825,10 @@
<string name="manage_device_admin" msgid="1044620606203916275">"डिभाइसका एड्मिन एपहरू"</string>
<string name="number_of_device_admins_none" msgid="152926922020437312">"कुनै सक्रिय एपहरू छैनन्"</string>
<string name="number_of_device_admins" msgid="3402909995362162876">"{count,plural, =1{# सक्रिय एप}other{# वटा सक्रिय एप}}"</string>
- <string name="manage_trust_agents" msgid="6410149930029992356">"ट्रस्ट एजेन्टहरू"</string>
+ <string name="manage_trust_agents" msgid="6410149930029992356">"विश्वसनीय सुविधाहरू"</string>
<string name="disabled_because_no_backup_security" msgid="4998095356607488854">"यो सेवा प्रयोग गर्न, पहिले स्क्रिन लक सेट गर्नुहोस्"</string>
<string name="manage_trust_agents_summary" msgid="6423843123607674286">"कुनै पनि होइन"</string>
- <string name="manage_trust_agents_summary_on" msgid="3302574418419446146">"{count,plural, =1{१ सक्रिय ट्रस्ट एजेन्ट}other{# वटा सक्रिय ट्रस्ट एजेन्टहरू}}"</string>
+ <string name="manage_trust_agents_summary_on" msgid="3302574418419446146">"{count,plural, =1{१ सक्रिय ट्रस्ट एजेन्ट}other{# वटा सक्रिय विश्वसनीय सुविधाहरू}}"</string>
<string name="bluetooth_settings" msgid="2967239493428695171">"ब्लुटुथ"</string>
<string name="bluetooth_settings_title" msgid="2642029095769509647">"ब्लुटुथ"</string>
<string name="bluetooth_pairing_request" msgid="7762990650683525640">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सँग कनेक्ट गर्ने हो?"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"एक्सेसिबिलिटी सुविधा"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"फिजिकल किबोर्ड"</string>
<string name="bounce_keys" msgid="7419450970351743904">"बाउन्स की"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"एउटै की बारम्बार थिच्दा किबोर्डले तुरुन्तै बेवास्ता गर्छ"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"बाउन्स कीको सीमा"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"कति समयसम्म बारम्बार की थिच्दा किबोर्डले बेवास्ता गर्छ भन्ने कुरा छनौट गर्नुहोस्"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"०.२ सेकेन्ड"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"०.४ सेकेन्ड"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"०.६ सेकेन्ड"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"कस्टम"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"कस्टम मान"</string>
<string name="slow_keys" msgid="2891452895499690837">"स्लो की"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"कुनै की कति समयसम्म थिच्दा एक्टिभेट हुन्छ भन्ने कुरा मिलाउँछ"</string>
<string name="sticky_keys" msgid="7317317044898161747">"स्टिकी की"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"सर्टकट प्राप्त गर्नका लागि कीहरू सँगै थिचिराख्नुको साटो एक पटकमा एउटा की थिच्नुहोस्"</string>
<string name="mouse_keys" msgid="6237254627808525540">"माउस की"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"पोइन्टर नियन्त्रण गर्न किबोर्ड प्रयोग गर्नुहोस्"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"माउसको विपरीत दिशामा स्क्रोल गर्ने विकल्प"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"पेज सारेर तल लैजान माथितिर स्क्रोल गर्नुहोस्"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"दायाँ र बायाँ बटन अदलबदल गर्नुहोस्"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"माउसको बायाँपट्टिको बटनलाई दायाँ बटनका रूपमा प्रयोग गर्नुहोस्"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"किबोर्डका सर्टकटहरू"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"सर्टकटहरूको सूची देखाउनुहोस्"</string>
@@ -2013,13 +2031,13 @@
<string name="gesture_button_restart" msgid="1895850891992530133">"रिस्टार्ट गर्नुहोस्"</string>
<string name="gesture_button_done" msgid="6387900351203032188">"सम्पन्न भयो"</string>
<string name="trackpad_go_back_title" msgid="5312164160947491440">"पछाडि जानुहोस्"</string>
- <string name="trackpad_go_back_summary" msgid="4201901101085902768">"तिन वटा औँलाले बायाँ वा दायाँतिर स्वाइप गर्नुहोस्"</string>
+ <string name="trackpad_go_back_summary" msgid="4201901101085902768">"तीन वटा औँलाले बायाँ वा दायाँतिर स्वाइप गर्नुहोस्"</string>
<string name="trackpad_go_home_title" msgid="2146525662148291552">"होमपेजमा जाने तरिका"</string>
- <string name="trackpad_go_home_summary" msgid="2222744701528360887">"तिन वटा औँलाले माथितिर स्वाइप गर्नुहोस्"</string>
+ <string name="trackpad_go_home_summary" msgid="2222744701528360887">"तीन वटा औँलाले माथितिर स्वाइप गर्नुहोस्"</string>
<string name="trackpad_recent_apps_title" msgid="8195970908411585445">"हालसालै चलाइएका एपहरू"</string>
- <string name="trackpad_recent_apps_summary" msgid="2685092851677573794">"तिन वटा औँलाले माथितिर स्वाइप गर्नुहोस्, अनि होल्ड गर्नुहोस्"</string>
+ <string name="trackpad_recent_apps_summary" msgid="2685092851677573794">"तीन वटा औँलाले माथितिर स्वाइप गर्नुहोस्, अनि होल्ड गर्नुहोस्"</string>
<string name="trackpad_notifications_title" msgid="3521663305043747880">"सूचनाहरू"</string>
- <string name="trackpad_notifications_summary" msgid="7663647367648690040">"तिन वटा औँलाले तलतिर स्वाइप गर्नुहोस्"</string>
+ <string name="trackpad_notifications_summary" msgid="7663647367648690040">"तीन वटा औँलाले तलतिर स्वाइप गर्नुहोस्"</string>
<string name="trackpad_switch_apps_title" msgid="7342032935377284039">"एउटा एपबाट अर्को एपमा जाने तरिका"</string>
<string name="trackpad_switch_apps_summary" msgid="9193942041912927440">"चार वटा औँलाले बायाँ वा दायाँतिर स्वाइप गर्नुहोस्"</string>
<string name="modifier_keys_settings" msgid="2537108435032034683">"मोडिफायर कीहरू"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> को नयाँ की छनौट गर्नुहोस्:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"भौतिक किबोर्डको सर्वसुलभता"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"स्टिकी कीहरू, बाउन्स कीहरू, माउस कीहरू"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"कीहरू दोहोर्याउनुहोस्"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"वर्ण दोहोरिनुअघि सम्बन्धित कि कति बेरसम्म थिच्न सकिन्छ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"दोहोरिने दर"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"की नछाड्नुन्जेल कीको वर्ण दोहोर्याउन की थिचिराख्नुहोस्"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> लेआउट"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"डिफल्ट"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"स्वचालित: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"पूर्वावलोकन"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"डिफल्ट विकल्पहरू"</string>
<string name="captioning_locale" msgid="5533303294290661590">"भाषा"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"क्याप्सनको आकार"</string>
<string name="captioning_preset" msgid="4174276086501638524">"क्याप्सनको शैली"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">" कस्टम विकल्प"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"पृष्ठभूमि रङ्ग"</string>
@@ -2515,7 +2532,7 @@
<string name="print_feature_state_on" msgid="7132063461008624685">"अन छ"</string>
<string name="print_feature_state_off" msgid="1466195699995209446">"बन्द"</string>
<string name="print_menu_item_add_service" msgid="1549091062463044676">"सेवा हाल्नुहोस्"</string>
- <string name="print_menu_item_add_printer" msgid="8711630848324870892">"प्रिन्टर थप्नुहोस्"</string>
+ <string name="print_menu_item_add_printer" msgid="8711630848324870892">"प्रिन्टर कनेक्ट गर्नुहोस्"</string>
<string name="print_menu_item_search" msgid="5989979785203603169">"खोज्नुहोस्"</string>
<string name="print_searching_for_printers" msgid="5401413178028348800">"प्रिन्टरहरू खोजिँदै छ"</string>
<string name="print_service_disabled" msgid="9185935228930987786">"प्रिन्ट सेवा अफ गरिएको छ"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"उर्जा प्रयोग मिलाउनुहोस्"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"सम्मिलित प्याकेजहरू"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"एपहरू सामान्य रूपमा चलिरहेका छन्"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ब्याट्री कम छ"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ब्याट्रीको आयु बढाउन ब्याट्री सेभर अन गर्नुहोस्"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ब्याट्रीको आयु सुधार्नुहोस्"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"यो VPN को जडान विच्छेद गर्ने हो?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"डिस्कनेक्ट गर्नुहोस्"</string>
<string name="vpn_version" msgid="6344167191984400976">"संस्करण"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"संस्करण <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN लाई बिर्सनुहोस्"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"विद्यमान VPN लाई बदल्ने हो?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"सधैँ-सक्रिय VPN लाई सेट गर्ने हो?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"सप्ताहान्तबाहेकका दिन बिहान ९ देखि साँझ ५ बजेसम्म\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"पात्रोमा सेट गरिएका कार्यक्रमहरू"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} सक्रिय छ}=2{{mode_1} र {mode_2} सक्रिय छन्}=3{{mode_1}, {mode_2} र {mode_3} सक्रिय छन्}other{{mode_1}, {mode_2} र अरू # वटा मोड सक्रिय छन्}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{एउटा मोड स्वतः अन हुन सक्छ}other{# वटा मोड स्वतः अन हुन सक्छन्}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"अन छ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"सेट गरिएको छैन"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"अफ गरिएको छ"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"सेटिङ खोज्नुहोस्"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"कन्ट्याक्ट, भण्डारण, खाता"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"कन्ट्याक्टहरूको भण्डारण"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"कुनै डिफल्ट खाता सेट गरिएको छैन"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"डिभाइस मात्र"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"नयाँ कन्ट्याक्टहरू खातासँग सिंक गरिने छैनन्"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"डिफल्ट सेटिङअनुसार कन्ट्याक्टहरू तपाईंको डिभाइसमा सेभ गरिने छन् र तपाईंको खातामा सिंक गरिने छन्"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"मुख्य खाता सेट गर्ने क्रममा त्रुटि भयो"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"मुख्य खाता सेट गरिएको छैन"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"डिभाइस मात्र"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"सुरु गर्न खाता हाल्नुहोस्"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"खोज्न सर्कल बनाउनुहोस्"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"आफ्नो स्क्रिनमा सामग्री प्रयोग गरेर खोज्न होम बटन वा नेभिगेसन ह्यान्डल टच एण्ड होल्ड गर्नुहोस्।"</string>
</resources>
diff --git a/res/values-nl/arrays.xml b/res/values-nl/arrays.xml
index b8e9c78..3f280ff 100644
--- a/res/values-nl/arrays.xml
+++ b/res/values-nl/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Sneeuwvlok"</item>
<item msgid="7952183800501346803">"Parasol"</item>
<item msgid="799139025758265891">"Werkplaatsgereedschap"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Filmrol"</item>
<item msgid="5827426100157335512">"Boek"</item>
<item msgid="8585828346253128384">"Lotusbloem"</item>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index c70d0ca..97efd00 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audio uitzetten"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Zet de functie voor Bluetooth LE Audio uit als het apparaat hardwaremogelijkheden voor LE Audio ondersteunt"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio-modus"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Schakelaar voor LE Audio tonen in Apparaatgegevens"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Toelatingslijst voor Bluetooth LE Audio negeren"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Maak standaard gebruik van LE Audio, ook als niet is geverifieerd of LE Audio-randapparatuur voldoet aan de criteria van de toelatingslijst"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Automatisch instellen met je netwerk- en draadloze signalen"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatische tijdzone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Automatisch instellen op basis van mobiele netwerken bij jou in de buurt"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Automatisch instellen met apparaatlocatie, indien beschikbaar. Soms is ook een actieve wifi-verbinding vereist."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Automatisch instellen met apparaatlocatie, indien beschikbaar"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Standaardinstelling voor land gebruiken"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-uurs klok gebruiken"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Tijd"</string>
@@ -1303,8 +1307,8 @@
<string name="dark_ui_summary_on_auto_mode_custom_bedtime" msgid="1976993025762551246">"Gaat na bedtijd automatisch uit"</string>
<string name="dark_ui_summary_on_auto_mode_modes" msgid="7769594183411785087">"Wordt uitgezet als <xliff:g id="ID_1">%1$s</xliff:g> is afgelopen"</string>
<string name="dark_ui_text" msgid="4392646155331126666">"Het donkere thema gebruikt een zwarte achtergrond zodat je batterij langer meegaat op sommige schermen. Schema\'s voor het donkere thema worden pas aangezet als je scherm uitstaat."</string>
- <string name="dark_ui_bedtime_footer_summary" msgid="5576501833145170581">"Het donkere thema volgt op dit moment je schema voor de Bedtijdstand"</string>
- <string name="dark_ui_bedtime_footer_action" msgid="1493095487994054339">"Instellingen voor bedtijdstand"</string>
+ <string name="dark_ui_bedtime_footer_summary" msgid="5576501833145170581">"Het donkere thema volgt op dit moment je schema voor de Bedtijdmodus"</string>
+ <string name="dark_ui_bedtime_footer_action" msgid="1493095487994054339">"Instellingen voor Bedtijdmodus"</string>
<string name="dark_ui_modes_footer_summary" msgid="1041117250408363391">"{count,plural,offset:2 =0{Modi kunnen ook het donkere thema activeren}=1{{mode_1} activeert ook het donkere thema}=2{{mode_1} en {mode_2} activeren ook het donkere thema}=3{{mode_1}, {mode_2} en {mode_3} activeren ook het donkere thema}other{{mode_1}, {mode_2} en nog # activeren ook het donkere thema}}"</string>
<string name="dark_ui_modes_footer_action" msgid="80671811848446248">"Instellingen voor modi"</string>
<string name="even_dimmer_display_title" msgid="6731255736830410149">"Nog meer dimmen"</string>
@@ -1322,7 +1326,7 @@
<string name="style_suggestion_summary" msgid="4271131877800968159">"Probeer verschillende stijlen, achtergronden en meer"</string>
<string name="screensaver_settings_title" msgid="3588535639672365395">"Screensaver"</string>
<string name="keywords_screensaver" msgid="7249337959432229172">"screensaver"</string>
- <string name="screensaver_settings_when_to_dream_bedtime" msgid="3279310576803094771">"Niet beschikbaar omdat de bedtijdstand aanstaat"</string>
+ <string name="screensaver_settings_when_to_dream_bedtime" msgid="3279310576803094771">"Niet beschikbaar omdat de Bedtijdmodus aanstaat"</string>
<string name="screensaver_settings_toggle_title" msgid="6194634226897244374">"Screensaver gebruiken"</string>
<string name="screensaver_settings_summary_either_long" msgid="371949139331896271">"Tijdens opladen of docken"</string>
<string name="screensaver_settings_summary_dock_and_charging" msgid="8485905100159376156">"Tijdens gedockt opladen"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Het toetsenbord negeert snel herhaald indrukken van dezelfde toets"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Drempelwaarde voor stuitertoetsen"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Kies hoelang je toetsenbord herhaald indrukken van toetsen negeert"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Aangepast"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"aangepaste waarde"</string>
<string name="slow_keys" msgid="2891452895499690837">"Langzame toetsen"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Past de tijd voordat een toetsaanslag wordt geactiveerd aan"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Plaktoetsen"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Druk toetsen één voor één in voor snelkoppelingen in plaats van meerdere toetsen tegelijkertijd"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Muisknoppen"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Gebruik je toetsenbord om de cursor te bedienen"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Omgekeerd scrollen met muis"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scroll omhoog om de pagina omlaag te verplaatsen"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Knoppen links en rechts omwisselen"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Gebruik de linkermuisknop als je rechtermuisknop"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Sneltoetsen"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Toon lijst met sneltoetsen"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Toetsenborden en tools van werkprofiel"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Kies een nieuwe toets voor <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Toegankelijkheid met fysiek toetsenbord"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Plaktoetsen, bouncetoetsen, muisknoppen"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Toetsen herhalen"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Vertraging vóór herhaling"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Herhalingssnelheid"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Houd een toets ingedrukt om het bijbehorende teken te herhalen totdat de toets wordt losgelaten"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Indeling: <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Standaard"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatisch: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Voorbeeld"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standaardopties"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Taal"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Grootte van ondertiteling"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Ondertitelstijl"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Aangepaste opties"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Achtergrondkleur"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Energieverbruik aanpassen"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Bijgeleverde pakketten"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Apps worden normaal uitgevoerd"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Laag batterijniveau"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Zet Batterijbesparing aan om de batterijduur te verlengen"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"De batterijduur verbeteren"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Verbinding met dit VPN verbreken?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Verbinding verbreken"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versie"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versie <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN vergeten"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Bestaande VPN vervangen?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Always-on VPN instellen?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\'9:00 - 17:00 uur werkdagen\'"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Agenda-afspraken"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} is actief}=2{{mode_1} en {mode_2} zijn actief}=3{{mode_1}, {mode_2} en {mode_3} zijn actief}other{{mode_1}, {mode_2} en nog # zijn actief}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modus kan automatisch worden aangezet}other{# modi kunnen automatisch worden aangezet}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AAN"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Niet ingesteld"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Uitgezet"</string>
@@ -5117,7 +5148,7 @@
<string name="mobile_data_disable_message" msgid="7829414836454769970">"Je hebt dan geen toegang meer tot data of internet via <xliff:g id="CARRIER">%s</xliff:g>. Internet is alleen nog beschikbaar via wifi."</string>
<string name="mobile_data_disable_message_default_carrier" msgid="4449469407705838612">"je provider"</string>
<string name="not_allowed_by_ent" msgid="1958611623122304411">"Niet toegestaan door je organisatie"</string>
- <string name="aware_summary_when_bedtime_on" msgid="2063856008597376344">"Niet beschikbaar omdat de bedtijdstand aanstaat"</string>
+ <string name="aware_summary_when_bedtime_on" msgid="2063856008597376344">"Niet beschikbaar omdat de Bedtijdmodus aanstaat"</string>
<string name="reset_importance_completed" msgid="3595536767426097205">"Belang van meldingen is gereset."</string>
<string name="apps_dashboard_title" msgid="3269953499954393706">"Apps"</string>
<string name="bluetooth_message_access_notification_content" msgid="5111712860712823893">"Een apparaat wil toegang tot je berichten. Tik voor details."</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Alleen apparaat"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nieuwe contacten worden niet gesynchroniseerd met een account"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Contacten worden standaard opgeslagen op je apparaat en gesynchroniseerd met je account"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Geen standaard ingesteld"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Fout bij instellen van het standaardaccount"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Geen standaard ingesteld"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Alleen apparaat"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Voeg een account toe om aan de slag te gaan"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Houd je vinger op de startknop of de navigatiehandgreep om te zoeken op basis van de content op je scherm."</string>
</resources>
diff --git a/res/values-or/arrays.xml b/res/values-or/arrays.xml
index 133c6cf..c003c2d 100644
--- a/res/values-or/arrays.xml
+++ b/res/values-or/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ସ୍ନୋଫ୍ଲେକ"</item>
<item msgid="7952183800501346803">"ବେଳାଭୂମିରେ ଛତା"</item>
<item msgid="799139025758265891">"ୱାର୍କସପ ଟୁଲ"</item>
- <item msgid="1330084588359129896">"ଟେଣ୍ଟ"</item>
+ <item msgid="8112685757657659269">"ପିଆନୋ"</item>
<item msgid="3861584909935022342">"ଫିଲ୍ମ ରିଲ"</item>
<item msgid="5827426100157335512">"ବହି"</item>
<item msgid="8585828346253128384">"ପଦ୍ମ ଫୁଲ"</item>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 679d9d0..b2240b0e 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ବ୍ଲୁଟୁଥ LE ଅଡିଓକୁ ଅକ୍ଷମ କରନ୍ତୁ"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ଯଦି ଡିଭାଇସ LE ଅଡିଓ ହାର୍ଡୱେର କ୍ଷମତାକୁ ସମର୍ଥନ କରେ ତେବେ ଏହା ବ୍ଲୁଟୁଥ LE ଅଡିଓ ଫିଚରକୁ ଅକ୍ଷମ କରେ।"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"ବ୍ଲୁଟୁଥ LE ଅଡିଓ ମୋଡ"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ଡିଭାଇସ ବିବରଣୀରେ LE ଅଡିଓ ଟୋଗଲ ଦେଖାନ୍ତୁ"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ବାଇପାସ ବ୍ଲୁଟୁଥ LE ଅଡିଓ ଆଲାଉଲିଷ୍ଟ"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ଆଲାଉଲିଷ୍ଟ ମାନଦଣ୍ଡ ପୂରଣ କରିବାକୁ LE ଅଡିଓ ପେରିଫେରାଲକୁ ଯାଞ୍ଚ କରାଯାଇନଥିଲେ ମଧ୍ୟ ଡିଫଲ୍ଟ ଭାବେ LE ଅଡିଓ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
@@ -130,7 +134,7 @@
<string name="connected_device_fast_pair_device_title" msgid="543124539265592392">"ଆକାଉଣ୍ଟ ସହ ସମ୍ବନ୍ଧିତ"</string>
<string name="connected_device_previously_associated_fast_pair_device_title" msgid="8353405823992023457">"ଆକାଉଣ୍ଟ ସହ ପୂର୍ବରୁ ବ୍ୟବହୃତ"</string>
<string name="connected_device_add_device_summary" msgid="8671009879957120802">"ପେୟାର କରିବା ପାଇଁ ବ୍ଲୁଟୁଥ ଚାଲୁ ହେବ"</string>
- <string name="connected_device_connections_title" msgid="4164120115341579170">"କନେକ୍ସନ ପସନ୍ଦଗୁଡ଼ିକ"</string>
+ <string name="connected_device_connections_title" msgid="4164120115341579170">"କନେକ୍ସନ ପସନ୍ଦ"</string>
<string name="connected_device_previously_connected_screen_title" msgid="8823331744788100605">"ପୂର୍ବରୁ ସଂଯୋଗ ହୋଇଛି"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="144664089794199928">"ବ୍ଲୁ-ଟୁଥ୍ ଅନ୍ କରାଗଲା"</string>
<string name="previous_connected_see_all" msgid="7759413145713251328">"ସବୁ ଦେଖନ୍ତୁ"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ଆପଣଙ୍କ ନେଟୱାର୍କ ଏବଂ ୱାୟାରଲେସ ସିଗନାଲକୁ ବ୍ୟବହାର କରି ସ୍ୱତଃ ସେଟ କରନ୍ତୁ"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ସ୍ୱତଃ ଟାଇମ ଜୋନ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ଆପଣଙ୍କ ନିକଟରେ ଥିବା ମୋବାଇଲ ନେଟୱାର୍କ ଆଧାରରେ ସ୍ୱତଃ ସେଟ କରନ୍ତୁ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ଯଦି ଉପଲବ୍ଧ ଥାଏ, ତେବେ ଆପଣଙ୍କ ଡିଭାଇସର ଲୋକେସନକୁ ବ୍ୟବହାର କରି ସ୍ୱତଃ ସେଟ ହୋଇଥାଏ। ଏକ ସକ୍ରିୟ ୱାଇଫାଇ କନେକ୍ସନ ମଧ୍ୟ ଆବଶ୍ୟକ ହୋଇପାରେ।"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ଯଦି ଉପଲବ୍ଧ ଥାଏ, ତେବେ ଆପଣଙ୍କ ଡିଭାଇସର ଲୋକେସନକୁ ବ୍ୟବହାର କରି ସ୍ୱତଃ ସେଟ ହୋଇଥାଏ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ଡିଫଲ୍ଟ ସ୍ଥାନର ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-ଘଣ୍ଟିଆ ଫର୍ମାଟ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"ସମୟ"</string>
@@ -299,7 +303,7 @@
<string name="security_status_title" msgid="6958004275337618656">"ସୁରକ୍ଷା ସ୍ଥିତି"</string>
<string name="security_dashboard_summary" msgid="7571035662779425918">"ସ୍କ୍ରିନ୍ ଲକ୍, Find My Device, ଆପ୍ ସୁରକ୍ଷା"</string>
<string name="safety_center_title" msgid="7732397372178774777">"ସୁରକ୍ଷା ଏବଂ ଗୋପନୀୟତା"</string>
- <string name="safety_center_summary" msgid="3554867379951053869">"ଆପ ସୁରକ୍ଷା, ଡିଭାଇସ ଲକ, ଅନୁମତିଗୁଡ଼ିକ"</string>
+ <string name="safety_center_summary" msgid="3554867379951053869">"ଆପ ସୁରକ୍ଷା, ଡିଭାଇସ ଲକ, ଅନୁମତି"</string>
<string name="security_settings_face_preference_summary" msgid="6675126437396914838">"ଫେସ ଯୋଗ କରାଯାଇଛି"</string>
<string name="security_settings_face_preference_summary_none" msgid="523320857738436024">"ସେଟଅପ ଆବଶ୍ୟକ"</string>
<string name="security_settings_face_preference_title" msgid="2126625155005348417">"ଫେସ ଅନଲକ"</string>
@@ -711,7 +715,7 @@
<string name="face_unlock_set_unlock_pin" msgid="9034912683791069602">"PIN • ଫେସ"</string>
<string name="face_unlock_set_unlock_password" msgid="5874950853246424756">"ପାସୱାର୍ଡ • ଫେସ"</string>
<string name="face_unlock_skip_face" msgid="189695556498300008">"ଫେସ୍ ଅନଲକ୍ ବିନା ଜାରି ରଖନ୍ତୁ"</string>
- <string name="biometrics_unlock_skip_biometrics" msgid="7399882488272450182">"ଟିପଚିହ୍ନ କିମ୍ବା ଫେସ ବିନା ଜାରି ରଖନ୍ତୁ"</string>
+ <string name="biometrics_unlock_skip_biometrics" msgid="7399882488272450182">"ଫିଙ୍ଗରପ୍ରିଣ୍ଟ କିମ୍ବା ଫେସ ବିନା ଜାରି ରଖନ୍ତୁ"</string>
<string name="unlock_set_unlock_mode_off" msgid="4632139864722236359">"କିଛି ନାହିଁ"</string>
<string name="unlock_set_unlock_mode_none" msgid="5596049938457028214">"ସ୍ୱାଇପ"</string>
<string name="unlock_set_unlock_mode_pattern" msgid="1926480143883094896">"ପାଟର୍ନ"</string>
@@ -824,7 +828,7 @@
<string name="manage_trust_agents" msgid="6410149930029992356">"ବିଶ୍ୱସ୍ତ ଏଜେଣ୍ଟ"</string>
<string name="disabled_because_no_backup_security" msgid="4998095356607488854">"ବ୍ୟବହାର କରିବା ପାଇଁ, ପ୍ରଥମେ ଏକ ସ୍କ୍ରିନ୍ ଲକ୍ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="manage_trust_agents_summary" msgid="6423843123607674286">"କିଛି ନୁହେଁ"</string>
- <string name="manage_trust_agents_summary_on" msgid="3302574418419446146">"{count,plural, =1{1ଟି ସକ୍ରିୟ ବିଶ୍ୱସ୍ତ ଏଜେଣ୍ଟ}other{#ଟି ସକ୍ରିୟ ବିଶ୍ୱସ୍ତ ଏଜେଣ୍ଟ}}"</string>
+ <string name="manage_trust_agents_summary_on" msgid="3302574418419446146">"{count,plural, =1{1 ସକ୍ରିୟ ବିଶ୍ୱସ୍ତ ଏଜେଣ୍ଟ}other{# ସକ୍ରିୟ ବିଶ୍ୱସ୍ତ ଏଜେଣ୍ଟ}}"</string>
<string name="bluetooth_settings" msgid="2967239493428695171">"ବ୍ଲୁଟୁଥ୍"</string>
<string name="bluetooth_settings_title" msgid="2642029095769509647">"ବ୍ଲୁଟୁଥ"</string>
<string name="bluetooth_pairing_request" msgid="7762990650683525640">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର କରିବେ?"</string>
@@ -924,7 +928,7 @@
<string name="show_hdr_sdr_ratio" msgid="4188007289024955585">"HDR/SDR ଅନୁପାତ ଦେଖାନ୍ତୁ"</string>
<string name="show_hdr_sdr_ratio_summary" msgid="986292785096013733">"ବର୍ତ୍ତମାନର HDR/SDR ଅନୁପାତ ଦେଖାନ୍ତୁ"</string>
<string name="nfc_quick_toggle_title" msgid="3607620705230351666">"NFC"</string>
- <string name="nfc_secure_settings_title" msgid="4906958426927741485">"NFC ପାଇଁ ଡିଭାଇସ୍ ଅନଲକ୍ ଆବଶ୍ୟକ"</string>
+ <string name="nfc_secure_settings_title" msgid="4906958426927741485">"NFC ପାଇଁ ଡିଭାଇସ ଅନଲକ ଆବଶ୍ୟକ"</string>
<string name="android_beam_settings_title" msgid="2797963824490671295">"Android ବିମ୍"</string>
<string name="android_beam_on_summary" msgid="6067720758437490896">"NFC ମାଧ୍ୟମରେ ଆପ୍ର କଣ୍ଟେଣ୍ଟ ପଠାଇବାକୁ ପ୍ରସ୍ତୁତ"</string>
<string name="android_beam_off_summary" msgid="5693961375631325042">"ବନ୍ଦ"</string>
@@ -1834,7 +1838,7 @@
<string name="filter" msgid="9039576690686251462">"ଫିଲ୍ଟର୍"</string>
<string name="filter_dlg_title" msgid="3086282431958601338">"ଫିଲ୍ଟର ବିକଳ୍ପ ବାଛନ୍ତୁ"</string>
<string name="filter_apps_all" msgid="5705421199299914620">"ସମସ୍ତ ଆପସ୍"</string>
- <string name="filter_apps_disabled" msgid="5068011814871004105">"ଅକ୍ଷମ ହୋଇଥିବା ଆପ୍"</string>
+ <string name="filter_apps_disabled" msgid="5068011814871004105">"ଅକ୍ଷମ ହୋଇଥିବା ଆପ"</string>
<string name="filter_apps_third_party" msgid="9049447784849114843">"ଡାଉନ୍ଲୋଡ୍ ହୋଇଗଲା"</string>
<string name="filter_apps_running" msgid="535465683273284141">"ଚାଲୁଛି"</string>
<string name="not_installed" msgid="5074606858798519449">"ଏହି ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ଇନଷ୍ଟଲ୍ କରାଯାଇ ନାହିଁ"</string>
@@ -1894,7 +1898,7 @@
<string name="running_processes_item_description_p_p" msgid="3292999232897469679">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> ପ୍ରକ୍ରିୟା ଓ <xliff:g id="NUMSERVICES">%2$d</xliff:g> ସେବା"</string>
<string name="running_processes_header_title" msgid="558961782589967366">"ଡିଭାଇସ୍ ମେମୋରୀ"</string>
<string name="running_processes_header_footer" msgid="2726092156680487584">"ଆପ୍ ରାମ୍ ବ୍ୟବହାର"</string>
- <string name="running_processes_header_system_prefix" msgid="8819527769608555124">"ସିଷ୍ଟମ୍"</string>
+ <string name="running_processes_header_system_prefix" msgid="8819527769608555124">"ସିଷ୍ଟମ"</string>
<string name="running_processes_header_apps_prefix" msgid="4151874328324238133">"ଆପ୍ସ"</string>
<string name="running_processes_header_free_prefix" msgid="4271100378295864738">"ଖାଲି"</string>
<string name="running_processes_header_used_prefix" msgid="5205762402234243007">"ବ୍ୟବହୃତ"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"ଆକ୍ସେସିବିଲିଟୀ"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"ଫିଜିକାଲ୍ କୀବୋର୍ଡ"</string>
<string name="bounce_keys" msgid="7419450970351743904">"ବାଉନ୍ସ କୀଗୁଡ଼ିକ"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"କୀବୋର୍ଡ ସମାନ କୀ ଶୀଘ୍ର ବାରମ୍ବାର ଦବାଇବାକୁ ଅଣଦେଖା କରେ"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"ବାଉନ୍ସ କୀ ଥ୍ରେସହୋଲ୍ଡ"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ଆପଣଙ୍କ କୀବୋର୍ଡ ବାରମ୍ବାର କୀ ଦବାଇବାକୁ ଅଣଦେଖା କରୁଥିବା ସମୟ ଅବଧି ବାଛନ୍ତୁ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2ସେ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4ସେ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6ସେ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"କଷ୍ଟମ"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"କଷ୍ଟମ ମୂଲ୍ୟ"</string>
<string name="slow_keys" msgid="2891452895499690837">"ଶ୍ଲୋ କୀଗୁଡ଼ିକ"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"ସକ୍ରିୟ କରିବାକୁ ଏକ କୀ ଦବାଇବା ପାଇଁ ଲାଗୁଥିବା ସମୟକୁ ଏହା ଆଡଜଷ୍ଟ କରେ"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ଷ୍ଟିକି କୀଗୁଡ଼ିକ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ଏକାଠି କୀଗୁଡ଼ିକୁ ଦବାଇ ଧରିବା ପରିବର୍ତ୍ତେ ସର୍ଟକର୍ଟଗୁଡ଼ିକ ପାଇଁ ଥରକେ ଗୋଟିଏ କୀ ଦବାନ୍ତୁ"</string>
<string name="mouse_keys" msgid="6237254627808525540">"ମାଉସ କୀଗୁଡ଼ିକ"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"ପଏଣ୍ଟରକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଆପଣଙ୍କ କୀବୋର୍ଡକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"ମାଉସ ରିଭର୍ସ ସ୍କ୍ରୋଲିଂ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"ପୃଷ୍ଠାକୁ ତଳକୁ ମୁଭ କରିବା ପାଇଁ ଉପରକୁ ସ୍କ୍ରୋଲ କରନ୍ତୁ"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ବାମ ଏବଂ ଡାହାଣ ବଟନକୁ ସ୍ୱାପ କରନ୍ତୁ"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ମାଉସର ବାମ ବଟନକୁ ଆପଣଙ୍କ ଡାହାଣ ବଟନ ଭାବେ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"କୀବୋର୍ଡ଼ ସର୍ଟକଟଗୁଡ଼ିକ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ସର୍ଟକଟଗୁଡ଼ିକର ତାଲିକା ଦେଖାନ୍ତୁ"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> ପାଇଁ ଏକ ନୂଆ କୀ ବାଛନ୍ତୁ:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ଫିଜିକାଲ କୀବୋର୍ଡ ଆକ୍ସେସିବିଲିଟୀ"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ଷ୍ଟିକି କୀ, ବାଉନ୍ସ କୀ, ମାଉସ କୀ"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"କୀଗୁଡ଼ିକୁ ରିପିଟ କରନ୍ତୁ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ରିପିଟ ପୂର୍ବରୁ ହେବା ବିଳମ୍ବ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ରିପିଟ ରେଟ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"କୀ ରିଲିଜ ନହେବା ପର୍ଯ୍ୟନ୍ତ ଏହାର କେରେକ୍ଟରକୁ ରିପିଟ କରିବା ପାଇଁ ଗୋଟିଏ କୀ\'କୁ ଦବାଇ ଧରନ୍ତୁ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> ଲେଆଉଟ"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ସ୍ୱତଃ: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2225,7 +2243,7 @@
<string name="accessibility_tutorial_dialog_button" msgid="2031773187678948436">"ବୁଝିଗଲି"</string>
<string name="accessibility_tutorial_dialog_link_button" msgid="13364319079385020">"ବଟନକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ"</string>
<string name="accessibility_tutorial_dialog_configure_software_shortcut_type" msgid="8041105223988170653">"ଅଧିକ ବିକଳ୍ପ"</string>
- <string name="accessibility_shortcut_title" msgid="8125867833704517463">"<xliff:g id="SERVICE">%1$s</xliff:g> ସର୍ଟକଟ୍"</string>
+ <string name="accessibility_shortcut_title" msgid="8125867833704517463">"<xliff:g id="SERVICE">%1$s</xliff:g> ସର୍ଟକଟ"</string>
<string name="accessibility_shortcut_edit_summary_software" msgid="48978719406821294">"ଆକ୍ସେସିବିଲିଟୀ ବଟନ"</string>
<string name="accessibility_shortcut_edit_summary_software_gesture" msgid="7346399253904683940">"ଆକ୍ସେସିବିଲିଟୀ ଜେଶ୍ଚର୍"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"2 ଆଙ୍ଗୁଠି ସାହାଯ୍ୟରେ ଉପରକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ପ୍ରିଭ୍ୟୁ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ଷ୍ଟାଣ୍ଡାର୍ଡ ବିକଳ୍ପଗୁଡ଼ିକ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ଭାଷା"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"କେପ୍ସନ ସାଇଜ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"କ୍ୟାପସନ୍ ଷ୍ଟାଇଲ୍"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"କଷ୍ଟମ୍ ବିକଳ୍ପଗୁଡିକ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"ପୃଷ୍ଠପଟ ରଙ୍ଗ"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ପାୱାର୍ ବ୍ୟବହାର ଆଡ୍ଜଷ୍ଟ କରନ୍ତୁ"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ଅନ୍ତର୍ଭୁକ୍ତ ଥିବା ପ୍ୟାକେଜ୍ଗୁଡିକ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ଆପ୍ସ ଠିକ୍ ଭାବେ ଚାଲୁଛି"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ବ୍ୟାଟେରୀ ସ୍ତର କମ୍ ଅଛି"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ବ୍ୟାଟେରୀ ଲାଇଫକୁ ବଢ଼ାଇବା ପାଇଁ ବ୍ୟାଟେରୀ ସେଭରକୁ ଚାଲୁ କରନ୍ତୁ"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ବ୍ୟାଟେରୀ ଲାଇଫକୁ ଉନ୍ନତ କରନ୍ତୁ"</string>
@@ -2776,7 +2797,7 @@
<string name="cellular_security_summary" msgid="1893770670709928113">"ନେଟୱାର୍କ ପ୍ରକାର, ଏନକ୍ରିପସନ, ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣଗୁଡ଼ିକ"</string>
<string name="cellular_security_top_intro" msgid="6749166804080092892">"ଏହି ସେଟିଂସ ଆପଣଙ୍କ କଲ, ମେସେଜ ଏବଂ ଡାଟାକୁ ପୁରୁଣା କିମ୍ୱା ଏନକ୍ରିପ୍ଟ କରାଯାଇନଥିବା ନେଟୱାର୍କରୁ ସୁରକ୍ଷିତ ରଖିବାରେ ସାହାଯ୍ୟ କରେ ଯାହା ଆପଣଙ୍କ ପାଇଁ ଡାଟା ଚୋରି କିମ୍ୱା ସର୍ଭେଲାନ୍ସ ବିପଦ ସୃଷ୍ଟି କରିପାରେ"</string>
<string name="cellular_security_settings_title" msgid="7779141923670352595">"ମୋବାଇଲ ନେଟୱାର୍କ ସୁରକ୍ଷା"</string>
- <string name="cellular_security_notifications" msgid="4619728340612184944">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ"</string>
+ <string name="cellular_security_notifications" msgid="4619728340612184944">"ବିଜ୍ଞପ୍ତି"</string>
<string name="cellular_security_notifications_controller_title" msgid="4853056963523277847">"ନେଟୱାର୍କ ବିଜ୍ଞପ୍ତି"</string>
<string name="cellular_security_notifications_controller_summary" msgid="8339863845393759958">"ଆପଣଙ୍କ ଡିଭାଇସ ଏକ ଏନକ୍ରିପ୍ଟ କରାଯାଇନଥିବା ନେଟୱାର୍କ ସହ କନେକ୍ଟ ହେଲେ କିମ୍ବା ଏକ ନେଟୱାର୍କ ଆପଣଙ୍କ ସ୍ୱତନ୍ତ୍ର ଡିଭାଇସ ବା SIM ID ରେକର୍ଡ କରିବା ସମୟରେ ସୂଚନା ପାଆନ୍ତୁ"</string>
<string name="cellular_security_settings_encryption_title" msgid="4013084091666375780">"ଏନକ୍ରିପସନ"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ଏହି VPNକୁ ବିଚ୍ଛିନ୍ନ କରିବେ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ଡିସକନେକ୍ଟ କରନ୍ତୁ"</string>
<string name="vpn_version" msgid="6344167191984400976">"ସଂସ୍କରଣ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ଭର୍ସନ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPNକୁ ଭୁଲିଯାଅ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ପୂର୍ବରୁ ଥିବା VPNକୁ ବଦଳାଇବେ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ସର୍ବଦା-ଅନ୍ ଥିବା VPN ସେଟ୍ କରିବେ?"</string>
@@ -3018,7 +3040,7 @@
<string name="vpn_disconnected" msgid="7694522069957717501">"VPN ରୁ ବିଚ୍ଛିନ୍ନ ହେଲା"</string>
<string name="vpn_disconnected_summary" msgid="721699709491697712">"କୌଣସିଟି ନୁହେଁ"</string>
<string name="vpn_missing_cert" msgid="5397309964971068272">"ଗୋଟିଏ ସର୍ଟିଫିକେଟ୍ ନାହିଁ। ପ୍ରୋଫାଇଲ୍ ଏଡିଟ୍ କରନ୍ତୁ।"</string>
- <string name="trusted_credentials_system_tab" msgid="675362923690364722">"ସିଷ୍ଟମ୍"</string>
+ <string name="trusted_credentials_system_tab" msgid="675362923690364722">"ସିଷ୍ଟମ"</string>
<string name="trusted_credentials_user_tab" msgid="4978365619630094339">"ୟୁଜର"</string>
<string name="trusted_credentials_disable_label" msgid="6649583220519447947">"ଅକ୍ଷମ କରନ୍ତୁ"</string>
<string name="trusted_credentials_enable_label" msgid="5551204878588237991">"ସକ୍ଷମ"</string>
@@ -3104,7 +3126,7 @@
<string name="apps_with_restrictions_settings_button" msgid="2648355133416902221">"ଆପ୍ଲିକେସନ ପାଇଁ ସେଟିଂସକୁ ବିସ୍ତାର କରନ୍ତୁ"</string>
<string name="user_choose_copy_apps_to_another_user" msgid="5914037067347012870">"ଇନଷ୍ଟଲ୍ କରିବା ପାଇଁ ଆପଗୁଡ଼ିକୁ ବାଛନ୍ତୁ"</string>
<string name="user_copy_apps_menu_title" msgid="5354300105759670300">"ଉପଲବ୍ଧ ଥିବା ଆପଗୁଡ଼ିକୁ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
- <string name="nfc_payment_settings_title" msgid="2043139180030485500">"କଣ୍ଟାକ୍ଟଲେସ ପେମେଣ୍ଟଗୁଡ଼ିକ"</string>
+ <string name="nfc_payment_settings_title" msgid="2043139180030485500">"କଣ୍ଟାକ୍ଟଲେସ ପେମେଣ୍ଟ"</string>
<string name="nfc_default_payment_settings_title" msgid="2150504446774382261">"ଡିଫଲ୍ଟ ପେମେଣ୍ଟ ଆପ"</string>
<string name="nfc_default_payment_footer" msgid="978535088340021360">"ଏକ ପେମେଣ୍ଟ ଆପ ବ୍ୟବହାର କରି କୌଣସି ପେମେଣ୍ଟ କରିବାକୁ, ଏକ ପେମେଣ୍ଟ ଟର୍ମିନାଲରେ ଆପଣଙ୍କ ଡିଭାଇସର ପଛ ପଟକୁ ଧରି ରଖ"</string>
<string name="nfc_more_details" msgid="1700713533074275233">"ଅଧିକ ଜାଣନ୍ତୁ"</string>
@@ -3227,11 +3249,11 @@
<string name="connected_devices_dashboard_android_auto_no_driving_mode_summary" msgid="6426996842202276640">"ବ୍ଲୁଟୁଥ୍, Android Auto, NFC"</string>
<string name="connected_devices_dashboard_android_auto_no_nfc_no_driving_mode" msgid="1672426693308438634">"ବ୍ଲୁଟୁଥ୍, Android Auto"</string>
<string name="nfc_and_payment_settings_payment_off_nfc_off_summary" msgid="7132040463607801625">"NFC ବନ୍ଦ ଥିବାରୁ ଅନୁପଲବ୍ଧ ଅଛି"</string>
- <string name="nfc_and_payment_settings_no_payment_installed_summary" msgid="4879818114908207465">"ବ୍ୟବହାର କରିବାକୁ, ପ୍ରଥମେ ଏକ ପେମେଣ୍ଟ ଆପ୍ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
+ <string name="nfc_and_payment_settings_no_payment_installed_summary" msgid="4879818114908207465">"ବ୍ୟବହାର କରିବାକୁ, ପ୍ରଥମେ ଏକ ପେମେଣ୍ଟ ଆପ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
<string name="app_and_notification_dashboard_summary" msgid="8047683010984186106">"ବର୍ତ୍ତମାନର ଆପଗୁଡ଼ିକ, ଡିଫଲ୍ଟ ଆପଗୁଡ଼ିକ"</string>
<string name="notification_settings_work_profile" msgid="6076211850526353975">"ୱାର୍କ ପ୍ରୋଫାଇଲ୍ରେ ଆପ୍ସ ପାଇଁ ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ ଉପଲବ୍ଧ ନାହିଁ."</string>
<string name="account_dashboard_title" msgid="8228773251948253914">"ପାସୱାର୍ଡ ଏବଂ ଆକାଉଣ୍ଟଗୁଡ଼ିକ"</string>
- <string name="account_dashboard_default_summary" msgid="7976899924144356939">"ସାଇନ-ଇନ ଏବଂ ଅଟୋଫିଲ ପାଇଁ ପରାମର୍ଶଗୁଡ଼ିକ"</string>
+ <string name="account_dashboard_default_summary" msgid="7976899924144356939">"ସାଇନ-ଇନ ଏବଂ ଅଟୋଫିଲ ପାଇଁ ପରାମର୍ଶ"</string>
<string name="app_default_dashboard_title" msgid="4071015747629103216">"ଡିଫଲ୍ଟ ଆପ୍"</string>
<string name="cloned_apps_dashboard_title" msgid="5542076801222950921">"କ୍ଲୋନ ହୋଇଥିବା ଆପ୍ସ"</string>
<string name="desc_cloned_apps_intro_text" msgid="1369621522882622476">"କୌଣସି ଆପର ଏକ ଦ୍ୱିତୀୟ ଇନଷ୍ଟାନ୍ସ ତିଆରି କରନ୍ତୁ, ଯାହା ଫଳରେ ଆପଣ ଏକା ସମୟରେ ଦୁଇଟି ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରିପାରିବେ।"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 AM - 5 PM କାର୍ଯ୍ୟ ଦିବସଗୁଡ଼ିକ\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"କେଲେଣ୍ଡର ଇଭେଣ୍ଟଗୁଡ଼ିକ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ସକ୍ରିୟ ଅଛି}=2{{mode_1} ଏବଂ {mode_2} ସକ୍ରିୟ ଅଛି}=3{{mode_1}, {mode_2} ଏବଂ {mode_3} ସକ୍ରିୟ ଅଛି}other{{mode_1}, {mode_2} ଏବଂ # ଅଧିକ ସକ୍ରିୟ ଅଛି}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ମୋଡ ସ୍ୱତଃ ଚାଲୁ ହୋଇପାରିବ}other{# ମୋଡ ସ୍ୱତଃ ଚାଲୁ ହୋଇପାରିବ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ଚାଲୁ ଅଛି"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"ସେଟ କରାଯାଇନାହିଁ"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ଅକ୍ଷମ କରାଯାଇଛି"</string>
@@ -3759,9 +3782,9 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"ଏହି ଆପ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ପଠାଏ ନାହିଁ"</string>
<string name="notification_channels" msgid="1502969522886493799">"ବର୍ଗ"</string>
<string name="notification_channels_other" msgid="18159805343647908">"ଅନ୍ୟ"</string>
- <string name="no_channels" msgid="4716199078612071915">"ଏହି ଆପଟି କୌଣସି ବିଜ୍ଞପ୍ତି ପୋଷ୍ଟ୍ କରିନାହିଁ"</string>
+ <string name="no_channels" msgid="4716199078612071915">"ଏହି ଆପ କୌଣସି ବିଜ୍ଞପ୍ତି ପୋଷ୍ଟ କରିନାହିଁ"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"ଅବ୍ୟବହୃତ ବର୍ଗଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
- <string name="app_settings_link" msgid="6725453466705333311">"ଆପର ଅତିରିକ୍ତ ସେଟିଂସ"</string>
+ <string name="app_settings_link" msgid="6725453466705333311">"ଆପରେ ଅତିରିକ୍ତ ସେଟିଂସ"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"ଅବ୍ୟବହୃତ ବର୍ଗଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string>
<string name="hide_unused_channels" msgid="2019739275175707170">"ଅବ୍ୟବହୃତ ବର୍ଗଗୁଡ଼ିକ ଲୁଚାନ୍ତୁ"</string>
<string name="deleted_channels" msgid="8489800381509312964">"{count,plural, =1{#ଟି ବର୍ଗକୁ ଡିଲିଟ କରାଯାଇଛି}other{#ଟି ବର୍ଗକୁ ଡିଲିଟ କରାଯାଇଛି}}"</string>
@@ -3993,12 +4016,12 @@
<string name="app_launch_open_in_app" msgid="2208182888681699512">"ଆପରେ"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"ଆପଣଙ୍କ ବ୍ରାଉଜରରେ"</string>
<string name="app_launch_top_intro_message" msgid="9037324384325518290">"ଏହି ଆପ ପାଇଁ ୱେବ ଲିଙ୍କଗୁଡ଼ିକୁ କିପରି ଖୋଲିବେ, ତାହା ବାଛନ୍ତୁ"</string>
- <string name="app_launch_links_category" msgid="2380467163878760037">"ଏହି ଆପରେ ଖୋଲିବା ପାଇଁ ଲିଙ୍କଗୁଡ଼ିକ"</string>
+ <string name="app_launch_links_category" msgid="2380467163878760037">"ଏହି ଆପରେ ଖୋଲିବା ପାଇଁ ଲିଙ୍କ"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"ସପୋର୍ଟ କରୁଥିବା ଲିଙ୍କଗୁଡ଼ିକ"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"ଅନ୍ୟ ଡିଫଲ୍ଟ ପସନ୍ଦଗୁଡ଼ିକ"</string>
<string name="app_launch_add_link" msgid="8622558044530305811">"ଲିଙ୍କ ଯୋଗ କରନ୍ତୁ"</string>
- <string name="app_launch_footer" msgid="4521865035105622557">"ଆପରେ ଲିଙ୍କଗୁଡ଼ିକ ସ୍ୱଚାଳିତ ଭାବରେ ଖୋଲିବା ପାଇଁ ଆପଟି ସେଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ।"</string>
- <string name="app_launch_verified_links_title" msgid="621908751569155356">"{count,plural, =1{#ଟି ଯାଞ୍ଚ କରାଯାଇଥିବା ଲିଙ୍କ}other{#ଟି ଯାଞ୍ଚ କରାଯାଇଥିବା ଲିଙ୍କ}}"</string>
+ <string name="app_launch_footer" msgid="4521865035105622557">"ଆପରେ ଲିଙ୍କଗୁଡ଼ିକ ସ୍ୱତଃ ଖୋଲିବା ପାଇଁ ଆପ ସେଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ।"</string>
+ <string name="app_launch_verified_links_title" msgid="621908751569155356">"{count,plural, =1{# ଯାଞ୍ଚ କରାଯାଇଥିବା ଲିଙ୍କ}other{# ଯାଞ୍ଚ କରାଯାଇଥିବା ଲିଙ୍କ}}"</string>
<string name="app_launch_verified_links_message" msgid="190871133877476176">"{count,plural, =1{ଏହି ଲିଙ୍କକୁ ଯାଞ୍ଚ କରାଯାଇଛି ଏବଂ ଏହା ସ୍ୱତଃ ଏହି ଆପରେ ଖୋଲେ।}other{ଏହି ଲିଙ୍କଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରାଯାଇଛି ଏବଂ ଏଗୁଡ଼ିକ ସ୍ୱତଃ ଏହି ଆପରେ ଖୋଲେ।}}"</string>
<string name="app_launch_dialog_ok" msgid="1446157681861409861">"ଠିକ ଅଛି"</string>
<string name="app_launch_verified_links_info_description" msgid="7514750232467132117">"ଯାଞ୍ଚ କରାଯାଇଥିବା ଲିଙ୍କଗୁଡ଼ିକର ତାଲିକା ଦେଖାନ୍ତୁ"</string>
@@ -4487,7 +4510,7 @@
<string name="web_action_enable_summary" msgid="2658930257777545990">"ଆପ୍ରେ ଲିଙ୍କଗୁଡ଼ିକୁ ଖୋଲନ୍ତୁ; ସେଗୁଡ଼ିକ ଇନ୍ଷ୍ଟଲ୍ ନ ହୋଇଥିଲେ ମଧ୍ୟ"</string>
<string name="web_action_section_title" msgid="994717569424234098">"ଇନଷ୍ଟାଣ୍ଟ୍ ଆପ୍ସ"</string>
<string name="instant_apps_settings" msgid="4280942494969957858">"ଇନ୍ଷ୍ଟାଣ୍ଟ ଆପ୍ ପସନ୍ଦ"</string>
- <string name="domain_url_section_title" msgid="9028890472923474958">"ଇନ୍ଷ୍ଟଲ୍ ହୋଇଥିବା ଆପ୍ଗୁଡ଼ିକ"</string>
+ <string name="domain_url_section_title" msgid="9028890472923474958">"ଇନଷ୍ଟଲ ହୋଇଥିବା ଆପ"</string>
<string name="automatic_storage_manager_activation_warning" msgid="170508173207142665">"ଆପଣଙ୍କ ଷ୍ଟୋରେଜ୍ ଏବେ, ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍ ଦ୍ୱାରା ପରିଚାଳିତ ହେଉଛି"</string>
<string name="account_for_section_header" msgid="7466759342105251096">"<xliff:g id="USER_NAME">%1$s</xliff:g> ପାଇଁ ଆକାଉଣ୍ଟ"</string>
<string name="auto_sync_account_title" msgid="1070908045600374254">"ଆପ ଡାଟାକୁ ସ୍ଵତଃ ସିଙ୍କ କରନ୍ତୁ"</string>
@@ -5178,7 +5201,7 @@
<string name="app_info_all_services_label" msgid="1487070364839071105">"ସମସ୍ତ ସେବା"</string>
<string name="show_clip_access_notification" msgid="7782300987639778542">"କ୍ଲିପବୋର୍ଡ ଆକ୍ସେସ୍ ଦେଖାନ୍ତୁ"</string>
<string name="show_clip_access_notification_summary" msgid="474090757777203207">"ଯେତେବେଳେ ଆପଣ କପି କରିଥିବା ଟେକ୍ସଟ୍, ଛବି କିମ୍ବା ଅନ୍ୟ ବିଷୟବସ୍ତୁକୁ ଆପଗୁଡ଼ିକ ଆକ୍ସେସ୍ କରେ, ସେତେବେଳେ ଏକ ମେସେଜ୍ ଦେଖାନ୍ତୁ"</string>
- <string name="all_apps" msgid="3054120149509114789">"ସବୁ ଆପ୍"</string>
+ <string name="all_apps" msgid="3054120149509114789">"ସବୁ ଆପ"</string>
<string name="request_manage_bluetooth_permission_dont_allow" msgid="8798061333407581300">"ଅନୁମତି ଦିଅନ୍ତୁ ନାହିଁ"</string>
<string name="uwb_settings_title" msgid="8578498712312002231">"Ultra-Wideband (UWB)"</string>
<string name="uwb_settings_summary" msgid="3074271396764672268">"ଆଖପାଖରେ UWB ଥିବା ଡିଭାଇସଗୁଡ଼ିକର ଆପେକ୍ଷିକ ଅବସ୍ଥିତି ଚିହ୍ନଟ କରିବାରେ ସାହାଯ୍ୟ କରେ"</string>
@@ -5463,13 +5486,13 @@
<string name="homepage_search" msgid="6759334912284663559">"ସର୍ଚ୍ଚ ସେଟିଂସ"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"କଣ୍ଟାକ୍ଟ, ଷ୍ଟୋରେଜ, ଆକାଉଣ୍ଟ"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"କଣ୍ଟାକ୍ଟ ଷ୍ଟୋରେଜ"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"କୌଣସି ଡିଫଲ୍ଟ ଆକାଉଣ୍ଟ ସେଟ କରାଯାଇନାହିଁ"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"କେବଳ ଡିଭାଇସ"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"ଏକ ଆକାଉଣ୍ଟ ସହ ନୂଆ କଣ୍ଟାକ୍ଟଗୁଡ଼ିକ ସିଙ୍କ ହେବ ନାହିଁ"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"କଣ୍ଟାକ୍ଟଗୁଡ଼ିକ ଆପଣଙ୍କ ଡିଭାଇସରେ ସେଭ ହେବ ଏବଂ ଡିଫଲ୍ଟ ଭାବେ ଆପଣଙ୍କ ଆକାଉଣ୍ଟରେ ସିଙ୍କ ହେବ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ଡିଫଲ୍ଟ ଆକାଉଣ୍ଟ ସେଟିଂରେ ତ୍ରୁଟି"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"କୌଣସି ଡିଫଲ୍ଟ ଆକାଉଣ୍ଟ ସେଟ କରାଯାଇନାହିଁ"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"କେବଳ ଡିଭାଇସ"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ଆରମ୍ଭ କରିବାକୁ ଏକ ଆକାଉଣ୍ଟ ଯୋଗ କରନ୍ତୁ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ସର୍ଚ୍ଚ କରିବାକୁ ସର୍କଲ କରନ୍ତୁ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ଆପଣଙ୍କ ସ୍କ୍ରିନରେ ଥିବା ବିଷୟବସ୍ତୁକୁ ବ୍ୟବହାର କରି ସର୍ଚ୍ଚ କରିବା ପାଇଁ ହୋମ ବଟନ କିମ୍ବା ନାଭିଗେସନ ହେଣ୍ଡେଲକୁ ସ୍ପର୍ଶ କରି ଧରି ରଖନ୍ତୁ।"</string>
</resources>
diff --git a/res/values-pa/arrays.xml b/res/values-pa/arrays.xml
index 3b40ab4..26664a4 100644
--- a/res/values-pa/arrays.xml
+++ b/res/values-pa/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ਸਨੋਫਲੇਕ"</item>
<item msgid="7952183800501346803">"ਬੀਚ ਵਾਲੀ ਛੱਤਰੀ"</item>
<item msgid="799139025758265891">"ਵਰਕਸ਼ਾਪ ਦੇ ਔਜ਼ਾਰ"</item>
- <item msgid="1330084588359129896">"ਤੰਬੂ"</item>
+ <item msgid="8112685757657659269">"ਪਿਆਨੋ"</item>
<item msgid="3861584909935022342">"ਫ਼ਿਲਮ ਰੀਲ"</item>
<item msgid="5827426100157335512">"ਬੁੱਕ ਕਰੋ"</item>
<item msgid="8585828346253128384">"ਕਮਲ ਦਾ ਫੁੱਲ"</item>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 21cfb97..970575d 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audio ਨੂੰ ਬੰਦ ਕਰੋ"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ਡੀਵਾਈਸ ਵੱਲੋਂ LE ਆਡੀਓ ਹਾਰਡਵੇਅਰ ਸਮਰੱਥਾਵਾਂ ਦਾ ਸਮਰਥਨ ਕਰਨ \'ਤੇ Bluetooth LE Audio ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਬੰਦ ਕਰਦਾ ਹੈ।"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio ਮੋਡ"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"ਡੀਵਾਈਸ ਵੇਰਵਿਆਂ ਵਿੱਚ LE ਆਡੀਓ ਟੌਗਲ ਦਿਖਾਓ"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ਬਲੂਟੁੱਥ LE ਆਡੀਓ ਪ੍ਰਵਾਨਿਤ ਸੂਚੀ ਨੂੰ ਬਾਈਪਾਸ ਕਰੋ"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE ਆਡੀਓ ਨੂੰ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਤੌਰ \'ਤੇ ਵਰਤੋ, ਭਾਵੇਂ LE ਆਡੀਓ ਪੈਰੀਫੈਰਲ ਦੀ ਆਗਿਆ ਸੂਚੀ ਦੇ ਮਾਪਦੰਡਾਂ ਨੂੰ ਪੂਰਾ ਕਰਨ ਲਈ ਪ੍ਰਮਾਣਿਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ਨੈੱਟਵਰਕ ਅਤੇ ਵਾਇਰਲੈੱਸ ਸਿਗਨਲਾਂ ਵਰਤ ਕੇ ਤਾਰੀਖ ਅਤੇ ਸਮਾਂ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਸੈੱਟ ਹੋਣ ਦੀ ਸੁਵਿਧਾ ਪਾਓ"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ਸਮਾਂ ਖੇਤਰ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਸੈੱਟ ਹੋਣ ਦੀ ਸੁਵਿਧਾ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ਆਪਣੇ ਨੇੜੇ-ਤੇੜੇ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕਾਂ ਦੇ ਆਧਾਰ \'ਤੇ ਤਾਰੀਖ ਅਤੇ ਸਮਾਂ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਸੈੱਟ ਹੋਣ ਦੀ ਸੁਵਿਧਾ ਪਾਓ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ਡੀਵਾਈਸ ਟਿਕਾਣੇ ਦੇ ਮੁਤਾਬਕ ਸਮਾਂ ਅਤੇ ਤਾਰੀਖ ਖੁਦ ਸੈੱਟ ਹੋਣ ਦੀ ਸੁਵਿਧਾ ਪਾਓ। ਵਾਈ-ਫਾਈ ਕਨੈਕਸ਼ਨ ਦੀ ਲੋੜ ਪੈ ਸਕਦੀ ਹੈ।"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ਡੀਵਾਈਸ ਟਿਕਾਣੇ ਦੇ ਮੁਤਾਬਕ ਸਮਾਂ ਅਤੇ ਤਾਰੀਖ ਖੁਦ ਸੈੱਟ ਹੋਣ ਦੀ ਸੁਵਿਧਾ ਪਾਓ"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਸਥਾਨਕ ਸਮਾਂ ਵਰਤੋ"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-ਘੰਟੇ ਵਾਲਾ ਫਾਰਮੈਟ ਵਰਤੋ"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"ਸਮਾਂ"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"ਪਰਦੇਦਾਰੀ"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ"</string>
<string name="private_space_title" msgid="1752064212078238723">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"ਨਿੱਜੀ ਐਪਾਂ ਨੂੰ ਲਾਕ ਕਰ ਕੇ ਅਦਿੱਖ ਰੱਖੋ"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"ਪ੍ਰਾਈਵੇਟ ਐਪਾਂ ਨੂੰ ਲਾਕ ਅਤੇ ਅਦਿੱਖ ਰੱਖੋ"</string>
<string name="private_space_description" msgid="4059594203775816136">"ਪ੍ਰਾਈਵੇਟ ਐਪਾਂ ਨੂੰ ਵੱਖਰੀ ਸਪੇਸ ਵਿੱਚ ਰੱਖੋ, ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਲੁਕਾ ਜਾਂ ਲਾਕ ਕਰ ਸਕੋ"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਲਾਕ"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"ਤੁਸੀਂ ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਨੂੰ ਉਸੇ ਤਰੀਕੇ ਨਾਲ ਅਣਲਾਕ ਕਰ ਸਕਦੇ ਹੋ ਜਿਸ ਤਰ੍ਹਾਂ ਤੁਸੀਂ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਅਣਲਾਕ ਕਰਦੇ ਹੋ ਜਾਂ ਕੋਈ ਵੱਖਰਾ ਲਾਕ ਚੁਣੋ"</string>
@@ -593,7 +597,7 @@
<string name="private_space_auto_lock_every_time" msgid="1215061855836002830">"ਹਰ ਵਾਰ ਡੀਵਾਈਸ ਦੇ ਲਾਕ ਹੋਣ \'ਤੇ"</string>
<string name="private_space_auto_lock_after_inactivity" msgid="7107814517866649733">"ਸਕ੍ਰੀਨ ਸਮਾਂ ਸਮਾਪਤ ਦੇ 5 ਮਿੰਟ ਬਾਅਦ"</string>
<string name="private_space_auto_lock_after_device_restart" msgid="288755768725895029">"ਸਿਰਫ਼ ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ \'ਤੇ"</string>
- <string name="private_space_hide_page_title" msgid="3364639176511877414">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਲੁਕਾਉਣਾ"</string>
+ <string name="private_space_hide_page_title" msgid="3364639176511877414">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਲੁਕਾਓ"</string>
<string name="private_space_hide_when_locked" msgid="6219472348124151797">"ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਲਾਕ ਹੋਣ \'ਤੇ ਇਸਨੂੰ ਲੁਕਾਉਣਾ"</string>
<string name="private_space_hide_page_summary" msgid="6247773353685839242">"ਹੋਰ ਲੋਕਾਂ ਤੋਂ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਦੀ ਮੌਜੂਦਗੀ ਨੂੰ ਲੁਕਾਉਣ ਲਈ, ਤੁਸੀਂ ਇਸਨੂੰ ਆਪਣੀ ਐਪ ਸੂਚੀ ਤੋਂ ਲੁਕਾ ਸਕਦੇ ਹੋ"</string>
<string name="private_space_access_header" msgid="1077082416567150819">"ਲੁਕੀ ਹੋਈ ਹੋਣ \'ਤੇ ਪ੍ਰਾਈਵੇਟ ਸਪੇਸ ਤੱਕ ਪਹੁੰਚ ਕਰੋ"</string>
@@ -711,7 +715,7 @@
<string name="face_unlock_set_unlock_pin" msgid="9034912683791069602">"ਪਿੰਨ • ਚਿਹਰਾ"</string>
<string name="face_unlock_set_unlock_password" msgid="5874950853246424756">"ਪਾਸਵਰਡ • ਚਿਹਰਾ"</string>
<string name="face_unlock_skip_face" msgid="189695556498300008">"ਫ਼ੇਸ ਅਣਲਾਕ ਤੋਂ ਬਿਨਾਂ ਜਾਰੀ ਰੱਖੋ"</string>
- <string name="biometrics_unlock_skip_biometrics" msgid="7399882488272450182">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਜਾਂ ਚਿਹਰਾ ਅਣਲਾਕ ਦੇ ਬਿਨਾਂ ਜਾਰੀ ਰੱਖੋ"</string>
+ <string name="biometrics_unlock_skip_biometrics" msgid="7399882488272450182">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਜਾਂ ਫ਼ੇਸ ਅਣਲਾਕ ਦੇ ਬਿਨਾਂ ਜਾਰੀ ਰੱਖੋ"</string>
<string name="unlock_set_unlock_mode_off" msgid="4632139864722236359">"ਕੋਈ ਨਹੀਂ"</string>
<string name="unlock_set_unlock_mode_none" msgid="5596049938457028214">"ਸਵਾਈਪ ਕਰੋ"</string>
<string name="unlock_set_unlock_mode_pattern" msgid="1926480143883094896">"ਪੈਟਰਨ"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"ਵਾਰ-ਵਾਰ ਇੱਕੋ ਕੁੰਜੀ ਨੂੰ ਦਬਾਉਂਦੇ ਰਹਿਣ \'ਤੇ ਕੀ-ਬੋਰਡ ਉਸਨੂੰ ਅਣਡਿੱਠ ਕਰ ਦਿੰਦਾ ਹੈ"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"ਬਾਊਂਸ-ਕੀ ਦੀ ਨਿਊਨਤਮ ਸੀਮਾ"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ਚੁਣੋ ਕਿ ਕਿਸੇ ਕੁੰਜੀ ਨੂੰ ਕਿੰਨੀ ਦੇਰ ਤੱਕ ਵਾਰ-ਵਾਰ ਦਬਾਉਣ \'ਤੇ ਕੀ-ਬੋਰਡ ਕੋਈ ਕਾਰਵਾਈ ਨਹੀਂ ਕਰੇਗਾ"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 ਸਕਿੰਟ"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 ਸਕਿੰਟ"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 ਸਕਿੰਟ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 ਸਕਿੰਟ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 ਸਕਿੰਟ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 ਸਕਿੰਟ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"ਵਿਉਂਤਬੱਧ"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ਵਿਉਂਤਬੱਧ ਮੁੱਲ"</string>
<string name="slow_keys" msgid="2891452895499690837">"ਸਲੋ ਕੁੰਜੀਆਂ"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"ਕਿਸੇ ਕੁੰਜੀ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਵਿੱਚ ਲੱਗਣ ਵਾਲੇ ਸਮੇਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਦਾ ਹੈ"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ਸਥਿਰ ਕੁੰਜੀਆਂ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ਸ਼ਾਰਟਕੱਟਾਂ ਲਈ ਕੁੰਜੀਆਂ ਨੂੰ ਇਕੱਠੇ ਦਬਾਈ ਰੱਖਣ ਦੀ ਬਜਾਏ ਇੱਕ ਵਾਰ ਵਿੱਚ ਇੱਕ ਕੁੰਜੀ ਦਬਾਓ"</string>
<string name="mouse_keys" msgid="6237254627808525540">"ਮਾਊਸ ਕੁੰਜੀਆਂ"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"ਪੁਆਇੰਟਰ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਆਪਣਾ ਕੀ-ਬੋਰਡ ਵਰਤੋ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"ਮਾਊਸ ਦੀ ਉਲਟ ਸਕ੍ਰੋਲਿੰਗ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"ਪੰਨੇ ਨੂੰ ਹੇਠਾਂ ਲਿਜਾਉਣ ਲਈ ਉੱਪਰ ਵੱਲ ਸਕ੍ਰੋਲ ਕਰੋ"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ਖੱਬੇ ਅਤੇ ਸੱਜੇ ਬਟਨਾਂ ਨੂੰ ਸਵੈਪ ਕਰੋ"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ਮਾਊਸ ਦੇ ਖੱਬੇ ਬਟਨ ਨੂੰ ਆਪਣੇ ਸੱਜੇ ਬਟਨ ਵਜੋਂ ਵਰਤੋ"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"ਕੀ-ਬੋਰਡ ਸ਼ਾਰਟਕੱਟ"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ਸ਼ਾਰਟਕੱਟਾਂ ਦੀ ਸੂਚੀ ਦਿਖਾਓ"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਕੀ-ਬੋਰਡ ਅਤੇ ਟੂਲ"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> ਲਈ ਨਵੀਂ ਕੁੰਜੀ ਚੁਣੋ:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ਭੌਤਿਕ ਕੀ-ਬੋਰਡ ਪਹੁੰਚਯੋਗਤਾ"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ਸਥਿਰ ਕੁੰਜੀਆਂ, ਬਾਊਂਸ ਕੁੰਜੀਆਂ, ਮਾਊਸ ਕੁੰਜੀਆਂ"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"ਕੁੰਜੀਆਂ ਨੂੰ ਦੁਹਰਾਓ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"ਦੁਹਰਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਦੇਰੀ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ਦੁਹਰਾਉਣ ਦੀ ਦਰ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ਕਿਸੇ ਕੁੰਜੀ ਨੂੰ ਦਬਾ ਕੇ ਰੱਖਣ \'ਤੇ, ਉਸ ਕੁੰਜੀ ਦਾ ਅੱਖਰ-ਚਿੰਨ੍ਹ ਉਦੋਂ ਤੱਕ ਦੁਹਰਾਇਆ ਜਾਵੇਗਾ, ਜਦੋਂ ਤੱਕ ਕੁੰਜੀ ਨੂੰ ਛੱਡਿਆ ਨਹੀਂ ਜਾਂਦਾ"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> ਖਾਕਾ"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ਸਵੈਚਲਿਤ: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ਪੂਰਵ-ਝਲਕ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ਮਿਆਰੀ ਚੋਣਾਂ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ਭਾਸ਼ਾ"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"ਸੁਰਖੀ ਦਾ ਆਕਾਰ"</string>
<string name="captioning_preset" msgid="4174276086501638524">"ਸੁਰਖੀ ਦੀ ਸ਼ੈਲੀ"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ਵਿਉਂਂਤੀ ਵਿਕਲਪ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"ਬੈਕਗ੍ਰਾਉਂਡ ਦਾ ਰੰਗ"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ਪਾਵਰ ਵਰਤੋਂ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ਸ਼ਾਮਲ ਕੀਤੇ ਪੈਕੇਜ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ਐਪਾਂ ਆਮ ਵਾਂਗ ਚੱਲ ਰਹੀਆਂ ਹਨ"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ਬੈਟਰੀ ਦਾ ਪੱਧਰ ਘੱਟ ਹੈ"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"ਬੈਟਰੀ ਲਾਈਫ਼ ਵਧਾਉਣ ਲਈ ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਕਰੋ"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"ਬੈਟਰੀ ਲਾਈਫ਼ ਨੂੰ ਬਿਹਤਰ ਬਣਾਓ"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ਇਹ VPN ਡਿਸਕਨੈਕਟ ਕਰੀਏ?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
<string name="vpn_version" msgid="6344167191984400976">"ਵਰਜਨ"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ਵਰਜਨ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN ਨੂੰ ਭੁੱਲ ਜਾਓ"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ਕੀ ਮੌਜੂਦਾ VPN ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ ਹੈ?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ਕੀ ਹਮੇਸ਼ਾ-ਚਾਲੂ VPN ਨੂੰ ਸੈੱਟ ਕਰਨਾ ਹੈ?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"ਕੰਮਕਾਜੀ ਦਿਨਾਂ ਨੂੰ ਸਵੇਰ 9 ਵਜੇ - ਸ਼ਾਮ 5 ਵਜੇ\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"ਕੈਲੰਡਰ ਇਵੈਂਟ"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ਕਿਰਿਆਸ਼ੀਲ ਹੈ}=2{{mode_1} ਅਤੇ {mode_2} ਕਿਰਿਆਸ਼ੀਲ ਹਨ}=3{{mode_1}, {mode_2} ਅਤੇ {mode_3} ਕਿਰਿਆਸ਼ੀਲ ਹਨ}other{{mode_1}, {mode_2}, ਅਤੇ # ਹੋਰ ਕਿਰਿਆਸ਼ੀਲ ਹਨ}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ਮੋਡ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਚਾਲੂ ਹੋ ਸਕਦਾ ਹੈ}other{# ਮੋਡ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਚਾਲੂ ਹੋ ਸਕਦੇ ਹਨ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ਚਾਲੂ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"ਸੈੱਟ ਨਹੀਂ ਹੈ"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ਬੰਦ ਹੈ"</string>
@@ -3886,7 +3917,7 @@
<string name="zen_mode_other_sounds_summary" msgid="8784400697494837032">"{count,plural,offset:2 =0{ਕੋਈ ਵੀ ਚੀਜ਼ ਵਿਘਨ ਨਹੀਂ ਪਾ ਸਕਦੀ}=1{{sound_category_1} ਕਰਕੇ ਵਿਘਨ ਪੈ ਸਕਦਾ ਹੈ}=2{{sound_category_1} ਅਤੇ {sound_category_2} ਕਰਕੇ ਵਿਘਨ ਪੈ ਸਕਦਾ ਹੈ}=3{{sound_category_1}, {sound_category_2}, ਅਤੇ{sound_category_3} ਕਰਕੇ ਵਿਘਨ ਪੈ ਸਕਦਾ ਹੈ}other{{sound_category_1}, {sound_category_2}, ਅਤੇ # ਹੋਰ ਚੀਜ਼ਾਂ ਕਰਕੇ ਵਿਘਨ ਪੈ ਸਕਦਾ ਹੈ}}"</string>
<string name="zen_mode_sounds_none" msgid="6557474361948269420">"ਕੋਈ ਵੀ ਚੀਜ਼ ਵਿਘਨ ਨਹੀਂ ਪਾ ਸਕਦੀ"</string>
<string name="zen_mode_people_none" msgid="4613147461974255046">"ਕੋਈ ਵੀ ਵਿਘਨ ਨਹੀਂ ਪਾ ਸਕਦਾ"</string>
- <string name="zen_mode_people_some" msgid="9101872681298810281">"ਕੁਝ ਲੋਕ ਵਿਘਨ ਪਾ ਸਕਦੇ ਹਨ"</string>
+ <string name="zen_mode_people_some" msgid="9101872681298810281">"ਕੁਝ ਲੋਕ ਰੁਕਾਵਟ ਪੈਦਾ ਕਰ ਸਕਦੇ ਹਨ"</string>
<string name="zen_mode_people_repeat_callers" msgid="4499084111069828761">"ਵਾਰ-ਵਾਰ ਕਾਲ ਕਰਨ ਵਾਲਿਆਂ ਕਰਕੇ ਰੁਕਾਵਟ ਪੈ ਸਕਦੀ ਹੈ"</string>
<string name="zen_mode_people_all" msgid="311036110283015205">"ਸਾਰੇ ਲੋਕ ਵਿਘਨ ਪਾ ਸਕਦੇ ਹਨ"</string>
<string name="zen_mode_repeat_callers" msgid="2270356100287792138">"ਦੁਬਾਰਾ ਕਾਲ ਕਰਨ ਵਾਲੇ"</string>
@@ -5172,7 +5203,7 @@
<string name="all_apps" msgid="3054120149509114789">"ਸਾਰੀਆਂ ਐਪਾਂ"</string>
<string name="request_manage_bluetooth_permission_dont_allow" msgid="8798061333407581300">"ਇਜਾਜ਼ਤ ਨਾ ਦਿਓ"</string>
<string name="uwb_settings_title" msgid="8578498712312002231">"ਅਲਟ੍ਰਾ-ਵਾਈਡਬੈਂਡ (UWB)"</string>
- <string name="uwb_settings_summary" msgid="3074271396764672268">"ਉਨ੍ਹਾਂ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ ਦੀ ਸੰਬੰਧਿਤ ਸਥਿਤੀ ਦੀ ਪਛਾਣ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ ਜਿੰਨ੍ਹਾਂ ਕੋਲ UWB ਹੈ"</string>
+ <string name="uwb_settings_summary" msgid="3074271396764672268">"ਉਨ੍ਹਾਂ ਨਜ਼ਦੀਕੀ ਡੀਵਾਈਸਾਂ ਦੀ ਸੰਬੰਧਿਤ ਸਥਿਤੀ ਦੀ ਪਛਾਣ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਜਿਨ੍ਹਾਂ ਕੋਲ UWB ਹੈ"</string>
<string name="uwb_settings_summary_airplane_mode" msgid="1328864888135086484">"UWB ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ ਬੰਦ ਕਰੋ"</string>
<string name="uwb_settings_summary_no_uwb_regulatory" msgid="3465456428217979428">"ਮੌਜੂਦਾ ਟਿਕਾਣੇ \'ਤੇ UWB ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
<string name="thread_network_settings_title" msgid="4212301030523859220">"Thread"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"ਸਿਰਫ਼ ਡੀਵਾਈਸ"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"ਨਵੇਂ ਸੰਪਰਕਾਂ ਨੂੰ ਕਿਸੇ ਖਾਤੇ ਨਾਲ ਸਿੰਕ ਨਹੀਂ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"ਸੰਪਰਕਾਂ ਨੂੰ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਤੌਰ \'ਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ \'ਤੇ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਵੇਗਾ ਅਤੇ ਤੁਹਾਡੇ ਖਾਤੇ ਨਾਲ ਸਿੰਕ ਕੀਤਾ ਜਾਵੇਗਾ"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ਕੁਝ ਵੀ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਜੋਂ ਸੈੱਟ ਨਹੀਂ ਹੈ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਖਾਤਾ ਸੈੱਟ ਕਰਨ ਵਿੱਚ ਗੜਬੜ ਹੋਈ"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ਕੁਝ ਵੀ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਵਜੋਂ ਸੈੱਟ ਨਹੀਂ ਹੈ"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"ਸਿਰਫ਼ ਡੀਵਾਈਸ"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ਸ਼ੁਰੂਆਤ ਕਰਨ ਲਈ ਕੋਈ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"ਖੋਜਣ ਲਈ ਚੱਕਰ ਬਣਾਓ"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ਆਪਣੀ ਸਕ੍ਰੀਨ \'ਤੇ ਮੌਜੂਦ ਸਮੱਗਰੀ ਦੀ ਵਰਤੋਂ ਕਰ ਕੇ ਖੋਜਣ ਲਈ ਹੋਮ ਬਟਨ ਨੈਵੀਗੇਸ਼ਨ ਹੈਂਡਲ ਨੂੰ ਸਪਰਸ਼ ਕਰ ਕੇ ਰੱਖੋ।"</string>
</resources>
diff --git a/res/values-pl/arrays.xml b/res/values-pl/arrays.xml
index b2634cd..cdb1ce5 100644
--- a/res/values-pl/arrays.xml
+++ b/res/values-pl/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Płatek śniegu"</item>
<item msgid="7952183800501346803">"Parasol plażowy"</item>
<item msgid="799139025758265891">"Narzędzia warsztatowe"</item>
- <item msgid="1330084588359129896">"Namiot"</item>
+ <item msgid="8112685757657659269">"Fortepian"</item>
<item msgid="3861584909935022342">"Klatka filmowa"</item>
<item msgid="5827426100157335512">"Książka"</item>
<item msgid="8585828346253128384">"Kwiat lotosu"</item>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 92057eb..14872d4 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Wyłącz Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Wyłącza funkcję Bluetooth LE Audio, jeśli urządzenie obsługuje sprzętowe funkcje LE Audio"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Tryb Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Pokazuj przełącznik LE Audio w Szczegółach urządzenia"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omijaj listę dozwolonych Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Używaj domyślnie technologii LE Audio, nawet jeśli urządzenie peryferyjne LE Audio nie zostało zweryfikowane jako spełniające kryteria listy dozwolonych"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Ustaw automatycznie za pomocą sygnałów bezprzewodowych i sieci"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatyczna strefa czasowa"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Ustaw automatycznie na podstawie pobliskich sieci komórkowych"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Ustaw automatycznie według lokalizacji, jeśli jest dostępna. Może być też wymagane aktywne Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Ustaw automatycznie według lokalizacji, jeśli jest dostępna"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Używaj ustawień domyślnych dla regionu"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Format 24-godzinny"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Godzina"</string>
@@ -585,7 +589,7 @@
<string name="private_space_face_settings_footer" msgid="7722256209563543711">"Używaj rozpoznawania twarzy do odblokowywania przestrzeni prywatnej.\n\nPamiętaj:\nMożesz mieć skonfigurowany tylko jeden model twarzy. Jeśli chcesz dodać inny model twarzy, usuń bieżący.\n\nPatrząc na telefon, możesz niechcący odblokować przestrzeń prywatną.\n\nMoże to także zrobić inna osoba, zbliżając urządzenie do Twojej twarzy.\n\nIstnieje też możliwość, że ktoś bardzo podobny do Ciebie (np. bliźniacze rodzeństwo) będzie w stanie odblokować Twoją przestrzeń prywatną."</string>
<string name="private_space_face_settings_require_confirmation_details" msgid="5406498664903812249">"W przypadku rozpoznawania twarzy zawsze wymagaj etapu potwierdzenia"</string>
<string name="private_space_category_ways_to_unlock" msgid="4356631225316950046">"Sposoby odblokowywania"</string>
- <string name="private_space_screen_lock_summary" msgid="394837965365561070">"Identycznie jak blokada ekranu urządzenia"</string>
+ <string name="private_space_screen_lock_summary" msgid="394837965365561070">"Identyczna jak blokada ekranu urządzenia"</string>
<string name="private_space_new_lock_title" msgid="9056139964133004094">"Wybrać nową blokadę dla przestrzeni prywatnej?"</string>
<string name="private_space_new_lock_message" msgid="3117703578905489206">"Na następnym ekranie będzie trzeba wpisać kod PIN lub hasło albo narysować wzór ustawiony na urządzeniu."</string>
<string name="private_space_auto_lock_title" msgid="8663409382910601261">"Automatyczne blokowanie przestrzeni prywatnej"</string>
@@ -628,9 +632,9 @@
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Ustaw blokadę"</b>\n"Zablokuj swoją przestrzeń, żeby inni nie mogli jej otworzyć."</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Instalowanie aplikacji"</b>\n"Zainstaluj w swojej przestrzeni aplikacje, które mają pozostać prywatne"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Pamiętaj"</string>
- <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Aplikacje przestają działać, gdy blokujesz swoją przestrzeń"</b>\n"Po zablokowaniu przestrzeni działające w niej aplikacje zostaną zatrzymane i nie będziesz otrzymywać powiadomień na ich temat"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Przestrzenie prywatne nie są odpowiednie dla aplikacji, które muszą działać w tle lub wysyłać krytyczne powiadomienia (jak np. aplikacje medyczne). Wynika to z tego, że działanie w tle i powiadomienia są wstrzymywane, gdy przestrzeń jest zablokowana.\n\nPo zablokowaniu przestrzeni prywatnej umieszczone w niej aplikacje nie będą też widoczne w menedżerze uprawnień, panelu prywatności ani innych ustawieniach.\n\nPrzestrzeni prywatnej nie można przenieść na inne urządzenie. Jeśli chcesz z niej korzystać na innym urządzeniu, musisz utworzyć nową przestrzeń.\n\nKażdy, kto połączy Twoje urządzenie z komputerem lub zainstaluje na urządzeniu szkodliwe aplikacje, będzie mógł uzyskać dostęp do Twojej przestrzeni prywatnej."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Przestrzenie prywatne nie są odpowiednie dla aplikacji, które muszą działać w tle lub wysyłać krytyczne powiadomienia (jak np. aplikacje medyczne). Wynika to z tego, że działanie w tle i powiadomienia są wstrzymywane, gdy przestrzeń jest zablokowana.\n\nPo zablokowaniu przestrzeni prywatnej umieszczone w niej aplikacje nie będą też widoczne w menedżerze uprawnień, panelu prywatności ani innych ustawieniach.\n\nPrzestrzeni prywatnej nie można przywrócić na innym urządzeniu. Jeśli chcesz z niej korzystać na innym urządzeniu, musisz utworzyć nową przestrzeń.\n\nKażdy, kto połączy Twoje urządzenie z komputerem lub zainstaluje na urządzeniu szkodliwe aplikacje, będzie mógł uzyskać dostęp do Twojej przestrzeni prywatnej."</string>
+ <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Aplikacje przestają działać, gdy blokujesz swoją przestrzeń"</b>\n"Gdy zablokujesz przestrzeń, działające w niej aplikacje zostaną zatrzymane i nie będziesz otrzymywać powiadomień z nich"</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Przestrzenie prywatne nie są odpowiednie dla aplikacji, które muszą działać w tle lub wysyłać krytyczne powiadomienia (jak np. aplikacje medyczne). Wynika to z tego, że działanie w tle i powiadomienia są wstrzymywane, gdy przestrzeń jest zablokowana.\n\nZablokowanie przestrzeni prywatnej spowoduje też, że umieszczone w niej aplikacje nie będą widoczne w menedżerze uprawnień, panelu prywatności ani innych ustawieniach.\n\nPrzestrzeni prywatnej nie można przenieść na inne urządzenie. Jeśli chcesz z niej korzystać na innym urządzeniu, musisz utworzyć nową przestrzeń.\n\nKażdy, kto połączy Twoje urządzenie z komputerem lub zainstaluje na urządzeniu szkodliwe aplikacje, będzie mógł uzyskać dostęp do Twojej przestrzeni prywatnej."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Przestrzenie prywatne nie są odpowiednie dla aplikacji, które muszą działać w tle lub wysyłać krytyczne powiadomienia (jak np. aplikacje medyczne). Wynika to z tego, że działanie w tle i powiadomienia są wstrzymywane, gdy przestrzeń jest zablokowana.\n\nZablokowanie przestrzeni prywatnej spowoduje też, że umieszczone w niej aplikacje nie będą też widoczne w menedżerze uprawnień, panelu prywatności ani innych ustawieniach.\n\nPrzestrzeni prywatnej nie można przywrócić na innym urządzeniu. Jeśli chcesz z niej korzystać na innym urządzeniu, musisz utworzyć nową przestrzeń.\n\nKażdy, kto połączy Twoje urządzenie z komputerem lub zainstaluje na urządzeniu szkodliwe aplikacje, będzie mógł uzyskać dostęp do Twojej przestrzeni prywatnej."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Więcej o przestrzeni prywatnej"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Potrwa to kilka chwil"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"Konfiguruję przestrzeń prywatną…"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Ułatwienia dostępu"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Klawiatura fizyczna"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Klawisze z filtrem powtórzeń"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Klawiatura ignoruje szybko powtarzane naciśnięcia tego samego klawisza"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Próg klawisza z filtrem powtórzeń"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Wybierz czas, przez który klawiatura ma ignorować powtarzane naciśnięcia klawiszy"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Niestandardowa"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"wartość niestandardowa"</string>
<string name="slow_keys" msgid="2891452895499690837">"Klawisze powolne"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Dostosowuje czas wymagany do aktywacji naciśnięcia klawisza"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Klawisze trwałe"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Naciśnij 1 klawisz, aby zyskać dostęp do skrótów, zamiast przytrzymywać kilka jednocześnie"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Klawisze sterowania myszą"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Używaj klawiatury do sterowania wskaźnikiem"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Odwrotne przewijanie myszą"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Przewiń w górę, aby przesunąć stronę w dół"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Zamień lewy i prawy przycisk"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Używaj lewego przycisku myszy jako prawego"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Skróty klawiszowe"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Lista skrótów"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Wybierz nowy klawisz jako <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Ułatwienia dostępu z klawiatury fizycznej"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Klawisze trwałe, Klawisze z filtrem powtórzeń, klawisze sterowania myszą"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Powtarzaj znaki klawiszy"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Opóźnienie przed powtórzeniem"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Szybkość powtarzania"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Przytrzymaj klawisz, aby powtarzać dany znak"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Układ <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Domyślny"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatyczny: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Podgląd"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opcje standardowe"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Język"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Rozmiar napisów"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Styl napisów"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opcje niestandardowe"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Kolor tła"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Dostosuj wykorzystanie energii"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Dołączone pakiety"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikacje działają normalnie"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Niski poziom naładowania baterii"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Włącz Oszczędzanie baterii, aby wydłużyć czas pracy na baterii"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Wydłuż czas pracy na baterii"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Odłączyć tę sieć VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Odłącz"</string>
<string name="vpn_version" msgid="6344167191984400976">"Wersja"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Wersja <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Zapomnij VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Zastąpić obecną sieć VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ustawić stały VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"„Od 9:00 do 17:00 w ciągu tygodnia”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Wydarzenia w kalendarzu"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Tryb {mode_1} jest aktywny}=2{Tryby {mode_1} i {mode_2} są aktywne}=3{Tryby {mode_1}, {mode_2} i {mode_3} są aktywne}few{Tryby {mode_1}, {mode_2} i # inne są aktywne}many{Tryby {mode_1}, {mode_2} i # innych są aktywne}other{Tryby {mode_1}, {mode_2} i # innego są aktywne}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 tryb może włączać się automatycznie}few{# tryby mogą włączać się automatycznie}many{# trybów może włączać się automatycznie}other{# trybu może włączać się automatycznie}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"WŁ."</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nie ustawiono"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Wyłączony"</string>
@@ -5464,13 +5487,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Ustawienia wyszukiwania"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakty, spis, konto"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Spis kontaktów"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nie ustawiono konta domyślnego"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Tylko urządzenie"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nowe kontakty nie będą synchronizowane z kontem"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakty będą domyślnie zapisywane na urządzeniu i synchronizowane z kontem"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Podczas ustawiania konta domyślnego wystąpił błąd"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nie ustawiono konta domyślnego"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Tylko urządzenie"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Na początek dodaj konto"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Zaznacz, aby wyszukać"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Aby wyszukać to, co jest widoczne na ekranie, naciśnij i przytrzymaj przycisk ekranu głównego lub uchwyt nawigacyjny."</string>
</resources>
diff --git a/res/values-pt-rBR/arrays.xml b/res/values-pt-rBR/arrays.xml
index 6822b22..35df470 100644
--- a/res/values-pt-rBR/arrays.xml
+++ b/res/values-pt-rBR/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Floco de neve"</item>
<item msgid="7952183800501346803">"Guarda-sol"</item>
<item msgid="799139025758265891">"Ferramentas"</item>
- <item msgid="1330084588359129896">"Barraca"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Rolo de filme"</item>
<item msgid="5827426100157335512">"Livro"</item>
<item msgid="8585828346253128384">"Flor de lótus"</item>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 7700159..8a1349f 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Desativar Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Desativa o recurso de Bluetooth LE Audio caso o hardware do dispositivo tenha essa opção."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modo Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Mostrar a chave do Bluetooth LE Audio nos Detalhes do dispositivo"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Ignorar lista de permissões do Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Usar o áudio de baixo consumo (LE Audio) por padrão, mesmo que o periférico dele não tenha sido verificado para atender aos critérios da lista de permissões."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Definir automaticamente usando sua rede e sinais sem fio"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuso horário automático"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Definir automaticamente com base nas redes móveis perto de você"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Definir automaticamente usando o local do dispositivo, se disponível. Também pode ser necessário ter uma conexão Wi-Fi ativa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Definir automaticamente usando o local do dispositivo, se disponível"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar o padrão do local"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Horário"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"Privacidade"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"Perfil de trabalho"</string>
<string name="private_space_title" msgid="1752064212078238723">"Espaço privado"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"Mantenha apps particulares bloqueados e ocultos"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"Mantém apps particulares bloqueados e ocultos"</string>
<string name="private_space_description" msgid="4059594203775816136">"Mantenha a privacidade de apps em um espaço separado que você pode ocultar ou bloquear"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Bloqueio do espaço privado"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Você pode desbloquear seu Espaço privado da mesma maneira que desbloqueia seu dispositivo ou escolher um bloqueio diferente"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Acessibilidade"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Teclado físico"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Teclas de filtragem"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"O teclado ignora pressionamentos rápidos e repetidos da mesma tecla"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Limite da tecla de filtragem"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Escolha por quanto tempo o teclado ignora pressionamentos repetidos"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizado"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalizado"</string>
<string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Ajusta o tempo que leva para um pressionamento de tecla ser ativado"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Teclas de aderência"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Pressione uma tecla por vez para usar atalhos em vez de manter as teclas pressionadas juntas"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Teclas do mouse"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Use o teclado para controlar o ponteiro"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Rolagem reversa do mouse"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Deslize para cima para descer na página"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Trocar os botões esquerdo e direito"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use o botão esquerdo do mouse como o direito"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Atalhos do teclado"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostrar lista de atalhos"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Escolha uma nova tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Acessibilidade do teclado físico"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas de aderência, teclas de filtragem, teclas do mouse"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repetir teclas"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Atraso antes da repetição"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Taxa de repetição"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pressione e segure uma tecla para repetir o caractere dela até que seja liberada"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Layout do <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Padrão"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automático: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2217,7 +2235,7 @@
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction" msgid="1007756360115974649">"Para iniciar ou interromper a ampliação, toque duas vezes rapidamente com %1$d dedos na tela"</string>
<string name="accessibility_tutorial_dialog_message_quick_setting" msgid="3715446725334547432">"{count,plural, =1{Para usar esse recurso, deslize de cima para baixo na tela. Depois, encontre o bloco {featureName}.}one{Para usar esse recurso, deslize com # dedo de cima para baixo na tela. Depois, encontre o bloco {featureName}.}other{Para usar esse recurso, deslize com # dedos de cima para baixo na tela. Depois, encontre o bloco {featureName}.}}"</string>
<string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw" msgid="3847728530771929959">"Esse atalho vai estar disponível depois que você concluir a configuração do dispositivo."</string>
- <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Para usar esse recurso, deslize dois dedos na rela, de baixo para cima.\n\nPara mudar de recurso, deslize dois dedos de baixo para cima da tela e segure."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Para usar esse recurso, deslize dois dedos na tela, de baixo para cima.\n\nPara mudar de recurso, deslize dois dedos de baixo para cima da tela e segure."</string>
<string name="accessibility_tutorial_dialog_gesture_shortcut_instruction" msgid="7349950768250852308">"{count,plural, =1{Para usar esse recurso, deslize de baixo para cima na tela}one{Para usar esse recurso, deslize com # dedo de baixo para cima na tela}other{Para usar esse recurso, deslize com # dedos de baixo para cima na tela}}"</string>
<string name="accessibility_tutorial_dialog_message_gesture_talkback" msgid="8142847782708562793">"Para usar esse recurso, deslize de baixo para cima na tela com três dedos.\n\nPara mudar de recurso, deslize de baixo para cima com três dedos, sem soltar."</string>
<string name="accessibility_tutorial_dialog_message_gesture_settings" msgid="40769674586981429">"Para usar um recurso de acessibilidade, deslize de baixo para cima na tela com dois dedos.\n\nPara alternar entre recursos, deslize de baixo para cima com dois dedos, sem soltar."</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Visualização"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opções padrão"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tamanho da legenda"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estilo da legenda"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opções de personalização"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Cor do plano de fundo"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajustar uso de energia"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pacotes incluídos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Os apps estão funcionando normalmente"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nível da bateria baixo"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Ativar a Economia de bateria para prolongar a duração da carga"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Melhorar a duração da bateria"</string>
@@ -2625,7 +2646,7 @@
<string name="power_wifi" msgid="4614007837288250325">"Wi-Fi"</string>
<string name="power_bluetooth" msgid="5085900180846238196">"Bluetooth"</string>
<string name="power_cell" msgid="7793805106954398186">"Rede móvel"</string>
- <string name="power_phone" msgid="2768396619208561670">"Chamadas de voz"</string>
+ <string name="power_phone" msgid="2768396619208561670">"Ligações"</string>
<string name="battery_screen_usage" msgid="90008745183187461">"Uso da tela: <xliff:g id="TIME">^1</xliff:g>"</string>
<string name="battery_used_by" msgid="6457305178016189330">"<xliff:g id="PERCENT">%1$s</xliff:g> de uso por <xliff:g id="APP">%2$s</xliff:g>"</string>
<string name="battery_overall_usage" msgid="8940140259734182014">"<xliff:g id="PERCENT">%1$s</xliff:g> da bateria total"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versão"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versão <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Substituir VPN já existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Configurar VPN sempre ativa?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Das 9h às 17h em dias de semana\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventos da agenda"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} está ativo}=2{{mode_1} e {mode_2} estão ativos}=3{{mode_1}, {mode_2} e {mode_3} estão ativos}one{{mode_1}, {mode_2} e mais # modo estão ativos}other{{mode_1}, {mode_2} e mais # modos estão ativos}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modo pode ser ativado automaticamente}one{# modo pode ser ativado automaticamente}other{# modos podem ser ativados automaticamente}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ATIVADO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Não definido"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Desativado"</string>
@@ -4941,7 +4964,7 @@
<string name="bluetooth_header_battery_content_description" msgid="3804237436331504879">"Bateria"</string>
<string name="settings_panel_title" msgid="346363079938069215">"Painel de configurações"</string>
<string name="enable_desktop_mode" msgid="5644818402534562302">"Ativar janelas de forma livre"</string>
- <string name="enable_desktop_mode_on_secondary_display" msgid="2609567824593768780">"Permitir janelas de forma livre na tela secundária"</string>
+ <string name="enable_desktop_mode_on_secondary_display" msgid="2609567824593768780">"Ativar janelas de forma livre na tela secundária"</string>
<string name="enable_non_resizable_multi_window" msgid="6832903754625404477">"Ativar recursos não redimensionáveis em várias janelas"</string>
<string name="enable_non_resizable_multi_window_summary" msgid="3275763753261901999">"Permitir que apps não redimensionáveis sejam usados em várias janelas"</string>
<string name="hwui_force_dark_title" msgid="4256904905631994219">"Manter o recurso Forçar modo escuro ativado"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Pesquisar configurações"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contatos, armazenamento, conta"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Armazenamento de contatos"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nenhuma conta padrão configurada"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Somente dispositivo"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Os novos contatos não serão sincronizados com uma conta"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Os contatos serão salvos no seu dispositivo e sincronizados com sua conta por padrão"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Erro ao definir a conta padrão"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nenhuma conta padrão configurada"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Somente dispositivo"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Adicione uma conta para começar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circule para pesquisar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Toque no botão home ou na alça de navegação e pressione para pesquisar usando o conteúdo na tela."</string>
</resources>
diff --git a/res/values-pt-rPT/arrays.xml b/res/values-pt-rPT/arrays.xml
index 15a519e..2b2b596 100644
--- a/res/values-pt-rPT/arrays.xml
+++ b/res/values-pt-rPT/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Floco de neve"</item>
<item msgid="7952183800501346803">"Guarda-sol"</item>
<item msgid="799139025758265891">"Ferramentas de oficina"</item>
- <item msgid="1330084588359129896">"Tenda"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Bobina de filme"</item>
<item msgid="5827426100157335512">"Livro"</item>
<item msgid="8585828346253128384">"Flor de lótus"</item>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index d3ec13e..b743e15 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Desativar Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Desativa a funcionalidade Bluetooth LE Audio se o dispositivo suportar as capacidades de hardware LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modo Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Ver botão LE Audio nos Detalhes"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Contornar lista de autorizações do Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Use o LE Audio por predefinição, mesmo se o cumprimento dos critérios da lista de autorizações pelo periférico com LE Audio não tiver sido validado."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Definir automaticamente com base na sua rede e sinais sem fios"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuso horário automático"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Definir automaticamente com base nas redes móveis perto de si"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Definir autom. c/ localização do disp., se disponível. Também pode ser necessária uma ligação Wi-Fi ativa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Definir automaticamente com base na localização do dispositivo, se disponível"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar local predefinido"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Hora"</string>
@@ -284,7 +288,7 @@
<string name="location_settings_title" msgid="8375074508036087178">"Localização"</string>
<string name="location_settings_primary_switch_title" msgid="8849081766644685127">"Usar localização"</string>
<string name="location_settings_summary_location_off" msgid="4797932754681162262">"Desativada"</string>
- <string name="location_settings_summary_location_on" msgid="4273299717586679786">"{count,plural, =1{Ativada / # app tem acesso à localização}other{Ativada / # apps têm acesso à localização}}"</string>
+ <string name="location_settings_summary_location_on" msgid="4273299717586679786">"{count,plural, =1{Ativada/# app tem acesso à localização}other{Ativada/# apps têm acesso à localização}}"</string>
<string name="location_settings_loading_app_permission_stats" msgid="6054103701535557342">"A carregar…"</string>
<string name="location_settings_footer_general" msgid="3447585552176173502">"As apps com a autorização Dispositivos próximos podem determinar a posição relativa dos dispositivos ligados."</string>
<string name="location_settings_footer_location_off" msgid="8568995909147566720">"O acesso à localização está desativado para apps e serviços. A localização do dispositivo ainda pode ser enviada para os contactos de resposta a emergências quando liga ou envia uma mensagem de texto para um número de emergência."</string>
@@ -563,7 +567,7 @@
<string name="private_space_title" msgid="1752064212078238723">"Espaço privado"</string>
<string name="private_space_summary" msgid="2274405892301976238">"Mantém as apps privadas bloqueadas e ocultas"</string>
<string name="private_space_description" msgid="4059594203775816136">"Mantenha as apps privadas num espaço separado que pode ocultar ou bloquear"</string>
- <string name="private_space_lock_title" msgid="7230836881433350526">"Bloqueio do espaço privado"</string>
+ <string name="private_space_lock_title" msgid="7230836881433350526">"Bloquear espaço privado"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Pode desbloquear o espaço privado da mesma forma que desbloqueia o seu dispositivo ou escolher um bloqueio diferente"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"Usar bloqueio de ecrã do dispositivo"</string>
<string name="private_space_biometric_title" msgid="3934339826674553174">"Desbloqueio facial e por impressão digital"</string>
@@ -622,7 +626,7 @@
<string name="private_space_cancel_label" msgid="379259667396956886">"Cancelar"</string>
<string name="private_space_setup_button_label" msgid="2094882154623560585">"Configurar"</string>
<string name="private_space_setup_title" msgid="2272968244329821450">"Espaço privado"</string>
- <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Oculte ou bloqueie apps privadas num espaço separado. Use uma Conta Google exclusiva para maior segurança."</string>
+ <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Oculte ou bloqueie apps privadas num espaço separado. Use uma Conta Google dedicada para maior segurança."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Como funciona"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Crie uma Conta Google para o seu espaço"</b>\n"Se usar uma conta dedicada, impede que os ficheiros, as fotos e os emails sincronizados sejam apresentados fora do seu espaço"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Defina um bloqueio"</b>\n"Bloqueie o seu espaço para impedir que outras pessoas o abram"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"O teclado ignora as pressões rápidas repetidas da mesma tecla"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Limiar para evitar pressão repetida"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Escolha o tempo durante o qual o teclado ignora as pressões repetidas das teclas"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizado"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalizado"</string>
<string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Ajusta o tempo que demora a ativação de uma tecla pressionada"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Teclas aderentes"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Prima uma tecla de cada vez para os atalhos em vez de manter as teclas premidas em simultâneo"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Teclas do rato"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Use o teclado para controlar o ponteiro"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Deslocamento inverso do rato"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Desloque para cima para mover a página para baixo"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Trocar botões esquerdo e direito"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use o botão esquerdo do rato como o botão direito"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Atalhos de teclado"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostre a lista de atalhos"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Teclados e ferramentas do perfil de trabalho"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Escolha uma nova tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Acessibilidade do teclado físico"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas aderentes, teclas sem repetição, teclas do rato"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repetir teclas"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Atraso antes da repetição"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Taxa de repetição"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Mantenha uma tecla premida para repetir o respetivo caráter até a tecla ser libertada"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Esquema do <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predefinição"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automático: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Pré-visualizar"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opções padrão"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tamanho das legendas"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estilo das legendas"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opções personalizadas"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Cor de fundo"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajustar utilização de energia"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pacotes incluídos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"As apps estão a ser executadas normalmente"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nível da bateria baixo"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Ative a Poupança de bateria para prolongar a autonomia da bateria"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Melhore a autonomia da bateria"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Quer desligar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desligar"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versão"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versão <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Quer substituir a VPN existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Quer definir a VPN como sempre ativa?"</string>
@@ -3219,7 +3249,7 @@
<string name="connected_devices_dashboard_android_auto_no_driving_mode_summary" msgid="6426996842202276640">"Bluetooth, Android Auto, NFC"</string>
<string name="connected_devices_dashboard_android_auto_no_nfc_no_driving_mode" msgid="1672426693308438634">"Bluetooth, Android Auto"</string>
<string name="nfc_and_payment_settings_payment_off_nfc_off_summary" msgid="7132040463607801625">"Não disponível com o NFC desativado"</string>
- <string name="nfc_and_payment_settings_no_payment_installed_summary" msgid="4879818114908207465">"Para utilizar, comece por instalar uma app de pagamento"</string>
+ <string name="nfc_and_payment_settings_no_payment_installed_summary" msgid="4879818114908207465">"Para usar, instale primeiro uma app de pagamento"</string>
<string name="app_and_notification_dashboard_summary" msgid="8047683010984186106">"Apps recentes, apps predefinidas"</string>
<string name="notification_settings_work_profile" msgid="6076211850526353975">"O acesso às notificações não está disponível para aplicações no perfil de trabalho."</string>
<string name="account_dashboard_title" msgid="8228773251948253914">"Palavras-passe e contas"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00 – 17:00, dias úteis\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventos de calendário"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} está ativo}=2{{mode_1} e {mode_2} estão ativos}=3{{mode_1}, {mode_2} e {mode_3} estão ativos}other{{mode_1}, {mode_2} e mais # estão ativos}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modo pode ser ativado automaticamente}other{# modos podem ser ativados automaticamente}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ATIVADO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Não definido"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Desativado"</string>
@@ -5214,7 +5245,7 @@
<string name="reboot_dialog_reboot_later" msgid="4261717094186904568">"Reiniciar mais tarde"</string>
<string name="bluetooth_details_spatial_audio_title" msgid="1368071116994002707">"Áudio espacial"</string>
<string name="bluetooth_details_spatial_audio_summary" msgid="5026859623681482668">"O áudio de dispositivos multimédia compatíveis torna-se mais envolvente"</string>
- <string name="bluetooth_details_head_tracking_title" msgid="5416972521040337799">"Acompanhamento da cabeça"</string>
+ <string name="bluetooth_details_head_tracking_title" msgid="5416972521040337799">"Posição da cabeça"</string>
<string name="bluetooth_details_head_tracking_summary" msgid="3942238746595985395">"O áudio muda conforme move a cabeça para soar mais natural"</string>
<string name="bluetooth_details_permissions_sync_title" msgid="7277580382321003521">"Sincronizar autorizações do telemóvel"</string>
<string name="bluetooth_details_permissions_sync_summary" msgid="8125037984381432059">"Conceda ao seu relógio as mesmas autorizações da app que concedeu a este telemóvel"</string>
@@ -5447,7 +5478,7 @@
<string name="audio_streams_main_page_scan_qr_code_title" msgid="8337270277392468895">"Ler código QR"</string>
<string name="audio_streams_main_page_scan_qr_code_summary" msgid="1991792283368249499">"Comece a ouvir lendo o código QR de uma stream"</string>
<string name="audio_streams_main_page_password_dialog_join_button" msgid="2967747276379153408">"Ouvir stream"</string>
- <string name="audio_streams_main_page_qr_code_scanner_summary" msgid="5312980105735143360">"Leia o código QR de uma stream de áudio para ouvir com <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+ <string name="audio_streams_main_page_qr_code_scanner_summary" msgid="5312980105735143360">"Leia o código QR de uma stream de áudio para ouvir com os <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="audio_streams_main_page_password_dialog_cannot_edit" msgid="9020898619297520153">"Não é possível editar a palavra-passe durante a partilha. Para alterar a palavra-passe, primeiro, desative a partilha de áudio."</string>
<string name="audio_streams_qr_code_scanner_label" msgid="8799703301071378034">"Leitor de códigos QR"</string>
<string name="audio_streams_qr_code_help_with_link" msgid="5542328067190486479"><annotation id="link">"Precisa de ajuda?"</annotation></string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Apenas no dispositivo"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Os novos contactos não vão ser sincronizados com uma conta"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Os contactos vão ser guardados no dispositivo e sincronizados com a sua conta por predefinição"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nenhuma conta predefinida"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Erro ao predefinir a conta"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nenhuma conta predefinida"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Apenas no dispositivo"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Adicione uma conta para começar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circundar para Pesquisar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Toque sem soltar no botão do ecrã principal ou no indicador de navegação para pesquisar usando o conteúdo no ecrã."</string>
</resources>
diff --git a/res/values-pt/arrays.xml b/res/values-pt/arrays.xml
index 6822b22..35df470 100644
--- a/res/values-pt/arrays.xml
+++ b/res/values-pt/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Floco de neve"</item>
<item msgid="7952183800501346803">"Guarda-sol"</item>
<item msgid="799139025758265891">"Ferramentas"</item>
- <item msgid="1330084588359129896">"Barraca"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Rolo de filme"</item>
<item msgid="5827426100157335512">"Livro"</item>
<item msgid="8585828346253128384">"Flor de lótus"</item>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 7700159..8a1349f 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Desativar Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Desativa o recurso de Bluetooth LE Audio caso o hardware do dispositivo tenha essa opção."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modo Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Mostrar a chave do Bluetooth LE Audio nos Detalhes do dispositivo"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Ignorar lista de permissões do Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Usar o áudio de baixo consumo (LE Audio) por padrão, mesmo que o periférico dele não tenha sido verificado para atender aos critérios da lista de permissões."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Definir automaticamente usando sua rede e sinais sem fio"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fuso horário automático"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Definir automaticamente com base nas redes móveis perto de você"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Definir automaticamente usando o local do dispositivo, se disponível. Também pode ser necessário ter uma conexão Wi-Fi ativa."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Definir automaticamente usando o local do dispositivo, se disponível"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Usar o padrão do local"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Usar formato de 24 horas"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Horário"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"Privacidade"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"Perfil de trabalho"</string>
<string name="private_space_title" msgid="1752064212078238723">"Espaço privado"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"Mantenha apps particulares bloqueados e ocultos"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"Mantém apps particulares bloqueados e ocultos"</string>
<string name="private_space_description" msgid="4059594203775816136">"Mantenha a privacidade de apps em um espaço separado que você pode ocultar ou bloquear"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Bloqueio do espaço privado"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Você pode desbloquear seu Espaço privado da mesma maneira que desbloqueia seu dispositivo ou escolher um bloqueio diferente"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Acessibilidade"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Teclado físico"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Teclas de filtragem"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"O teclado ignora pressionamentos rápidos e repetidos da mesma tecla"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Limite da tecla de filtragem"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Escolha por quanto tempo o teclado ignora pressionamentos repetidos"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizado"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valor personalizado"</string>
<string name="slow_keys" msgid="2891452895499690837">"Teclas lentas"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Ajusta o tempo que leva para um pressionamento de tecla ser ativado"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Teclas de aderência"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Pressione uma tecla por vez para usar atalhos em vez de manter as teclas pressionadas juntas"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Teclas do mouse"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Use o teclado para controlar o ponteiro"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Rolagem reversa do mouse"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Deslize para cima para descer na página"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Trocar os botões esquerdo e direito"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Use o botão esquerdo do mouse como o direito"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Atalhos do teclado"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Mostrar lista de atalhos"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Escolha uma nova tecla para <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Acessibilidade do teclado físico"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Teclas de aderência, teclas de filtragem, teclas do mouse"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repetir teclas"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Atraso antes da repetição"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Taxa de repetição"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pressione e segure uma tecla para repetir o caractere dela até que seja liberada"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Layout do <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Padrão"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automático: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2217,7 +2235,7 @@
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction" msgid="1007756360115974649">"Para iniciar ou interromper a ampliação, toque duas vezes rapidamente com %1$d dedos na tela"</string>
<string name="accessibility_tutorial_dialog_message_quick_setting" msgid="3715446725334547432">"{count,plural, =1{Para usar esse recurso, deslize de cima para baixo na tela. Depois, encontre o bloco {featureName}.}one{Para usar esse recurso, deslize com # dedo de cima para baixo na tela. Depois, encontre o bloco {featureName}.}other{Para usar esse recurso, deslize com # dedos de cima para baixo na tela. Depois, encontre o bloco {featureName}.}}"</string>
<string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw" msgid="3847728530771929959">"Esse atalho vai estar disponível depois que você concluir a configuração do dispositivo."</string>
- <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Para usar esse recurso, deslize dois dedos na rela, de baixo para cima.\n\nPara mudar de recurso, deslize dois dedos de baixo para cima da tela e segure."</string>
+ <string name="accessibility_tutorial_dialog_message_gesture" msgid="4148062210755434854">"Para usar esse recurso, deslize dois dedos na tela, de baixo para cima.\n\nPara mudar de recurso, deslize dois dedos de baixo para cima da tela e segure."</string>
<string name="accessibility_tutorial_dialog_gesture_shortcut_instruction" msgid="7349950768250852308">"{count,plural, =1{Para usar esse recurso, deslize de baixo para cima na tela}one{Para usar esse recurso, deslize com # dedo de baixo para cima na tela}other{Para usar esse recurso, deslize com # dedos de baixo para cima na tela}}"</string>
<string name="accessibility_tutorial_dialog_message_gesture_talkback" msgid="8142847782708562793">"Para usar esse recurso, deslize de baixo para cima na tela com três dedos.\n\nPara mudar de recurso, deslize de baixo para cima com três dedos, sem soltar."</string>
<string name="accessibility_tutorial_dialog_message_gesture_settings" msgid="40769674586981429">"Para usar um recurso de acessibilidade, deslize de baixo para cima na tela com dois dedos.\n\nPara alternar entre recursos, deslize de baixo para cima com dois dedos, sem soltar."</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Visualização"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opções padrão"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Idioma"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tamanho da legenda"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Estilo da legenda"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opções de personalização"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Cor do plano de fundo"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajustar uso de energia"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pacotes incluídos"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Os apps estão funcionando normalmente"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nível da bateria baixo"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Ativar a Economia de bateria para prolongar a duração da carga"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Melhorar a duração da bateria"</string>
@@ -2625,7 +2646,7 @@
<string name="power_wifi" msgid="4614007837288250325">"Wi-Fi"</string>
<string name="power_bluetooth" msgid="5085900180846238196">"Bluetooth"</string>
<string name="power_cell" msgid="7793805106954398186">"Rede móvel"</string>
- <string name="power_phone" msgid="2768396619208561670">"Chamadas de voz"</string>
+ <string name="power_phone" msgid="2768396619208561670">"Ligações"</string>
<string name="battery_screen_usage" msgid="90008745183187461">"Uso da tela: <xliff:g id="TIME">^1</xliff:g>"</string>
<string name="battery_used_by" msgid="6457305178016189330">"<xliff:g id="PERCENT">%1$s</xliff:g> de uso por <xliff:g id="APP">%2$s</xliff:g>"</string>
<string name="battery_overall_usage" msgid="8940140259734182014">"<xliff:g id="PERCENT">%1$s</xliff:g> da bateria total"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Desconectar"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versão"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versão <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Esquecer VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Substituir VPN já existente?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Configurar VPN sempre ativa?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Das 9h às 17h em dias de semana\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Eventos da agenda"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} está ativo}=2{{mode_1} e {mode_2} estão ativos}=3{{mode_1}, {mode_2} e {mode_3} estão ativos}one{{mode_1}, {mode_2} e mais # modo estão ativos}other{{mode_1}, {mode_2} e mais # modos estão ativos}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modo pode ser ativado automaticamente}one{# modo pode ser ativado automaticamente}other{# modos podem ser ativados automaticamente}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ATIVADO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Não definido"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Desativado"</string>
@@ -4941,7 +4964,7 @@
<string name="bluetooth_header_battery_content_description" msgid="3804237436331504879">"Bateria"</string>
<string name="settings_panel_title" msgid="346363079938069215">"Painel de configurações"</string>
<string name="enable_desktop_mode" msgid="5644818402534562302">"Ativar janelas de forma livre"</string>
- <string name="enable_desktop_mode_on_secondary_display" msgid="2609567824593768780">"Permitir janelas de forma livre na tela secundária"</string>
+ <string name="enable_desktop_mode_on_secondary_display" msgid="2609567824593768780">"Ativar janelas de forma livre na tela secundária"</string>
<string name="enable_non_resizable_multi_window" msgid="6832903754625404477">"Ativar recursos não redimensionáveis em várias janelas"</string>
<string name="enable_non_resizable_multi_window_summary" msgid="3275763753261901999">"Permitir que apps não redimensionáveis sejam usados em várias janelas"</string>
<string name="hwui_force_dark_title" msgid="4256904905631994219">"Manter o recurso Forçar modo escuro ativado"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Pesquisar configurações"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"contatos, armazenamento, conta"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Armazenamento de contatos"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nenhuma conta padrão configurada"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Somente dispositivo"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Os novos contatos não serão sincronizados com uma conta"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Os contatos serão salvos no seu dispositivo e sincronizados com sua conta por padrão"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Erro ao definir a conta padrão"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nenhuma conta padrão configurada"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Somente dispositivo"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Adicione uma conta para começar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circule para pesquisar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Toque no botão home ou na alça de navegação e pressione para pesquisar usando o conteúdo na tela."</string>
</resources>
diff --git a/res/values-ro/arrays.xml b/res/values-ro/arrays.xml
index b7d382c..1872920 100644
--- a/res/values-ro/arrays.xml
+++ b/res/values-ro/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Fulg de nea"</item>
<item msgid="7952183800501346803">"Umbrelă de plajă"</item>
<item msgid="799139025758265891">"Instrumente din atelier"</item>
- <item msgid="1330084588359129896">"Cort"</item>
+ <item msgid="8112685757657659269">"Pian"</item>
<item msgid="3861584909935022342">"Bobină de film"</item>
<item msgid="5827426100157335512">"Carte"</item>
<item msgid="8585828346253128384">"Floare de lotus"</item>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 44e38ba..ef5d25f 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Dezactivează Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Dezactivează funcția Bluetooth LE Audio dacă dispozitivul acceptă capacitățile de hardware LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modul Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Comutator LE Audio în Detalii dispozitiv"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Omite lista cu acces permis Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Folosește în mod prestabilit LE Audio chiar dacă dispozitivul periferic LE Audio nu a fost confirmat ca respectând criteriile Allowlist."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Setează automat folosind semnalele de rețea și wireless"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Fus orar automat"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Setează automat în funcție de rețelele mobile din apropiere"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Setează automat folosind locația, dacă este disponibilă. Poate fi necesară o conexiune Wi-Fi activă."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Setează automat folosind locația, dacă este disponibilă"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Folosește codul local prestabilit"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Folosește formatul de 24 de ore"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Oră"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Accesibilitate"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Tastatură fizică"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Taste nerepetate"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Tastatura ignoră apăsările repetate rapid ale aceleiași taste"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Pragul pentru evitarea apăsării repetate"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Alege durata de timp în care tastatura ignoră apăsările repetate ale tastelor"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 sec."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 sec."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 sec."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Personalizată"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"valoare personalizată"</string>
<string name="slow_keys" msgid="2891452895499690837">"Taste lente"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Ajustează timpul necesar pentru activarea unei apăsări de tastă"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Taste adezive"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Apasă câte o tastă pentru comenzile rapide în loc să ții apăsate tastele împreună"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Butoanele mouse-ului"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Folosește tastatura pentru a controla indicatorul"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Derularea inversă cu mouse-ul"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Derulează în sus pentru a muta pagina în jos"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Schimbă butoanele stâng și drept"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Folosește butonul stâng al mouse-ului ca pe cel drept"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Comenzi rapide de la tastatură"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Afișează lista de comenzi rapide"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Alege o nouă tastă pentru <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accesibilitatea tastaturii fizice"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Taste adezive, Taste nerepetate, Butoanele mouse-ului"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Repetă tastele"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Durata până la repetare"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Frecvența de repetare"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Apasă lung o tastă pentru a repeta caracterul respectiv până când o eliberezi"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Aspectul <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Prestabilit"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automat: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Previzualizare"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opțiuni standard"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Limbă"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Dimensiunea subtitrării"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stilul subtitrării"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Opțiuni personalizate"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Culoare de fundal"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Ajustează utilizarea de energie"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Pachete incluse"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplicațiile rulează normal"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nivelul bateriei este scăzut"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Activează Economisirea bateriei pentru a mări autonomia bateriei"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Îmbunătățește autonomia bateriei"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vrei să te deconectezi de la această rețea VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Deconectează-te"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versiune"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versiunea <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Elimină profilul VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Înlocuiești rețeaua VPN existentă?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Setezi rețeaua VPN ca activată permanent?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"În zilele lucrătoare între 09:00 și 17:00"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Evenimente din calendar"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} este activ}=2{{mode_1} și {mode_2} sunt active}=3{{mode_1}, {mode_2} și {mode_3} sunt active}few{{mode_1}, {mode_2} și încă # sunt active}other{{mode_1}, {mode_2} și încă # sunt active}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Un mod se poate activa automat}few{# moduri se pot activa automat}other{# de moduri se pot activa automat}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ACTIVAT"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nesetat"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Dezactivat"</string>
@@ -5463,13 +5486,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Caută în setări"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"agendă, spațiu de stocare, cont"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Stocarea datelor din Agendă"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nicio setare prestabilită"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Numai pe dispozitiv"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Contactele noi nu se vor sincroniza cu un cont"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Persoanele de contact vor fi salvate pe dispozitiv și sincronizate cu contul în mod prestabilit"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Eroare la setarea contului prestabilit"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nicio setare prestabilită"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Numai pe dispozitiv"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Adaugă un cont pentru a începe"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Încercuiește și caută"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Atinge lung butonul Ecran de pornire sau ghidajul de navigare ca să cauți folosind conținutul de pe ecran."</string>
</resources>
diff --git a/res/values-ru/arrays.xml b/res/values-ru/arrays.xml
index 8dd023f..7a989eb 100644
--- a/res/values-ru/arrays.xml
+++ b/res/values-ru/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Снежинка"</item>
<item msgid="7952183800501346803">"Пляжный зонт"</item>
<item msgid="799139025758265891">"Инструменты в мастерской"</item>
- <item msgid="1330084588359129896">"Палатка"</item>
+ <item msgid="8112685757657659269">"Пианино"</item>
<item msgid="3861584909935022342">"Кинопленка"</item>
<item msgid="5827426100157335512">"Книга"</item>
<item msgid="8585828346253128384">"Цветок лотоса"</item>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 1492f90..72f0a73 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Отключить Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Отключить Bluetooth LE Audio, если доступны аппаратные возможности"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Режим Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Переключатель LE Audio в сведениях об устройстве"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Обходить белый список Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Использовать LE Audio по умолчанию, даже если периферийное устройство LE Audio не соответствует критериям белого списка"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Устанавливать автоматически, используя сеть устройства и беспроводные сигналы"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Автоматическое определение часового пояса"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Устанавливать автоматически, используя мобильные сети поблизости"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Устанавливать автоматически, используя геолокацию. Может требоваться подключение к Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Устанавливать автоматически, используя геолокацию"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Региональные настройки по умолчанию"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-часовой формат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Время"</string>
@@ -561,7 +565,7 @@
<string name="privacy_header" msgid="5526002421324257007">"Конфиденциальность"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"Рабочий профиль"</string>
<string name="private_space_title" msgid="1752064212078238723">"Частное пространство"</string>
- <string name="private_space_summary" msgid="2274405892301976238">"Приложения в личном пространстве скрыты и доступны только вам"</string>
+ <string name="private_space_summary" msgid="2274405892301976238">"Приложения в частном пространстве скрыты и доступны только вам"</string>
<string name="private_space_description" msgid="4059594203775816136">"Создайте отдельное пространство для личных приложений, которое можно скрыть или защитить с помощью блокировки."</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Блокировка частного пространства"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Для личного пространства можно установить тот же способ разблокировки, который используется для экрана, или выбрать другой."</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Специальные возможности"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Физическая клавиатура"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Контроль повторного нажатия"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Быстро повторяющиеся нажатия одной клавиши на клавиатуре будут игнорироваться"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Интервал между повторными нажатиями"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Выберите, в течение какого времени будут игнорироваться повторные нажатия клавиши на клавиатуре."</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 сек."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 сек."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 сек."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Свой вариант"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"пользовательское значение"</string>
<string name="slow_keys" msgid="2891452895499690837">"Медленные клавиши"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Настроить длительность интервала между нажатием клавиши и назначенным на нее действием"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Залипание клавиш"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Вместо того чтобы удерживать вместе все клавиши из сочетания, нажимайте их по одной"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Клавиши управления мышью"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Управлять указателем с помощью клавиатуры"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Прокручивать мышью в обратном направлении"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Если прокрутить вверх, страница прокрутится вниз"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Поменять местами левую и правую кнопки"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Использовать левую кнопку мыши в качестве правой"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Быстрые клавиши"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Показывать список сочетаний клавиш"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Выберите новую клавишу для <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Специальные возможности для физической клавиатуры"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Залипание клавиш, контроль повторного нажатия, клавиши управления мышью"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Повторный ввод символа"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Задержка перед повторным нажатием"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Скорость повторного ввода"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Повторять ввод символа, пока удерживается клавиша"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Раскладка \"<xliff:g id="IME_LABEL">%s</xliff:g>\""</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"По умолчанию"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автоматически: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2225,7 +2243,7 @@
<string name="accessibility_tutorial_dialog_button" msgid="2031773187678948436">"ОК"</string>
<string name="accessibility_tutorial_dialog_link_button" msgid="13364319079385020">"Настроить кнопку"</string>
<string name="accessibility_tutorial_dialog_configure_software_shortcut_type" msgid="8041105223988170653">"Ещё"</string>
- <string name="accessibility_shortcut_title" msgid="8125867833704517463">"Быстрый запуск функции \"<xliff:g id="SERVICE">%1$s</xliff:g>\""</string>
+ <string name="accessibility_shortcut_title" msgid="8125867833704517463">"Быстрый запуск \"<xliff:g id="SERVICE">%1$s</xliff:g>\""</string>
<string name="accessibility_shortcut_edit_summary_software" msgid="48978719406821294">"Кнопка специальных возможностей"</string>
<string name="accessibility_shortcut_edit_summary_software_gesture" msgid="7346399253904683940">"Жест специальных возможностей"</string>
<string name="accessibility_shortcut_edit_dialog_title_software_gesture" msgid="8078659880723370597">"Движение вверх по экрану двумя пальцами"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Предпросмотр"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандартные настройки"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Язык"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Размер субтитров"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Стиль субтитров"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Собственные настройки"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Цвет фона"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Режим энергопотребления"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Пакеты"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Приложения работают нормально"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Низкий уровень заряда батареи"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Включите режим энергосбережения, чтобы увеличить время работы от батареи."</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Продлите время работы от батареи"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Отключиться от VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Да"</string>
<string name="vpn_version" msgid="6344167191984400976">"Версия"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Версия <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Удалить VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Сменить текущую VPN-сеть?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Настроить постоянную VPN-сеть?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"В будние дни с 09:00 до 17:00\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Мероприятия из календаря"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Включен режим \"{mode_1}\"}=2{Включены режимы \"{mode_1}\" и \"{mode_2}\"}=3{Включены режимы \"{mode_1}\", \"{mode_2}\" и \"{mode_3}\"}one{Включены режимы \"{mode_1}\", \"{mode_2}\" и ещё #}few{Включены режимы \"{mode_1}\", \"{mode_2}\" и ещё #}many{Включены режимы \"{mode_1}\", \"{mode_2}\" и ещё #}other{Включены режимы \"{mode_1}\", \"{mode_2}\" и ещё #}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режим может включаться автоматически}one{# режим может включаться автоматически}few{# режима могут включаться автоматически}many{# режимов могут включаться автоматически}other{# режима могут включаться автоматически}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ВКЛ."</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Не задано"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Отключено"</string>
@@ -3665,7 +3688,7 @@
<string name="notification_channel_summary_default" msgid="1168420867670390611">"Звонок или вибрация в зависимости от настроек устройства"</string>
<string name="notification_channel_summary_high" msgid="3411637309360617621">"При разблокированном устройстве показывать уведомления в виде баннера в верхней части экрана"</string>
<string name="notification_switch_label" msgid="8029371325967501557">"<xliff:g id="APP_NAME">%1$s</xliff:g>: все уведомления"</string>
- <string name="notification_app_switch_label" msgid="4422902423925084193">"Показывать все уведомления приложения \"<xliff:g id="APP_NAME">%1$s</xliff:g>\""</string>
+ <string name="notification_app_switch_label" msgid="4422902423925084193">"<xliff:g id="APP_NAME">%1$s</xliff:g>: все уведомления"</string>
<string name="notifications_sent_daily" msgid="10274479224185437">"{count,plural, =1{Примерно # уведомление в день}one{Примерно # уведомление в день}few{Примерно # уведомления в день}many{Примерно # уведомлений в день}other{Примерно # уведомления в день}}"</string>
<string name="notifications_sent_weekly" msgid="7895656213187555346">"{count,plural, =1{Примерно # уведомление в неделю}one{Примерно # уведомление в неделю}few{Примерно # уведомления в неделю}many{Примерно # уведомлений в неделю}other{Примерно # уведомления в неделю}}"</string>
<string name="notifications_sent_never" msgid="9081278709126812062">"Никогда"</string>
@@ -4119,7 +4142,7 @@
<string name="usb_summary_UVC_power" msgid="226810354412154061">"Режим веб-камеры и зарядка"</string>
<string name="background_check_pref" msgid="5304564658578987535">"Фоновая проверка"</string>
<string name="assist_access_context_title" msgid="5201495523514096201">"Использовать текст с экрана"</string>
- <string name="assist_access_context_summary" msgid="6951814413185646275">"Разрешить просматривать содержимое экрана в виде текста"</string>
+ <string name="assist_access_context_summary" msgid="6951814413185646275">"Разрешить приложению-помощнику доступ к содержимому экрана в виде текста"</string>
<string name="assist_access_screenshot_title" msgid="4395902231753643633">"Использовать скриншот"</string>
<string name="assist_access_screenshot_summary" msgid="5276593070956201863">"Разрешить приложению-помощнику доступ к изображению экрана"</string>
<string name="assist_flash_title" msgid="5449512572885550108">"Подсвечивать экран"</string>
@@ -5342,7 +5365,7 @@
<string name="about_phone_device_name_warning" msgid="3243226572404472381">"Название устройства доступно установленным приложениям. Его также могут видеть другие пользователи, когда вы подключаетесь к устройствам Bluetooth и сетям Wi-Fi или настраиваете точку доступа Wi-Fi."</string>
<string name="grammatical_gender_title" msgid="8584242850477270828">"Грамматический род"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"Выберите грамматический род"</string>
- <string name="content_protection_preference_title" msgid="5069260032659193074">"Сканировать на наличие приложений, вводящих в заблуждение"</string>
+ <string name="content_protection_preference_title" msgid="5069260032659193074">"Сканирование подозрительных приложений"</string>
<string name="content_protection_preference_summary" msgid="2252393849408445391">"Проверять историю действий в приложении на фишинг"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"Сканировать на наличие вводящих в заблуждение приложений"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"Сканировать на наличие вводящих в заблуждение приложений для работы"</string>
@@ -5464,13 +5487,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Поиск по настройкам"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"контакты, хранилище, аккаунт"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Контакты"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Аккаунт по умолчанию не задан"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Только на устройстве"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Новые контакты не будут синхронизироваться с аккаунтом"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Контакты будут по умолчанию сохраняться на устройстве и синхронизироваться с аккаунтом"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Не удалось выбрать аккаунт по умолчанию."</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Аккаунт по умолчанию не выбран"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Только на устройстве"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Сначала добавьте аккаунт"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Обвести и найти"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Чтобы запустить поиск по экрану, нажмите и удерживайте кнопку главного экрана или маркер навигации"</string>
</resources>
diff --git a/res/values-si/arrays.xml b/res/values-si/arrays.xml
index 907185d..f2278b7 100644
--- a/res/values-si/arrays.xml
+++ b/res/values-si/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"හිම මල්"</item>
<item msgid="7952183800501346803">"වෙරළ කුඩය"</item>
<item msgid="799139025758265891">"වැඩමුළු මෙවලම්"</item>
- <item msgid="1330084588359129896">"කූඩාරම"</item>
+ <item msgid="8112685757657659269">"පියානෝව"</item>
<item msgid="3861584909935022342">"සිනමා පටය"</item>
<item msgid="5827426100157335512">"පොත"</item>
<item msgid="8585828346253128384">"නෙළුම් මල"</item>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 0ff08b9..24fe551 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"බ්ලූටූත් LE ශ්රව්ය අබල කරන්න"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"උපාංගය LE ශ්රව්ය දෘඨාංග හැකියා වෙත සහාය දක්වන්නේ නම් බ්ලූටූත් LE ශ්රව්ය විශේෂාංගය අබල කරයි."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"බ්ලූටූත් LE ශ්රව්ය මාදිලිය"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"උපාංග විස්තරවල LE ශ්රව්ය ටොගල පෙන්වන්න"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"බ්ලූටූත් LE ශ්රව්ය ඉඩ දුන් ලැයිස්තුව මඟහරින්න"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ඉඩ දුන් ලැයිස්තුවේ නිර්ණායක සපුරාලීමට LE ශ්රව්ය පර්යන්තය සත්යාපනය කර නොමැති වුවත් පෙරනිමියෙන් LE ශ්රව්ය භාවිතා කරන්න."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ඔබේ ජාලය සහ රැහැන් රහිත සංඥා භාවිතයෙන් ස්වයංක්රීයව සකසන්න"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ස්වයංක්රීය වේලා කලාපය"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ඔබ අසල ඇති ජංගම ජාල මත පදනම්ව ස්වයංක්රීයව සකසන්න"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"තිබේ නම්, ඔබේ උපාංග ස්ථානය භාවිතයෙන් ස්වයංක්රීයව සකසන්න. සක්රිය Wifi සම්බන්ධතාවයක් ද අවශ්ය විය හැක."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"තිබේ නම්, ඔබේ උපාංග ස්ථානය භාවිතයෙන් ස්වයංක්රීයව සකසන්න"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"පෙදෙසි පෙරනිමි භාවිත කරන්න"</string>
<string name="date_time_24hour" msgid="286679379105653406">"පැය 24 ආකාරය භාවිත කරන්න"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"වේලාව"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"ප්රවේශ්යතාව"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"භෞතික යතුරු පුවරුව"</string>
<string name="bounce_keys" msgid="7419450970351743904">"පනින යතුරු"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"යතුරු පුවරුව එකම යතුර ඉක්මනින් නැවත නැවතත් එබීම නොසලකා හරියි"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"උඩ පනින යතුරු සීමාව"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ඔබේ යතුරු පුවරුව නැවත නැවතත් යතුරු එබීම නොසලකා හරින කාල සීමාව තෝරා ගන්න"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"ත0.2"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"ත0.4"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"ත0.6"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"අභිරුචි"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"අභිරුචි අගය"</string>
<string name="slow_keys" msgid="2891452895499690837">"මන්දගාමී යතුරු"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"යතුරු එබීම සක්රිය වීම සඳහා එයට ගතවන කාලය සකසයි"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ඇලෙන යතුරු"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"කෙටිමං සඳහා යතුරු එකට තබා ගැනීම වෙනුවට වරකට යතුරක් ඔබන්න"</string>
<string name="mouse_keys" msgid="6237254627808525540">"මූසික යතුරු"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"දර්ශකය පාලනය කිරීමට ඔබේ යතුරු පුවරුව භාවිතා කරන්න"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"මූසික ආපස්සට අනුචලනය"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"පිටුව පහළට ගෙන යාමට ඉහළට අනුචලන කරන්න"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"වම් සහ දකුණු බොත්තම් මාරු කරන්න"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"වම් මූසික බොත්තම ඔබේ දකුණ ලෙස භාවිතා කරන්න"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"යතුරු පුවරු කෙටිමං"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"කෙටිමං ලැයිස්තුව පෙන්වන්න"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> සඳහා නව යතුරක් තෝරා ගන්න:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"භෞතික යතුරුපුවරු ප්රවේශ්යතාව"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ඇලෙන යතුරු, පනින යතුරු, මූසික යතුරු"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"පුනරාවර්තන යතුරු"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"පුනරාවර්තනයට පෙර ප්රමාදය"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"පුනරාවර්තන අනුපාතය"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"යතුර මුදා හරින තෙක් එහි අනුලකුණ පුනරාවර්තනය කිරීමට යතුරක් ඔබාගෙන සිටින්න"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> පිරිසැලසුම"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"පෙරනිමි"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ස්වයංක්රීය: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"පෙරදසුන"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"සාමාන්ය විකල්ප"</string>
<string name="captioning_locale" msgid="5533303294290661590">"භාෂාව"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"සිරස්තල ප්රමාණය"</string>
<string name="captioning_preset" msgid="4174276086501638524">"සිරස්තල මෝස්තරය"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"අභිරුචි විකල්ප"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"පසුබිම් වර්ණය"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"බල භාවිතය සීරුමාරු කරන්න"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"ඇතුළත් පැකේජ"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"යෙදුම් සාමාන්ය පරිදි ධාවනය වේ"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"බැටරි මට්ටම අඩුය"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"බැටරි ආයු කාලය දීර්ඝ කිරීමට බැටරි සුරැකුම ක්රියාත්මක කරන්න"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"බැටරි ආයු කාලය වැඩි දියුණු කරන්න"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"මෙම VPN එක විසන්ධි කරන්නද?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"විසන්ධි කරන්න"</string>
<string name="vpn_version" msgid="6344167191984400976">"අනුවාදය"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"අනුවාදය <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN අමතක කරන්න"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"පවතින VPN ප්රතිස්ථාපනය කරන්නද?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"සැම විට ක්රියාත්මක VPN සකසන්නද?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"සතියේ දිනවල පෙ.ව. 9 - ප.ව. 5\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"දින දර්ශන සිදුවීම්"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} සක්රියයි}=2{{mode_1} සහ {mode_2} සක්රියයි}=3{{mode_1}, {mode_2}, සහ {mode_3} සක්රියයි}one{{mode_1}, {mode_2}, සහ තව #ක් සක්රියයි}other{{mode_1}, {mode_2}, සහ තව #ක් සක්රියයි}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ප්රකාරයක් ස්වයංක්රීයව ක්රියාත්මක විය හැක}one{ප්රකාර #ක් ස්වයංක්රීයව ක්රියාත්මක විය හැක}other{ප්රකාර #ක් ස්වයංක්රීයව ක්රියාත්මක විය හැක}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ක්රියාත්මකයි"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"සකසා නැත"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"අබලයි"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"සෙවීමේ සැකසීම්"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"සම්බන්ධතා, ආචයනය, ගිණුම"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"සම්බන්ධතා ආචයනය"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"පෙරනිමි සැකසීමක් නැත"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"උපාංගය පමණි"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"නව සම්බන්ධතා ගිණුමක් සමග සමමුහුර්ත නොවනු ඇත"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"සම්බන්ධතා ඔබේ උපාංගයට සුරකිනු ඇති අතර පෙරනිමියෙන් ඔබේ ගිණුමට සමමුහුර්ත කරනු ලැබේ"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"පෙරනිමි ගිණුම සැකසීමේ දෝෂයකි"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"පෙරනිමි සැකසීමක් නැත"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"උපාංගය පමණි"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"පටන් ගැනීමට ගිණුමක් එක් කරන්න"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"සෙවීමට කවයසෙවීමට කවය අදින්න"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"ඔබේ තිරයේ ඇති අන්තර්ගතය භාවිතයෙන් සෙවීමට මුල් පිටුව බොත්තම හෝ සංචලන හසුරුව ස්පර්ශ කර අල්ලාගෙන සිටින්න."</string>
</resources>
diff --git a/res/values-sk/arrays.xml b/res/values-sk/arrays.xml
index be2683c..35ca54c 100644
--- a/res/values-sk/arrays.xml
+++ b/res/values-sk/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snehová vločka"</item>
<item msgid="7952183800501346803">"Plážový slnečník"</item>
<item msgid="799139025758265891">"Nástroje v dielni"</item>
- <item msgid="1330084588359129896">"Stan"</item>
+ <item msgid="8112685757657659269">"Klavír"</item>
<item msgid="3861584909935022342">"Filmový pásik"</item>
<item msgid="5827426100157335512">"Kniha"</item>
<item msgid="8585828346253128384">"Lotosový kvet"</item>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 443c944..4972e31 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Deaktivovať Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Deaktivovať funkciu Bluetooth LE Audio, keď zariadenie podporuje možnosti hardvéru LE Audio"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Režim Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Zobrazovať LE Audio v podr. o zariadení"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Obchádzať zoznam povolených aplikácie Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Používať LE Audio predvolene, aj keď nebolo overené, či periféria LE Audio spĺňa kritériá zoznamu povolených"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Nastavujte automaticky pomocou sieťových a bezdrôtových signálov"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatické časové pásmo"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Nastavujte automaticky na základe mobilných sietí v okolí"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Nastavujte automaticky pomocou polohy zariadenia, ak je k dispozícii. Môže sa vyžadovať aj aktívne pripojenie Wi‑Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Nastavujte automaticky pomocou polohy zariadenia, ak je k dispozícii"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Používať miestny predvolený formát"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Používať 24-hodinový formát"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Čas"</string>
@@ -562,7 +566,7 @@
<string name="work_profile_category_header" msgid="85707750968948517">"Pracovný profil"</string>
<string name="private_space_title" msgid="1752064212078238723">"Súkromný priestor"</string>
<string name="private_space_summary" msgid="2274405892301976238">"Možnosť uzamknutia a skrytia súkromných aplikácií"</string>
- <string name="private_space_description" msgid="4059594203775816136">"Uchovávajte súkromné aplikácie v samostatnom priestore, ktorý môžete skryť alebo uzamknúť"</string>
+ <string name="private_space_description" msgid="4059594203775816136">"Uchovávajte súkromné aplikácie v samostatnom priestore, ktorý môžete skryť alebo uzamknúť."</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Zámka súkromného priestoru"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Súkromný priestor môžete odomknúť rovnakým spôsobom ako svoje zariadenie, prípadne môžete vybrať inú zámku"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"Používať zámku obrazovky zariadenia"</string>
@@ -624,11 +628,11 @@
<string name="private_space_setup_title" msgid="2272968244329821450">"Súkromný priestor"</string>
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Skryte alebo uzamknite súkromné aplikácie v samostatnom priestore. Zlepšite zabezpečenie použitím vyhradeného účtu Google."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Ako to funguje"</string>
- <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Vytvorte účet Google pre svoj priestor"</b>\n"Ak používate vyhradený účet, pomôže zastaviť zobrazovanie synchronizovaných súborov, fotiek a správ mimo priestoru"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Nastavenie zámky"</b>\n"Uzamknite svoj priestor, aby ho iní ľudia nemohli otvoriť."</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Inštalácia aplikácií"</b>\n"Nainštalujte si aplikácie, ktoré chcete vo svojom priestore ponechať súkromné"</string>
+ <string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Vytvorte si účet Google pre svoj priestor"</b>\n"Ak používate vyhradený účet, pomôže predísť zobrazovaniu synchronizovaných súborov, fotiek a správ mimo priestoru."</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Nastavte si zámku"</b>\n"Uzamknite svoj priestor, aby ho iní ľudia nemohli otvoriť."</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Nainštalujte si aplikácie"</b>\n"Nainštalujte si aplikácie, ktoré chcete vo svojom priestore ponechať súkromné."</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Na čo treba pamätať"</string>
- <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Keď uzamknete svoj priestor, aplikácie sa zastavia"</b>\n"Keď uzamknete svoj priestor, aplikácie v ňom sa zastavia a nebudete z nich dostávať upozornenia"</string>
+ <string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Keď uzamknete svoj priestor, aplikácie sa zastavia"</b>\n"Keď uzamknete svoj priestor, aplikácie v ňom sa zastavia a nebudete z nich dostávať upozornenia."</string>
<string name="private_space_apps_permission_text" msgid="4416201648436201393">"Súkromné priestory nie sú vhodné pre aplikácie, ktoré majú byť spustené na pozadí alebo odosielajú závažné upozornenia. Týka sa to napríklad zdravotníckych aplikácií. Je to tak preto, lebo upozornenia a aktivita na pozadí sa po uzamknutí priestoru zastavia.\n\nKeď je súkromný priestor uzamknutý, aplikácie v ňom sa nezobrazujú v správe povolení, na paneli ochrany súkromia ani v iných nastaveniach.\n\nSúkromný priestor sa nedá preniesť do nového zariadenia. Ak ho chcete používať v inom zariadení, musíte si založiť ďalší.\n\nK vášmu súkromnému priestoru môže získať prístup ktokoľvek, kto pripojí vaše zariadenie k počítaču alebo v ňom nainštaluje škodlivé aplikácie."</string>
<string name="private_space_settings_footer_text" msgid="3742468470394835356">"Súkromné priestory nie sú vhodné pre aplikácie, ktoré majú byť spustené na pozadí alebo odosielajú závažné upozornenia. Týka sa to napríklad zdravotníckych aplikácií. Je to tak preto, lebo upozornenia a aktivita na pozadí sa po uzamknutí priestoru zastavia.\n\nKeď je súkromný priestor uzamknutý, aplikácie v ňom sa nezobrazujú v správe povolení, na paneli ochrany súkromia ani v iných nastaveniach.\n\nSúkromný priestor sa nedá obnoviť v novom zariadení. Ak ho chcete používať v inom zariadení, musíte si založiť ďalší.\n\nK vášmu súkromnému priestoru môže získať prístup ktokoľvek, kto pripojí vaše zariadenie k počítaču alebo v ňom nainštaluje škodlivé aplikácie."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Ďalšie informácie o súkromnom priestore"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Dostupnosť"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fyzická klávesnica"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Klávesy jedného stlačenia"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Klávesnica ignoruje rýchle opakované stlačenia rovnakého klávesa"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Prah opakovaného stlačenia"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Vyberte, ako dlho má klávesnica ignorovať opakované stláčanie klávesov"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Vlastné"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"vlastná hodnota"</string>
<string name="slow_keys" msgid="2891452895499690837">"Pomalé klávesy"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Upravuje čas aktivácie po stlačení klávesa"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Režim uzamknutia klávesa"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Používať skratky stlačením jedného klávesa namiesto viacerých"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Klávesy myši"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Ovládajte kurzor pomocou klávesnice"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Obrátené posúvanie myšou"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Prechádzajte po stránke nadol posúvaním myši nahor"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Vymeniť ľavé a pravé tlačidlo"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Používajte ľavé tlačidlo myši ako pravé"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Klávesové skratky"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Zobraziť zoznam skratiek"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Vyberte pre <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> nový kláves:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Dostupnosť fyzickej klávesnice"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Režim uzamknutia klávesa, klávesy jedného stlačenia, klávesy myši"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Opakovať klávesy"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Oneskorenie pred opakovaním"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Miera opakovaní"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pri podržaní klávesa sa bude znak opakovane zadávať, dokým ho neuvoľníte"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Rozloženie <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Predvolené"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automaticky: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Ukážka"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Štandardné možnosti"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Jazyk"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Veľkosť titulkov"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Štýl titulkov"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Vlastné možnosti"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Farba pozadia"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Upraviť spotrebu energie"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Zahrnuté balíčky"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikácie fungujú normálne"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Úroveň batérie je nízka"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Ak chcete predĺžiť výdrž batérie, zapnite šetrič batérie"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Zlepšite výdrž batérie"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Odpojiť tento profil VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Odpojiť"</string>
<string name="vpn_version" msgid="6344167191984400976">"Verzia"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Verzia <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Zabudnúť profil VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Nahradiť existujúcu sieť VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Nastaviť sieť VPN, ktorá je vždy zapnutá?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"Od 9:00 do 17:00 cez pracovné dni"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Udalosti v kalendári"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Režim {mode_1} je aktívny}=2{Režimy {mode_1} a {mode_2} sú aktívne}=3{Režimy {mode_1}, {mode_2} a {mode_3} sú aktívne}few{Režimy {mode_1}, {mode_2} a # ďalšie sú aktívne}many{{mode_1}, {mode_2}, and # more are active}other{Režimy {mode_1}, {mode_2} a # ďalších je aktívnych}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 režim sa môže zapínať automaticky}few{# režimy sa môžu zapínať automaticky}many{# modes can turn on automatically}other{# režimov sa môže zapínať automaticky}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ZAPNUTÉ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nenastavené"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Deaktivované"</string>
@@ -3760,7 +3783,7 @@
<string name="notification_channels" msgid="1502969522886493799">"Kategórie"</string>
<string name="notification_channels_other" msgid="18159805343647908">"Iné"</string>
<string name="no_channels" msgid="4716199078612071915">"Táto aplikácia ešte neposlala žiadne upozornenia"</string>
- <string name="no_recent_channels" msgid="5068574296267584043">"Zobrazenie nepoužívaných kategórií"</string>
+ <string name="no_recent_channels" msgid="5068574296267584043">"Zobraziť nepoužívané kategórie"</string>
<string name="app_settings_link" msgid="6725453466705333311">"Ďalšie nastavenia v aplikácii"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"Zobraziť nepoužívané kategórie"</string>
<string name="hide_unused_channels" msgid="2019739275175707170">"Skryť nepoužívané kategórie"</string>
@@ -5464,13 +5487,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Vyhľadávať v nastaveniach"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontakty, priestor, účet"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Úložisko kontaktov"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nie je nastavená žiadna predvolená hodnota"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Len senzory zariadenia"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nové kontakty sa s účtom nebudú synchronizovať"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakty sa budú predvolene ukladať do zariadenia a synchronizovať s účtom"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Pri nastavovaní predvoleného účtu sa vyskytla chyba"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nie je nastavená žiadna predvolená hodnota"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Iba zariadenie"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Začnite pridaním účtu"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Vyhľadávanie krúžením"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Ak chcete vyhľadávať pomocou obsahu na obrazovke, pridržte tlačidlo plochy alebo navigačnú rukoväť."</string>
</resources>
diff --git a/res/values-sl/arrays.xml b/res/values-sl/arrays.xml
index c368aef..b4438f6 100644
--- a/res/values-sl/arrays.xml
+++ b/res/values-sl/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snežinka"</item>
<item msgid="7952183800501346803">"Senčnik"</item>
<item msgid="799139025758265891">"Orodja v delavnici"</item>
- <item msgid="1330084588359129896">"Šotor"</item>
+ <item msgid="8112685757657659269">"Klavir"</item>
<item msgid="3861584909935022342">"Filmski trak"</item>
<item msgid="5827426100157335512">"Knjiga"</item>
<item msgid="8585828346253128384">"Lotosov cvet"</item>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index f56f457..f612ebd 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Onemogoči funkcijo Bluetooth LE zvok"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Onemogoči funkcijo Bluetooth LE zvok, če naprava podpira strojno opremo za LE zvok."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Način Bluetooth LE zvok"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Pokaži preklopnik za LE zvok v podrobnostih o napravi"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Zaobidenje seznama dovoljenih za funkcijo Bluetooth LE zvok"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Privzeta uporaba funkcije LE zvok, tudi če dodatna oprema LE zvok ni potrjena, da izpolnjuje merila za uvrstitev na seznam dovoljenih."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Samodejna nastavitev na podlagi omrežja in brezžičnih signalov"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Samodejni časovni pas"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Samodejna nastavitev na podlagi mobilnih omrežij v bližini"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Samodejna nastavitev na podlagi lokacije naprave, če je na voljo. Morda bo potrebna tudi aktivna povezava Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Samodejna nastavitev na podlagi lokacije naprave, če je na voljo"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Uporabi privzete območne nastavitve"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Uporabi 24-urni zapis časa"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Ura"</string>
@@ -625,7 +629,7 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Skrijte ali zaklenite zasebne aplikacije v ločenem prostoru. Za dodatno varnost uporabite namenski račun Google."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Kako deluje"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Ustvarite račun Google za zasebni prostor"</b>\n"Če uporabite namenski račun, to omogoča, da se sinhronizirane datoteke, fotografije in e-poštna sporočila ne prikazujejo zunaj zasebnega prostora"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Nastavitev zaklepanja"</b>\n"Zaklenite svoj prostor, da ga druge osebe ne bodo mogle odpreti."</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Nastavite zaklepanje"</b>\n"Zaklenite svoj prostor, da ga druge osebe ne bodo mogle odpreti"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Namestite aplikacije"</b>\n"V zasebnem prostoru namestite aplikacije, za katere želite, da ostanejo zasebne"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Upoštevajte"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Aplikacije so ustavljene, ko zaklenete zasebni prostor"</b>\n"Ko zaklenete zasebni prostor, so aplikacije v njem ustavljene in s tem tudi prejemanje njihovih obvestil"</string>
@@ -1947,17 +1951,39 @@
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fizična tipkovnica"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Zaznava večkratnih pritiskov tipk"</string>
<string name="bounce_keys_summary" msgid="7418024428905737729">"Tipkovnica prezre hitro ponovljene pritiske iste tipke"</string>
- <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Prag za prezrtje hitrih zaporednih pritiskov tipk"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Prag za prezrtje pritiskov tipk"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Izberite, kako dolgo tipkovnica prezre ponovljene pritiske tipk"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Po meri"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"vrednost po meri"</string>
<string name="slow_keys" msgid="2891452895499690837">"Daljši pritisk tipk"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Prilagoditev časa, potrebnega za aktiviranje pritiska tipke"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Zaklepanje tipk"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Za bližnjice pritisnite eno tipko hkrati namesto več tipk hkrati"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Tipke za miško"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Upravljanje kazalke s tipkovnico"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Obratno pomikanje z miško"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Pomaknite se navzgor, če želite premakniti stran navzdol"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Zamenjava levega in desnega gumba"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Uporabljajte levi gumb na miški kot desnega"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Bližnjične tipke"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Prikaz seznama bližnjic"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Tipkovnice in orodja delovnega profila"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Izberite novo tipko za »<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>«:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Dostopnost fizične tipkovnice"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Zaklepanje tipk, zaznava večkratnih pritiskov tipk, tipke za miško"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Ponavljanje vnosa s tipko"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Zakasnitev pred ponovitvijo"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Hitrost ponavljanja"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pridržite poljubno tipko, da se njen znak ponavlja, dokler je ne spustite"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Postavitev <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Privzeto"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Samodejno: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Predogled"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardne možnosti"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Jezik"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Velikost podnapisov"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Slog podnapisov"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Možnosti po meri"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Barva ozadja"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Prilagodi porabo energije"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Vključeni paketi"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikacije delujejo normalno"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Nizka raven napolnjenosti baterije"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Vklopite varčevanje z energijo baterije, da podaljšate čas delovanja baterije."</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Podaljšanje časa delovanja baterije"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Prekinitev povezave s tem omrežjem VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Prekini povezavo"</string>
<string name="vpn_version" msgid="6344167191984400976">"Različica"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Različica <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Pozabi omrežje VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Želite zamenjati obstoječe omrežje VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ali želite, da je omrežje VPN stalno vklopljeno?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"»9.00–17.00 ob delavnikih«"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Dogodki na koledarju"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Način {mode_1} je aktiven}=2{Načina {mode_1} in {mode_2} sta aktivna}=3{Načini {mode_1}, {mode_2} in {mode_3} so aktivni}one{Načina {mode_1} in {mode_2} ter še # način so aktivni}two{Načina {mode_1} in {mode_2} ter še # načina so aktivni}few{Načina {mode_1} in {mode_2} ter še # načini so aktivni}other{Načina {mode_1} in {mode_2} ter še # načinov so aktivni}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 način se lahko samodejno vklopi}one{# način se lahko samodejno vklopi}two{# načina se lahko samodejno vklopita}few{# načini se lahko samodejno vklopijo}other{# načinov se lahko samodejno vklopi}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"VKLOPLJENO"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ni nastavljeno"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Onemogočeno"</string>
@@ -5459,6 +5490,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Samo v napravi"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Novi stiki ne bodo sinhronizirani z računom"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Stiki bodo privzeto shranjeni v napravi in sinhronizirani z računom"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nastavljen ni noben privzeti račun"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Napaka pri nastavljanju privzetega računa"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nastavljen ni noben privzeti račun"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Samo v napravi"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Za začetek dodajte račun"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Iskanje z obkroževanjem"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Za iskanje po vsebini zaslona pridržite gumb za začetni zaslon ali ročico za pomikanje."</string>
</resources>
diff --git a/res/values-sq/arrays.xml b/res/values-sq/arrays.xml
index 2450b85..14009c5 100644
--- a/res/values-sq/arrays.xml
+++ b/res/values-sq/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Flok dëbore"</item>
<item msgid="7952183800501346803">"Çadër plazhi"</item>
<item msgid="799139025758265891">"Vegla punishteje"</item>
- <item msgid="1330084588359129896">"Tendë"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Bobina e filmit"</item>
<item msgid="5827426100157335512">"Libër"</item>
<item msgid="8585828346253128384">"Zambak uji"</item>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index f736eb1..258db29 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Çaktivizo Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Çaktivizon veçorinë Bluetooth LE Audio nëse pajisja mbështet aftësitë e harduerit të LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Modaliteti i Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Shfaq çelësin për LE Audio te \"Detajet e pajisjes\""</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Anashkalo \"Listën e lejimeve\" të Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Përdor LE Audio si parazgjedhje edhe nëse LE Audio periferike nuk është verifikuar se i ka plotësuar kriteret e \"Listës së lejimeve\"."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Cakto automatikisht duke përdorur sinjalet e rrjetit dhe ato wireless"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Brezi orar automatik"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Cakto automatikisht bazuar në rrjetet celulare pranë teje"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Cakto automatikisht duke përdorur vendndodhjen e pajisjes sate, nëse ofrohet. Mund të kërkohet gjithashtu një lidhje aktive Wifi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Cakto automatikisht duke përdorur vendndodhjen e pajisjes sate, nëse ofrohet"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Përdor parazgjedhjen e lokalitetit"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Përdor formatin 24-orësh"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Ora"</string>
@@ -659,12 +663,9 @@
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Cakto motiv për hapësirën private"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"Kyç"</string>
<string name="private_space_category_hide" msgid="3236587591523126649">"Fshih"</string>
- <!-- no translation found for private_space_confirm_your_pattern_header (449382220134788771) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_pin_header (4543332157470087796) -->
- <skip />
- <!-- no translation found for private_space_confirm_your_password_header (9202308075814307169) -->
- <skip />
+ <string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Konfirmo motivin e hapësirës sate private"</string>
+ <string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Fut përsëri kodin PIN të hapësirës sate private"</string>
+ <string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Fut përsëri fjalëkalimin e hapësirës sate private"</string>
<string name="fingerprint_add_max" msgid="8639321019299347447">"Mund të shtosh deri në <xliff:g id="COUNT">%d</xliff:g> gjurmë gishtash"</string>
<string name="fingerprint_intro_error_max" msgid="4431784409732135610">"Ke shtuar numrin maksimal të gjurmëve të gishtave"</string>
<string name="fingerprint_intro_error_unknown" msgid="877005321503793963">"Nuk mund të shtohen gjurmë të tjera të gishtave"</string>
@@ -1032,10 +1033,8 @@
<string name="wifi_dpp_failure_enrollee_authentication" msgid="7008840843663520852">"Kontrollo fjalëkalimin dhe provo përsëri"</string>
<string name="wifi_dpp_failure_enrollee_rejected_configuration" msgid="982310033782652478">"Kontakto me prodhuesin e pajisjes"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="6118892932595974823">"Kontrollo lidhjen dhe provo përsëri"</string>
- <!-- no translation found for wifi_dpp_check_connection_no_matched_ssid (3608318690698685427) -->
- <skip />
- <!-- no translation found for wifi_dpp_check_connection_no_matched_security (1462706753123341376) -->
- <skip />
+ <string name="wifi_dpp_check_connection_no_matched_ssid" msgid="3608318690698685427">"Ky rrjet Wi‑Fi nuk ofrohet për momentin"</string>
+ <string name="wifi_dpp_check_connection_no_matched_security" msgid="1462706753123341376">"Ka një problem me këtë kod QR. Provo të lidhesh në një mënyrë tjetër."</string>
<string name="wifi_dpp_choose_network" msgid="3987007684129341427">"Zgjidh rrjetin"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="4321618376432197593">"Për të lidhur pajisjen, zgjidh një rrjet"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="5170095438763569255">"Të shtohet kjo pajisje te “<xliff:g id="SSID">%1$s</xliff:g>”?"</string>
@@ -1951,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Qasshmëria"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Tastiera fizike"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Tastet e përsëritura"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Tastiera i shpërfill shtypjet e shpejta të përsëritura të të njëjtit tast"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Pragu për tastet e përsëritura"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Zgjidh kohëzgjatjen e shpërfilljes së shtypjeve të përsëritura të tasteve nga tastiera jote"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 sek."</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 sek."</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 sek."</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"E personalizuar"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"Vlerë e personalizuar"</string>
<string name="slow_keys" msgid="2891452895499690837">"Tastet e ngadalta"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Rregullon kohën që duhet për aktivizimin e një shtypjeje tasti"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Tastet e përhershme"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Shtyp vetëm një tast në një moment për shkurtoret në vend që t\'i mbash shtypur bashkë tastet"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Butonat e miut"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Përdor tastierën për të kontrolluar treguesin"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Lëvizja e miut në të kundërt"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Lëviz lart për ta zhvendosur faqen poshtë"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Ndërro butonin e majtë dhe të djathtë"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Përdor butonin e majtë të miut si buton të djathtë"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Shkurtoret e tastierës"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Shfaq listën e shkurtoreve"</string>
@@ -2039,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Zgjidh një çelës të ri për <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Qasshmëria për tastierën fizike"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Tastet e përhershme, tastet e përsëritura, tastet e miut"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Përsërit tastet"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Vonesa përpara përsëritjes"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Shpejtësia e përsëritjes"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Mbaj shtypur një tast për të përsëritur karakterin e tij derisa të lëshohet tasti"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Struktura e <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"E parazgjedhur"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatik: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2447,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Shikim paraprak"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Opsionet standarde"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Gjuha"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Madhësia e titrave"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Stili i titrave"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Personalizo opsionet"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Ngjyra e sfondit"</string>
@@ -2575,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Rregullo përdorimin e energjisë"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Paketat e përfshira"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Aplikacionet po funksionojnë normalisht"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Niveli i baterisë është i ulët"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Aktivizo \"Kursyesin e baterisë\" për të rritur kohëzgjatjen e baterisë"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Përmirëso kohëzgjatjen e baterisë"</string>
@@ -2992,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Shkëpute këtë rrjet VPN"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Shkëpute"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versioni"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versioni <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Harroje rrjetin VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Të zëvendësohet rrjeti ekzistues VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Të caktohet rrjeti VPN gjithmonë aktiv?"</string>
@@ -3414,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00 - 17:00 në ditë jave\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Ngjarjet e kalendarit"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Modaliteti \"{mode_1}\" është aktiv}=2{Modalitetet \"{mode_1}\" dhe \"{mode_2}\" janë aktive}=3{Modalitetet \"{mode_1}\", \"{mode_2}\" dhe \"{mode_3}\" janë aktive}other{Modalitetet \"{mode_1}\", \"{mode_2}\" dhe # të tjera janë aktive}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 modalitet mund të aktivizohet automatikisht}other{# modalitete mund të aktivizohen automatikisht}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AKTIV"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Nuk është caktuar"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Çaktivizuar"</string>
@@ -3924,8 +3942,7 @@
<string name="zen_mode_new_custom_title" msgid="7513785385574267851">"Krijo një modalitet"</string>
<string name="zen_mode_new_custom_default_name" msgid="2778307946775085105">"Modaliteti i personalizuar"</string>
<string name="zen_mode_edit_name_hint" msgid="4584652062167540536">"Emri i modalitetit"</string>
- <!-- no translation found for zen_mode_edit_name_empty_error (5788063278827188275) -->
- <skip />
+ <string name="zen_mode_edit_name_empty_error" msgid="5788063278827188275">"Emri i modalitetit nuk mund të jetë bosh"</string>
<string name="zen_mode_edit_choose_icon_title" msgid="6452801577128788362">"Zgjidh një ikonë"</string>
<string name="zen_mode_trigger_title_schedule_calendar" msgid="9206609438617550331">"Ngjarjet e kalendarit"</string>
<string name="zen_mode_trigger_title_bedtime" msgid="3287241454965736913">"Rutina e orarit të gjumit"</string>
@@ -5468,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Kërko te cilësimet"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontaktet, ruajtja, llogaria"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Ruajtja e kontakteve"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Nuk është caktuar asnjë e parazgjedhur"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Vetëm pajisja"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Kontaktet e reja nuk do të sinkronizohen me një llogari"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontaktet do të ruhen në pajisjen tënde dhe do të sinkronizohen në llogarinë tënde si parazgjedhje"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Gabim gjatë caktimit të llogarisë së parazgjedhur"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Nuk është caktuar asnjë e parazgjedhur"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Vetëm në pajisje"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Shto një llogari për të filluar"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Qarko për të kërkuar"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Prek dhe mbaj shtypur butonin \"Kreu\" ose emërtimin e navigimit për të kërkuar duke përdorur përmbajtjen në ekranin tënd."</string>
</resources>
diff --git a/res/values-sr/arrays.xml b/res/values-sr/arrays.xml
index 2484fbf..c629fee 100644
--- a/res/values-sr/arrays.xml
+++ b/res/values-sr/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Пахуља"</item>
<item msgid="7952183800501346803">"Сунцобран"</item>
<item msgid="799139025758265891">"Алат из радионице"</item>
- <item msgid="1330084588359129896">"Шатор"</item>
+ <item msgid="8112685757657659269">"Клавир"</item>
<item msgid="3861584909935022342">"Ролна филма"</item>
<item msgid="5827426100157335512">"Књига"</item>
<item msgid="8585828346253128384">"Цвет лотоса"</item>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 63bda44..f6a2c47 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Онемогући Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Онемогућава функцију Bluetooth LE audio ако уређај подржава могућности LE audio хардвера."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio режим"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"LE Audio прекидач у детаљима о уређају"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Заобиђи Bluetooth LE Audio листу дозвољених"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Подразумевано користи LE Audio чак и ако није потврђено да LE Audio периферни уређај задовољава критеријуме листе дозвољених."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Аутоматско подешавање помоћу мреже и бежичних сигнала"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Аутоматска временска зона"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Аутоматско подешавање на основу мобилних мрежа у близини"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Аутоматско подешавање помоћу локације уређаја, ако је доступна. Можда је потребна и активна WiFi веза."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Аутоматско подешавање помоћу локације уређаја, ако је доступна"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Користи подразумевану вредност за локалитет"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Користи 24-часовни формат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Време"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Тастатура занемарује брзе притиске истог тастера који се понављају"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Праг за дужи одзив тастера"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Одаберите колико дуго тастатура занемарује понављане притиске тастера"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 сек"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 сек"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 сек"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 сек"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 сек"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 сек"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Прилагођено"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"прилагођена вредност"</string>
<string name="slow_keys" msgid="2891452895499690837">"Спори тастери"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Прилагодите време за активирање тастера после притиска"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Лепљиви тастери"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Притискајте један по један тастер да бисте користили пречице уместо да истовремено држите тастере"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Тастери миша"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Контролишите показивач помоћу тастатуре"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Обрнуто скроловање мишем"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Скролујте нагоре да бисте померили страницу надоле"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Замените дугмад налево и надесно"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Користите леви тастер миша као десни"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Тастерске пречице"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Приказује листу пречица"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Тастатуре и алатке за пословни профил"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Одаберите нови тастер за <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Приступачност физичке тастатуре"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Лепљиви тастери, дужи одзив тастера, тастери миша"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Понављање тастера"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Одлагање пре понављања"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Брзина понављања"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Притисните и задржите тастер да бисте понављали унос знака све док не пустите тастер"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Распоред <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Подразумевано"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Аутоматски: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Преглед"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандардне опције"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Језик"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Величина титла"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Стил титла"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Прилагођене опције"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Боја позадине"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Прилагођавање коришћења напајања"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Садржани пакети"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Апликације раде уобичајено"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Низак ниво напуњености батерије"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Укључите уштеду батерије да бисте продужили трајање батерије"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Продужите трајање батерије"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Желите ли да прекинете везу са овим VPN-ом?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Прекини везу"</string>
<string name="vpn_version" msgid="6344167191984400976">"Верзија"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Верзија <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Заборави VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Желите ли да замените постојећи VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Желите ли да подесите увек укључени VPN?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"9:00–17:00 радним данима"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Догађаји у календару"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Активан је {mode_1}}=2{Активни су {mode_1} и {mode_2}}=3{Активни су {mode_1}, {mode_2} и {mode_3}}one{Активни су {mode_1}, {mode_2} и још # режим}few{Активни су {mode_1}, {mode_2} и још # режима}other{Активни су {mode_1}, {mode_2} и још # режима}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режим може да се укључује аутоматски}one{# режим може да се укључује аутоматски}few{# режима могу да се укључују аутоматски}other{# режима може да се укључује аутоматски}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"УКЉУЧЕНО"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Није подешено"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Онемогућено"</string>
@@ -5458,6 +5489,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Само уређај"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Нови контакти се неће синхронизовати са налогом"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Контакти се подразумевано чувају на уређају и синхронизују са налогом"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Није подешен подразумевани налог"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Грешка при подешавању подразумеваног налога"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Није подешен подразумевани налог"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Само уређај"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Додајте налог да бисте започели"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Претрага заокруживањем"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Додирните и задржите дугме Почетак или маркер за кретање да бисте претраживали помоћу садржаја на екрану."</string>
</resources>
diff --git a/res/values-sv/arrays.xml b/res/values-sv/arrays.xml
index 84665cb..48b1fa6 100644
--- a/res/values-sv/arrays.xml
+++ b/res/values-sv/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snöflinga"</item>
<item msgid="7952183800501346803">"Strandparasoll"</item>
<item msgid="799139025758265891">"Verktyg"</item>
- <item msgid="1330084588359129896">"Tält"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Filmrulle"</item>
<item msgid="5827426100157335512">"Bok"</item>
<item msgid="8585828346253128384">"Lotusblomma"</item>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 811bed8..5028602 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Inaktivera Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Inaktiverar Bluetooth LE Audio-funktionen om enheten har stöd för funktioner för LE Audio-hårdvara."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio-läge"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Visa reglage för LE Audio i Enhetsinfo"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Hoppa över godkännandelistan för Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Använd LE Audio som standard även om LE Audio-kringutrustningen inte har bekräftats uppfylla kraven för godkännandelistan."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Ställ in automatiskt med nätverk och trådlösa signaler"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Automatisk tidszon"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Ställ in automatiskt utifrån mobilnätverk i närheten"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Ställ in automatiskt med enhetens plats, om tillgängligt. En aktiv wifi-anslutning kan också krävas."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Ställ in automatiskt med enhetens plats, om tillgängligt"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Använd lokal standard"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Använd 24-timmarsformat"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Tid"</string>
@@ -299,7 +303,7 @@
<string name="security_status_title" msgid="6958004275337618656">"Säkerhetsstatus"</string>
<string name="security_dashboard_summary" msgid="7571035662779425918">"Skärmlås, Hitta min enhet, appsäkerhet"</string>
<string name="safety_center_title" msgid="7732397372178774777">"Säkerhet och integritet"</string>
- <string name="safety_center_summary" msgid="3554867379951053869">"Appsäkerhet, enhetslås, behörigheter"</string>
+ <string name="safety_center_summary" msgid="3554867379951053869">"Appsäkerhet, enhetslås och behörigheter"</string>
<string name="security_settings_face_preference_summary" msgid="6675126437396914838">"Ansikte har lagts till"</string>
<string name="security_settings_face_preference_summary_none" msgid="523320857738436024">"Konfigurering krävs"</string>
<string name="security_settings_face_preference_title" msgid="2126625155005348417">"Ansiktslås"</string>
@@ -560,9 +564,9 @@
<string name="security_header" msgid="961514795852103424">"Säkerhet"</string>
<string name="privacy_header" msgid="5526002421324257007">"Integritet"</string>
<string name="work_profile_category_header" msgid="85707750968948517">"Jobbprofil"</string>
- <string name="private_space_title" msgid="1752064212078238723">"Privat område"</string>
+ <string name="private_space_title" msgid="1752064212078238723">"Privat utrymme"</string>
<string name="private_space_summary" msgid="2274405892301976238">"Håll privata appar låsta och dolda"</string>
- <string name="private_space_description" msgid="4059594203775816136">"Ha privata appar i ett separat rum som du kan dölja eller låsa"</string>
+ <string name="private_space_description" msgid="4059594203775816136">"Ha privata appar i ett separat utrymme som du kan dölja eller låsa"</string>
<string name="private_space_lock_title" msgid="7230836881433350526">"Lås privat utrymme"</string>
<string name="private_space_one_lock_summary" msgid="2106513606571219068">"Du kan låsa upp ditt privata utrymme på samma sätt som du låser upp din enhet, eller så väljer du ett annat lås"</string>
<string name="private_space_screen_lock_title" msgid="8679383894967823163">"Använd skärmlåset för enheten"</string>
@@ -612,25 +616,25 @@
<string name="private_space_accounts" msgid="1078277762792056395">"Följande konton tas bort från det privata utrymmet:"</string>
<string name="private_space_delete_button_label" msgid="1256981385318225002">"Radera"</string>
<string name="private_space_confirm_deletion_header" msgid="3468651585498942977">"Raderar privat utrymme …"</string>
- <string name="private_space_deleted" msgid="7692240901492540053">"Privat område har raderats"</string>
+ <string name="private_space_deleted" msgid="7692240901492540053">"Privat utrymme har raderats"</string>
<string name="private_space_delete_failed" msgid="7705795653796174741">"Det gick inte att radera privat utrymme"</string>
- <string name="private_space_unlocked" msgid="9091600948712932046">"Privat område är upplåst"</string>
+ <string name="private_space_unlocked" msgid="9091600948712932046">"Privat utrymme är upplåst"</string>
<string name="no_device_lock_title" msgid="1078223464721029954">"Ställ in skärmlås"</string>
<string name="no_device_lock_summary" msgid="7436025227616244687">"Ställ in ett skärmlås för enheten om du vill använda ditt privata rum."</string>
<string name="no_device_lock_action_label" msgid="2640487005629001288">"Konfigurera skärmlås"</string>
<string name="no_device_lock_cancel" msgid="4412602160321228863">"Avbryt"</string>
<string name="private_space_cancel_label" msgid="379259667396956886">"Avbryt"</string>
<string name="private_space_setup_button_label" msgid="2094882154623560585">"Ställ in"</string>
- <string name="private_space_setup_title" msgid="2272968244329821450">"Privat område"</string>
- <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Dölj eller lås privata appar i ett separat område. Använd ett dedikerat Google-konto för extra säkerhet."</string>
+ <string name="private_space_setup_title" msgid="2272968244329821450">"Privat utrymme"</string>
+ <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Dölj eller lås privata appar i ett separat utrymme. Använd ett dedikerat Google-konto för extra säkerhet."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Så fungerar det"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Skapa ett Google-konto för ditt privata utrymme"</b>\n"Om du använder ett separat konto förhindrar det att synkroniserade filer, foton och e-postmeddelanden visas utanför det privata utrymmet"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Ställ in ett lås"</b>\n"Lås ditt område så att andra inte kan öppna det"</string>
- <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installera appar"</b>\n"Installera appar som du vill hålla privata i området"</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Ställ in ett lås"</b>\n"Lås ditt utrymme så att andra inte kan öppna det"</string>
+ <string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Installera appar"</b>\n"Installera appar som du vill hålla privata i utrymmet"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Viktigt att tänka på"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Appar stoppas när du låser ditt privata utrymme"</b>\n"När du låser ditt privata utrymme stoppas apparna i området och du får inga aviseringar från dem"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Privata områden lämpar sig inte för appar som måste köras i bakgrunden eller skicka viktig information, till exempel medicinska appar. Detta beror på att aviseringar och aktivitet i bakgrunden stoppas när du låser området.\n\nAppar som finns i ditt privata utrymme visas inte i behörighetshanteraren, på integritetsöversikten eller i andra inställningar när området är låst.\n\nDet går inte att flytta ditt privata utrymme till en ny enhet. Du måste ställa in ett nytt privat utrymme om du vill använda det på en annan enhet.\n\nAlla som ansluter din enhet till en dator eller installerar skadliga appar på enheten kanske kan få åtkomst till ditt privata utrymme."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Privata områden lämpar sig inte för appar som måste köras i bakgrunden eller skicka viktig information, till exempel medicinska appar. Detta beror på att aviseringar och aktivitet i bakgrunden stoppas när du låser området.\n\nAppar som finns i ditt privata utrymme visas inte i behörighetshanteraren, på integritetsöversikten eller i andra inställningar när området är låst.\n\nDet går inte att återställa ditt privata utrymme på en ny enhet. Du måste ställa in ett nytt område om du vill använda det på en annan enhet.\n\nOm någon ansluter din enhet till en dator eller installerar skadliga appar på enheten kan det hända att hen får åtkomst till ditt privata utrymme."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Privata utrymmen lämpar sig inte för appar som måste köras i bakgrunden eller skicka viktig information, till exempel medicinska appar. Detta beror på att aviseringar och aktivitet i bakgrunden stoppas när du låser utrymmet.\n\nAppar som finns i ditt privata utrymme visas inte i behörighetshanteraren, på integritetsöversikten eller i andra inställningar när utrymmet är låst.\n\nDet går inte att flytta ditt privata utrymme till en ny enhet. Du måste ställa in ett nytt privat utrymme om du vill använda det på en annan enhet.\n\nAlla som ansluter din enhet till en dator eller installerar skadliga appar på enheten kanske kan få åtkomst till ditt privata utrymme."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Privata utrymmen lämpar sig inte för appar som måste köras i bakgrunden eller skicka viktig information, till exempel medicinska appar. Detta beror på att aviseringar och aktivitet i bakgrunden stoppas när du låser utrymmet.\n\nAppar som finns i ditt privata utrymme visas inte i behörighetshanteraren, på integritetsöversikten eller i andra inställningar när utrymmet är låst.\n\nDet går inte att återställa ditt privata utrymme på en ny enhet. Du måste ställa in ett nytt utrymme om du vill använda det på en annan enhet.\n\nOm någon ansluter din enhet till en dator eller installerar skadliga appar på enheten kan det hända att hen får åtkomst till ditt privata utrymme."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Läs mer om privat utrymme"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Detta tar en stund"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"Ställer in privat utrymme …"</string>
@@ -1557,7 +1561,7 @@
<string name="reset_esim_error_title" msgid="6516110227665862295">"Det gick inte att rensa dessa eSIM"</string>
<string name="reset_esim_error_msg" msgid="8459527827897797168">"Något gick fel och dina eSIM rensades inte.\n\nStarta om enheten och försök igen."</string>
<string name="reset_private_space_delete_title" msgid="2555885198282572990">"Radera privat utrymme"</string>
- <string name="reset_private_space_delete_dialog" msgid="2325106559507364385">"Om du har ett privat utrymme på din enhet tas det bort permanent och Google-kontot som lagts till för ditt område att tas bort. \n\nAlla appar i ditt område och tillhörande data tas bort från telefonens "<b>"interna lagringsutrymme"</b>"."</string>
+ <string name="reset_private_space_delete_dialog" msgid="2325106559507364385">"Om du har ett privat utrymme på din enhet tas det bort permanent och Google-kontot som lagts till för ditt utrymme att tas bort. \n\nAlla appar i ditt utrymme och tillhörande data tas bort från telefonens "<b>"interna lagringsutrymme"</b>"."</string>
<string name="main_clear_title" msgid="277664302144837723">"Rensa all data (återställ standardinst.)"</string>
<string name="main_clear_short_title" msgid="4752094765533020696">"Rensa all data (återställ standardinst.)"</string>
<string name="main_clear_desc_also_erases_external" msgid="3687911419628956693"><li>"musik"</li>\n<li>"foton"</li>\n<li>"annan användardata"</li></string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Tangentbordet ignorerar snabbt upprepade tryck på samma tangent"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Gräns för studsande tangent"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Välj hur länge tangentbordet ska ignorera upprepade tangenttryckningar"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0,2 s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0,4 s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0,6 s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Anpassat"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"anpassat värde"</string>
<string name="slow_keys" msgid="2891452895499690837">"Långsamma tangenter"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"Justerar tiden det tar innan ett tryck på en tangent aktiveras"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Låstangentsläge"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Tryck ned en tangent i taget för kortkommandon i stället för att hålla ned flera tangenter samtidigt"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Musknappar"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Använd tangentbordet för att styra pekaren"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Omvänd scrollning på musen"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Scrolla uppåt för att flytta sidan nedåt"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Byt plats på vänster och höger knapp"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Använd vänster musknapp som höger"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Kortkommandon"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Visa en lista över genvägar"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Tangentbord och verktyg för jobbprofilen"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Välj en ny tangent för <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Tillgänglighet för fysiskt tangentbord"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Låstangentsläge, studsande tangenter, musknappar"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Upprepa tangenter"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Fördröjning före upprepning"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Upprepningsfrekvens"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Håll ned en tangent för att upprepa tecknet tills du släpper tangenten"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Layouten <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Standard"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Automatiskt: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2088,7 +2114,7 @@
<string name="usage_time_label" msgid="9105343335151559883">"Användningstid"</string>
<string name="accessibility_settings" msgid="4713215774904704682">"Tillgänglighet"</string>
<string name="accessibility_settings_title" msgid="6739115703615065716">"Tillgänglighetsinställningar"</string>
- <string name="accessibility_settings_summary" msgid="2366627644570558503">"Skärm, interaktion, ljud"</string>
+ <string name="accessibility_settings_summary" msgid="2366627644570558503">"Skärm, interaktion och ljud"</string>
<string name="vision_settings_title" msgid="8919983801864103069">"Syninställningar"</string>
<string name="vision_settings_description" msgid="7614894785054441991">"Du kan anpassa enheten efter dina behov. Tillgänglighetsfunktionerna kan ändras senare under Inställningar."</string>
<string name="vision_settings_suggestion_title" msgid="4689275412658803919">"Ändra teckenstorlek"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Förhandsgranskning"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standardalternativ"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Språk"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Teckenstorlek för textning"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Textstil"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Anpassade alternativ"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Bakgrundsfärg"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Justera strömförbrukningen"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Inkluderade paket"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Appar körs som vanligt"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Låg batterinivå"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Förläng batteritiden genom att aktivera batterisparläget"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Förbättra batteritiden"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Vill du koppla från VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Koppla från"</string>
<string name="vpn_version" msgid="6344167191984400976">"Version"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Glöm VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Vill du byta ut befintligt VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Vill du ställa in Alltid på-VPN?"</string>
@@ -3206,10 +3236,10 @@
<string name="sim_selection_channel_title" msgid="3193666315607572484">"Val av SIM"</string>
<string name="dashboard_title" msgid="5660733037244683387">"Inställningar"</string>
<string name="network_dashboard_title" msgid="788543070557731240">"Nätverk och internet"</string>
- <string name="network_dashboard_summary_mobile" msgid="7750924671970583670">"Mobil, wifi, surfzon"</string>
+ <string name="network_dashboard_summary_mobile" msgid="7750924671970583670">"Mobil, wifi och surfzon"</string>
<string name="network_dashboard_summary_no_mobile" msgid="4022575916334910790">"Wifi, surfzon"</string>
<string name="connected_devices_dashboard_title" msgid="19868275519754895">"Anslutna enheter"</string>
- <string name="connected_devices_dashboard_default_summary" msgid="7211769956193710397">"Bluetooth, parkoppling"</string>
+ <string name="connected_devices_dashboard_default_summary" msgid="7211769956193710397">"Bluetooth och parkoppling"</string>
<string name="connected_devices_dashboard_summary" msgid="6927727617078296491">"Bluetooth, körläge, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="8424794257586524040">"Bluetooth, körläge"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="7155882619333726331">"Bluetooth, NFC"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"”Vardagar kl. 9.00–17.00”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Kalenderhändelser"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} är aktivt}=2{{mode_1} och {mode_2} är aktiva}=3{{mode_1}, {mode_2} och {mode_3} är aktiva}other{{mode_1}, {mode_2} och # till är aktiva}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 läge kan aktiveras automatiskt}other{# lägen kan aktiveras automatiskt}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"PÅ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Inte angivet"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Inaktiverat"</string>
@@ -3537,7 +3568,7 @@
<string name="work_sync_dialog_yes" msgid="5785488304957707534">"Bekräfta"</string>
<string name="work_sync_dialog_message" msgid="5066178064994040223">"Samma ljud används för både jobbprofilen och den privata profilen"</string>
<string name="configure_notification_settings" msgid="1492820231694314376">"Aviseringar"</string>
- <string name="notification_dashboard_summary" msgid="7530169251902320652">"Aviseringshistorik, konversationer"</string>
+ <string name="notification_dashboard_summary" msgid="7530169251902320652">"Aviseringshistorik och konversationer"</string>
<string name="conversation_notifs_category" msgid="2549844862379963273">"Konversation"</string>
<string name="general_notification_header" msgid="3669031068980713359">"Hantera"</string>
<string name="app_notification_field" msgid="3208079070539894909">"Appaviseringar"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Endast enheten"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Nya kontakter synkroniseras inte med ett konto"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kontakter sparas på enheten och synkroniseras med kontot som standard"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ingen standardinställning har angetts"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Det gick inte att ställa in standardkontot"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Inget standardkonto har angetts"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Endast enheten"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Lägg till ett konto för att komma igång"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Tryck länge på hemknappen eller navigeringshandtaget för att söka med innehållet på skärmen."</string>
</resources>
diff --git a/res/values-sw/arrays.xml b/res/values-sw/arrays.xml
index 94e3abc..ee7cb1e 100644
--- a/res/values-sw/arrays.xml
+++ b/res/values-sw/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Kipande kidogo sana cha theluji"</item>
<item msgid="7952183800501346803">"Mwamvuli wa ufukweni"</item>
<item msgid="799139025758265891">"Zana za karakana"</item>
- <item msgid="1330084588359129896">"Hema"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Ukanda wa filamu"</item>
<item msgid="5827426100157335512">"Kitabu"</item>
<item msgid="8585828346253128384">"Ua la yungiyungi"</item>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 16042ee..2c175a6 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Zima Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Huzima kipengele cha Bluetooth LE audio ikiwa kifaa kinatumia maunzi yenye uwezo wa kutumia LE audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Hali ya Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Onyesha LE Audio kwenye Maelezo ya Kifaa"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Kwepa Faili Zilizoruhusiwa za Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Tumia LE Audio kwa chaguomsingi hata ikiwa kifaa cha LE Audio hakijathibitishwa kuwa kimetimiza masharti."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Weka mipangilio otomatiki ukitumia mtandao wako na mawimbi ya simu za mkononi"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Mipangilio otomatiki ya saa za eneo"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Weka mipangilio otomatiki kulingana na mitandao ya simu iliyo karibu nawe"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Weka mipangilio otomatiki ukitumia data ya mahali kilipo kifaa chako, ikiwa inapatikana. Huenda pia ukahitaji muunganisho wa Wi-Fi unaotumika."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Weka mipangilio kiotomatiki ukitumia data ya mahali kilipo kifaa chako, ikiwa inapatikana"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Tumia chaguomsingi la eneo"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Tumia mpangilio wa saa 24"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Saa"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Ufikivu"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Kibodi halisi"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Vitufe vinavyoduta"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Kibodi hupuuza vitendo vya kurudia kubonyeza kitufe kimoja haraka mara nyingi"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Upeo wa mibofyo inayopuuzwa"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Chagua kipindi cha muda ambao kibodi yako itapuuza vitendo vya kurudia kubonyeza kitufe kimoja"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"sek 0.2"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"sek 0.4"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"sek 0.6"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Maalum"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"thamani maalum"</string>
<string name="slow_keys" msgid="2891452895499690837">"Vitufe vya polepole"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Hurekebisha muda unaochukua kitendo cha kubonyeza kitufe kuwasha"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Vitufe vinavyonata"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Bonyeza kitufe kimoja baada ya kingine ili upate njia za mkato badala ya kubonyeza na kushikilia vitufe kwa pamoja"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Vitufe vya kipanya"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Tumia kibodi yako kudhibiti kielekezi"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Kubadilisha mwelekeo wa kipanya"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Sogeza juu ili usogeze ukurasa chini"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Kubadilisha utendaji wa vitufe vya kulia na kushoto"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Tumia kitufe cha kushoto cha kipanya kutekeleza majukumu ya kitufe cha kulia"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Mikato ya kibodi"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Onyesha orodha ya njia za mkato"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Chagua kitufe kipya cha kurekebisha cha <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Zana za ufikivu kwenye kibodi halisi"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Vitufe vinavyonata, Vitufe vinavyodunda, Vitufe vya kipanya"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Vitufe vya Kurudia Herufi"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Kawia kabla ya kurudia"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Kasi ya Kurudia Herufi"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Bonyeza na ushikilie kitufe ili herufi ijirudie hadi utakapoachilia kitufe hicho"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Muundo wa <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Chaguomsingi"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Otomatiki: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Chungulia kwanza"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Chaguo za kawaida"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Lugha"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Ukubwa wa manukuu"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Mtindo wa manukuu"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Chaguo maalum"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Rangi ya mandharinyuma"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Rekebisha utumiaji wa nishati"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Furushi zilizojumuishwa"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Programu zinatumia chaji kama kawaida"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Chaji ya betri imepungua"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Washa Kiokoa Betri ili uongeze muda wa matumizi ya betri"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Boresha muda wa matumizi ya betri"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Ungependa kuondoa VPN hii?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Kata muungnisho"</string>
<string name="vpn_version" msgid="6344167191984400976">"Toleo"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Toleo la <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Ondoa VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Ungependa kubadilisha VPN iliyopo?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Ungependa kuweka VPN iliyowashwa kila mara?"</string>
@@ -3243,7 +3265,7 @@
<string name="cloned_app_created_summary" msgid="7277912971544890710">"Imenakiliwa"</string>
<string name="cloned_app_creation_toast_summary" msgid="3854494347144867870">"Inaunda nakala ya <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
<string name="cloned_app_created_toast_summary" msgid="755225403495544163">"Imeunda nakala ya <xliff:g id="PACKAGE_LABEL">%1$s</xliff:g>"</string>
- <string name="system_dashboard_summary" msgid="7400745270362833832">"Lugha, ishara, saa, hifadhi nakala"</string>
+ <string name="system_dashboard_summary" msgid="7400745270362833832">"Lugha, miguso, saa, hifadhi nakala"</string>
<string name="languages_setting_summary" msgid="2650807397396180351">"Lugha za mfumo, lugha za programu, mapendeleo ya kimaeneo, matamshi"</string>
<string name="keywords_wifi" msgid="8156528242318351490">"wifi, wi-fi, mtandao, muunganisho wa mtandao, intaneti, pasiwaya, data,"</string>
<string name="keywords_wifi_notify_open_networks" msgid="6580896556389306636">"Arifa ya Wi-Fi, arifa ya wifi"</string>
@@ -3295,7 +3317,7 @@
<string name="keywords_profile_challenge" msgid="5135555521652143612">"mashindano kazini, kazi, wasifu"</string>
<string name="keywords_unification" msgid="2677472004971453468">"wasifu wa kazini, wasifu uliodhibitiwa, unganisha, uunganishaji, kazi, wasifu"</string>
<string name="keywords_fold_lock_behavior" msgid="6278990772113341581">"kuamka, kulala, kutofunga, kutofunga skrini ukiwa umekunja kifaa, kukunja, kufunga, kunja, funga, skrini imezimwa"</string>
- <string name="keywords_gesture" msgid="3456930847450080520">"ishara"</string>
+ <string name="keywords_gesture" msgid="3456930847450080520">"miguso"</string>
<string name="keywords_wallet" msgid="3757421969956996972">"Pochi"</string>
<string name="keywords_payment_settings" msgid="6268791289277000043">"lipa, gusa, malipo"</string>
<string name="keywords_backup" msgid="707735920706667685">"hifadhi rudufu, hifadhi nakala"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"Saa 3 Asubuhi - Saa 11 Jioni siku za wiki\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Matukio ya kalenda"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} inatumika}=2{{mode_1} na {mode_2} zinatumika}=3{{mode_1}, {mode_2} na {mode_3} zinatumika}other{{mode_1}, {mode_2} na nyingine # zinatumika}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Hali 1 inaweza kuwashwa kiotomatiki}other{Hali # zinaweza kuwashwa kiotomatiki}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"IMEWASHWA"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Haijawekwa"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Imezimwa"</string>
@@ -3712,7 +3735,7 @@
<string name="notification_polite_main_control_title" msgid="5812529809151927149">"Tumia mipangilio ya kutuliza arifa"</string>
<string name="notification_polite_description" msgid="5497748284893832854">"Unapopokea arifa nyingi ndani ya muda mfupi, kifaa chako kitapunguza sauti na arifa kwa hadi dakika 2. Hali hii haitaathiri simu, kengele na mazungumzo ya kipaumbele. \n\nUnaweza kupata arifa ulizopokea wakati wa kutulizwa kwa arifa kwa kutelezesha kidole chini kutoka sehemu ya juu ya skrini."</string>
<string name="notification_polite_work" msgid="8823596456640216391">"Tumia kwenye wasifu wa kazini"</string>
- <string name="notification_polite_work_summary" msgid="5014189280132951378">"Inatumika kwa programu zenye wasifu wa kazini"</string>
+ <string name="notification_polite_work_summary" msgid="5014189280132951378">"Tumia kwenye programu za wasifu wa kazini"</string>
<string name="vr_listeners_title" msgid="4960357292472540964">"Huduma za kisaidizi cha Uhalisia Pepe"</string>
<string name="no_vr_listeners" msgid="8442646085375949755">"Hakuna programu zilizosakinishwa ambazo zinaweza kutekeleza huduma za kisaidizi cha Uhalisia Pepe."</string>
<string name="vr_listener_security_warning_title" msgid="7026351795627615177">"Ungependa kuruhusu huduma za Uhalisia Pepe katika <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
@@ -3992,7 +4015,7 @@
<string name="app_launch_open_domain_urls_title" msgid="4805388403977096285">"Fungua viungo vinavyoweza kutumika"</string>
<string name="app_launch_open_in_app" msgid="2208182888681699512">"Kwenye programu"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"Kwenye kivinjari chako"</string>
- <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Chagua jinsi ya kufungua viungo vya wavuti vya programu hii"</string>
+ <string name="app_launch_top_intro_message" msgid="9037324384325518290">"Chagua jinsi ya kufungua viungo vya wavuti kwa programu hii"</string>
<string name="app_launch_links_category" msgid="2380467163878760037">"Viungo vya kufunguka katika programu hii"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"Viungo vinavyoweza kutumika"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"Mapendeleo mengine chaguomsingi"</string>
@@ -4417,7 +4440,7 @@
<string name="automatic_storage_manager_days_title" msgid="5077286114860539367">"Ondoa picha na video"</string>
<string name="automatic_storage_manager_preference_title" msgid="3483357910142595444">"Kidhibiti cha hifadhi"</string>
<string name="automatic_storage_manager_primary_switch_title" msgid="9131959126462101994">"Tumia Kidhibiti cha hifadhi"</string>
- <string name="gesture_preference_title" msgid="8291899281322647187">"Ishara"</string>
+ <string name="gesture_preference_title" msgid="8291899281322647187">"Miguso"</string>
<string name="double_tap_power_for_camera_title" msgid="7982364144330923683">"Fungua kamera haraka"</string>
<string name="double_tap_power_for_camera_summary" msgid="1100926048598415509">"Ili ufungue kamera haraka, bofya kitufe cha kuwasha/kuzima mara mbili. Hufanya kazi katika skrini yoyote."</string>
<string name="double_twist_for_camera_mode_title" msgid="472455236910935684">"Geuza kamera ili upige selfi"</string>
@@ -5340,7 +5363,7 @@
<string name="about_phone_device_name_warning" msgid="3243226572404472381">"Jina la kifaa chako litaonekana kwa programu ambazo umesakinisha. Huenda likaonekana pia na watu wengine unapooanisha na vifaa vyenye Bluetooth, unapounganisha kwenye mtandao wa Wi-Fi au unapoweka mipangilio ya mtandao pepe wa Wi-Fi."</string>
<string name="grammatical_gender_title" msgid="8584242850477270828">"Jinsia ya kisarufi"</string>
<string name="grammatical_gender_dialog_title" msgid="8754048592099871587">"Chagua Jinsia ya kisarufi"</string>
- <string name="content_protection_preference_title" msgid="5069260032659193074">"Inatafuta programu hasidi"</string>
+ <string name="content_protection_preference_title" msgid="5069260032659193074">"Tafuta programu hasidi"</string>
<string name="content_protection_preference_summary" msgid="2252393849408445391">"Kagua shughuli kwenye programu ili kubaini iwapo kuna wizi wa data binafsi"</string>
<string name="content_protection_preference_user_consent_switch_title" msgid="1797782616799594426">"Kagua ili ugundue programu za kilaghai"</string>
<string name="content_protection_preference_user_consent_work_profile_switch_title" msgid="3004347470520916069">"Kagua ili ugundue programu za kilaghai za kazini"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Mipangilio ya Utafutaji"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"anwani, nafasi ya hifadhi, akaunti"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Nafasi ya kuhifadhi ya anwani"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Hujaweka akaunti chaguomsingi"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Kifaa tu"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Anwani mpya hazitasawazishwa kwenye akaunti"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Anwani zitahifadhiwa kwenye kifaa chako na kusawazishwa kwenye akaunti yako kwa chaguomsingi"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Hitilafu imetokea wakati wa kuweka akaunti chaguomsingi"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Hujaweka akaunti chaguomsingi"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Kifaa tu"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Weka akaunti ili uanze"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Chora Mviringo ili Kutafuta"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Gusa na ushikilie Kitufe cha ukurasa wa mwanzo au ncha ya kusogezea ili utafute ukitumia maudhui yaliyo kwenye skrini yako."</string>
</resources>
diff --git a/res/values-ta/arrays.xml b/res/values-ta/arrays.xml
index ae9eb40..e04eb88 100644
--- a/res/values-ta/arrays.xml
+++ b/res/values-ta/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"பனித்துகள்"</item>
<item msgid="7952183800501346803">"கடற்கரைக் குடை"</item>
<item msgid="799139025758265891">"பணிமனைக் கருவிகள்"</item>
- <item msgid="1330084588359129896">"கூடாரம்"</item>
+ <item msgid="8112685757657659269">"பியானோ"</item>
<item msgid="3861584909935022342">"திரைப்பட ரீல்"</item>
<item msgid="5827426100157335512">"புத்தகம்"</item>
<item msgid="8585828346253128384">"தாமரைப் பூ"</item>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 8de8680..bccb047 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"புளூடூத் LE ஆடியோவை முடக்கு"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"LE ஆடியோ ஹார்டுவேர்களை சாதனம் ஆதரித்தால் புளூடூத் LE ஆடியோ அம்சத்தை முடக்கும்."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"புளூடூத் LE ஆடியோ பயன்முறை"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"சாதன விவரங்களில் LE ஆடியோ டாகிளை காட்டு"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"புளூடூத் LE ஆடியோ ஏற்புப் பட்டியலை பைபாஸ் செய்தல்"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ஏற்புப் பட்டியல் நிபந்தனைகளை LE ஆடியோ வெளிப்புறச் சாதனம் பூர்த்திசெய்கிறதா என்று சரிபார்க்கப்படவில்லை என்றாலும் LE ஆடியோவை இயல்பாகப் பயன்படுத்தும்."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"உங்கள் நெட்வொர்க்கையும் வயர்லெஸ் சிக்னல்களையும் பயன்படுத்தி தானாகவே அமைக்கும்"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"நேர மண்டலத்தைத் தானாகவே கண்டறிதல்"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"உங்களுக்கு அருகிலுள்ள மொபைல் நெட்வொர்க்குகளின் அடிப்படையில் தானாகவே அமைக்கும்"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"கிடைத்தால், சாதன இருப்பிடம் மூலம் தானாகவே அமைக்கும். செயலிலுள்ள வைஃபை இணைப்பும் தேவைப்படலாம்."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"உங்கள் சாதன இருப்பிடம் கிடைத்தால், அதைப் பயன்படுத்தி தானாகவே அமைக்கும்"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"உள்ளூர் நேர வடிவத்தைப் பயன்படுத்து"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-மணிநேர வடிவமைப்பு"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"நேரம்"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"ஒரே பட்டனைத் தொடர்ச்சியாக அழுத்துவதைக் கீபோர்டு விரைவாகப் புறக்கணிக்கிறது"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"பவுன்ஸ் பட்டன் வரம்பு"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"தொடர்ச்சியாகப் பட்டன் அழுத்தப்படுவதைக் கீபோர்டு புறக்கணிப்பதற்கான கால அளவைத் தேர்வுசெய்யுங்கள்"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 வினாடி"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 வினாடி"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 வினாடி"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 வினாடி"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 வினாடி"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 வினாடி"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"பிரத்தியேகம்"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"பிரத்தியேகமான மதிப்பு"</string>
<string name="slow_keys" msgid="2891452895499690837">"ஸ்லோ கீஸ்"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"ஒரு பட்டனை அழுத்துவதற்கு எடுக்கும் நேரத்தை மாற்றலாம்"</string>
<string name="sticky_keys" msgid="7317317044898161747">"ஸ்டிக்கி கீஸ்"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"ஷார்ட்கட்களுக்கு பட்டன்களை ஒன்றாகப் பிடிப்பதற்குப் பதிலாக ஒரு நேரத்தில் ஒரு பட்டனை அழுத்தலாம்"</string>
<string name="mouse_keys" msgid="6237254627808525540">"மவுஸ் பட்டன்கள்"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"பாயிண்ட்டரைக் கட்டுப்படுத்த உங்கள் கீபோர்டைப் பயன்படுத்தலாம்"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"மவுஸ் ரிவர்ஸ் ஸ்க்ரோலிங்"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"பக்கத்தை மேலிருந்து கீழே நகர்த்த மவுஸை முன்னோக்கி ஸ்க்ரோல் செய்யலாம்"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"இடதுபுற மற்றும் வலதுபுற பட்டன்களை மாற்றுதல்"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"இடதுபுற மவுஸ் பட்டனை வலதுபுற பட்டனாகப் பயன்படுத்தலாம்"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"கீபோர்டு ஷார்ட்கட்கள்"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"ஷார்ட்கட்களின் பட்டியலைக் காட்டும்"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"பணிக் கணக்கிற்கான கீபோர்டுகள் & கருவிகள்"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>க்கு புதிய விசையை தேர்வுசெய்யலாம்:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"கீபோர்டுக்கான மாற்றுத்திறன் வசதி"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"ஸ்டிக்கி கீஸ், பவுன்ஸ் கீஸ், மவுஸ் கீஸ்"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"ரிப்பீட் பட்டன்கள்"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"தொடர்ச்சியான எழுத்துகளுக்கு இடையிலான நேர இடைவெளி"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"ரிப்பீட் விகிதம்"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"ஒரு பட்டனை அழுத்திப் பிடித்திருந்து அதை விடுவிக்கும்வரை அதிலுள்ள எழுத்து தொடர்ச்சியாக டைப் செய்யப்படும்"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> தளவமைப்பு"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"இயல்பு"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"தானியங்கு: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"முன்னோட்டம்"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"நிலையான விருப்பங்கள்"</string>
<string name="captioning_locale" msgid="5533303294290661590">"மொழி"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"வ்சன எழுத்து வடிவ அளவு"</string>
<string name="captioning_preset" msgid="4174276086501638524">"வசனத்தின் நடை"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"பிரத்தியேக விருப்பங்கள்"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"பின்புல வண்ணம்"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ஆற்றல் பயன்பாட்டைச் சரிசெய்க"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"உள்ளடங்கும் தொகுப்புகள்"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ஆப்ஸ் வழக்கம்போல் இயங்குகின்றன"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"குறைவான பேட்டரி அளவு"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"பேட்டரி ஆயுளை நீட்டிக்க பேட்டரி சேமிப்பானை இயக்குக"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"பேட்டரி ஆயுளை மேம்படுத்துதல்"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"VPNஐத் துண்டிக்கவா?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"தொடர்பைத் துண்டி"</string>
<string name="vpn_version" msgid="6344167191984400976">"பதிப்பு"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"பதிப்பு <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPNஐ நீக்கு"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"தற்போதுள்ள VPNஐ மாற்றியமைக்கவா?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"எப்போதும் இயங்கும் VPNஐ அமைக்கவா?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"வாரநாட்களில் காலை 9 மணி முதல் மாலை 5 மணி வரை\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"கேலெண்டர் நிகழ்வுகள்"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} செயலில் உள்ளது}=2{{mode_1} மற்றும் {mode_2} செயலில் உள்ளன}=3{{mode_1}, {mode_2} மற்றும் {mode_3} செயலில் உள்ளன}other{{mode_1}, {mode_2} மற்றும் கூடுதலாக # பயன்முறைகள் செயலில் உள்ளன}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 பயன்முறை தானாக இயங்கலாம்}other{# பயன்முறைகள் தானாக இயங்கலாம்}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ஆன்"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"அமைக்கப்படவில்லை"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"முடக்கப்பட்டுள்ளது"</string>
@@ -3751,7 +3782,7 @@
<string name="app_notifications_not_send_desc" msgid="5683060986735070528">"இந்த ஆப்ஸ் அறிவிப்புகளை அனுப்பாது"</string>
<string name="notification_channels" msgid="1502969522886493799">"வகைகள்"</string>
<string name="notification_channels_other" msgid="18159805343647908">"மற்றவை"</string>
- <string name="no_channels" msgid="4716199078612071915">"இந்த ஆப்ஸ் எந்த அறிவிப்புகளையும் இடுகையிடவில்லை"</string>
+ <string name="no_channels" msgid="4716199078612071915">"இந்த ஆப்ஸிலிருந்து எந்த அறிவிப்பும் வரவில்லை"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"பயன்படுத்தப்படாத வகைகளைக் காட்டு"</string>
<string name="app_settings_link" msgid="6725453466705333311">"ஆப்ஸில் உள்ள கூடுதல் அமைப்புகள்"</string>
<string name="show_unused_channels" msgid="4956292847964439078">"பயன்படுத்தப்படாத வகைகளைக் காட்டு"</string>
@@ -3984,7 +4015,7 @@
<string name="app_launch_open_domain_urls_title" msgid="4805388403977096285">"ஆதரிக்கப்படும் இணைப்புகளைத் திறத்தல்"</string>
<string name="app_launch_open_in_app" msgid="2208182888681699512">"ஆப்ஸில்"</string>
<string name="app_launch_open_in_browser" msgid="766170191853009756">"உங்கள் பிரவுசரில்"</string>
- <string name="app_launch_top_intro_message" msgid="9037324384325518290">"இந்த ஆப்ஸில் வலை இணைப்புகளைத் திறக்கும் முறையைத் தேர்வுசெய்க"</string>
+ <string name="app_launch_top_intro_message" msgid="9037324384325518290">"இந்த ஆப்ஸ் இணைய இணைப்பைத் திறக்கும் முறையைத் தேர்வுசெய்க"</string>
<string name="app_launch_links_category" msgid="2380467163878760037">"இந்த ஆப்ஸில் திறக்கப்பட வேண்டிய இணைப்புகள்"</string>
<string name="app_launch_supported_domain_urls_title" msgid="5088779668667217369">"ஆதரிக்கப்படும் இணைப்புகள்"</string>
<string name="app_launch_other_defaults_title" msgid="5674385877838735586">"பிற இயல்பான விருப்பத்தேர்வுகள்"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"சாதனம் மட்டும்"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"புதிய தொடர்புகளை ஒரு கணக்குடன் ஒத்திசைக்க முடியாது"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"இயல்பாகவே தொடர்புகள் உங்கள் சாதனத்தில் சேமிக்கப்படும், உங்கள் கணக்குடன் ஒத்திசைக்கப்படும்"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"இயல்புநிலையாக எதுவும் அமைக்கப்படவில்லை"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"இயல்புக் கணக்கை அமைப்பதில் பிழை"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"இயல்புக் கணக்கு அமைக்கப்படவில்லை"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"சாதனம் மட்டும்"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"தொடங்குவதற்கு ஒரு கணக்கைச் சேருங்கள்"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"வட்டமிட்டுத் தேடல்"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"முகப்பு பட்டனைத் தொட்டுப் பிடித்திருக்கவும் அல்லது திரையில் உள்ள உள்ளடக்கத்தைப் பயன்படுத்தித் தேடுவதற்கு ஹேண்டிலுக்குச் செல்லவும்."</string>
</resources>
diff --git a/res/values-te/arrays.xml b/res/values-te/arrays.xml
index 6bc7266..55b418e 100644
--- a/res/values-te/arrays.xml
+++ b/res/values-te/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"స్నోఫ్లేక్"</item>
<item msgid="7952183800501346803">"బీచ్ గొడుగు"</item>
<item msgid="799139025758265891">"వర్క్షాప్ టూల్స్"</item>
- <item msgid="1330084588359129896">"టెంట్"</item>
+ <item msgid="8112685757657659269">"పియానో"</item>
<item msgid="3861584909935022342">"ఫిల్మ్ రీల్"</item>
<item msgid="5827426100157335512">"పుస్తకం"</item>
<item msgid="8585828346253128384">"తామర పువ్వు"</item>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 83a4e86..ceec707 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"బ్లూటూత్ LE ఆడియోను డిజేబుల్ చేయండి"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"పరికరం గనుక LE ఆడియో హార్డ్వేర్ సామర్థ్యాలను సపోర్ట్ చేస్తే బ్లూటూత్ LE ఆడియో ఫీచర్ను డిజేబుల్ చేస్తుంది."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"బ్లూటూత్ LE ఆడియో మోడ్"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"పరికర వివరాలలో LE ఆడియో టోగుల్ను చూపండి"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"బ్లూటూత్ LE ఆడియో వైట్లిస్ట్ను బైపాస్ చేయండి"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"వైట్లిస్ట్ ప్రమాణాలకు అనుగుణంగా LE ఆడియో పెరిఫెరల్ వెరిఫై చేయబడనప్పటికీ ఆటోమేటిక్గా LE ఆడియోను ఉపయోగించండి."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"మీ నెట్వర్క్, వైర్లెస్ సిగ్నల్స్ను ఉపయోగించి ఆటోమేటిక్గా సెట్ చేయండి"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"ఆటోమేటిక్ టైమ్ జోన్"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"మీకు దగ్గరలో ఉన్న మొబైల్ నెట్వర్క్ల ఆధారంగా ఆటోమేటిక్గా సెట్ చేయబడింది"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"అందుబాటులో ఉంటే, మీ పరికర లొకేషన్తో ఆటోమేటిక్గా సెట్ చేయండి. యాక్టివ్ Wi-Fi కనెక్షన్ కూడా అవసరం."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"అందుబాటులో ఉంటే, మీ పరికర లొకేషన్తో ఆటోమేటిక్గా సెట్ చేయండి"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ఈ భాషలో వాడే ఫార్మాట్ను ఆటోమేటిక్ సెట్టింగ్గా ఉపయోగించండి"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-గంటల ఫార్మాట్ను ఉపయోగించండి"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"సమయం"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"ఏదైనా ఒక కీని వేగంగా మళ్లీ మళ్లీ నొక్కుతుంటే, కీబోర్డ్ దాన్ని విస్మరిస్తుంది"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"బౌన్స్ కీ పరిమితి"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"ఏదైనా ఒక కీని మళ్లీ మళ్లీ నొక్కుతుంటే మీ కీబోర్డ్ దాన్ని ఎంత సమయం పాటు విస్మరించాలో ఎంచుకోండి"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2 సెకన్లు"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4 సెకన్లు"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6 సెకన్లు"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 సెకన్లు"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 సెకన్లు"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 సెకన్లు"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"అనుకూలంగా మార్చుకోండి"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"అనుకూల విలువ"</string>
<string name="slow_keys" msgid="2891452895499690837">"నిదానంగా పనిచేసే కీలు"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"ఒక కీని నొక్కితే, అది యాక్టివేట్ అయ్యేందుకు పట్టే సమయాన్ని సర్దుబాటు చేస్తుంది"</string>
<string name="sticky_keys" msgid="7317317044898161747">"స్టిక్కీ కీలు"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"షార్ట్కట్ల కోసం కీలను కలిపి హోల్డ్ చేయడానికి బదులు ఒకసారి ఒక కీని నొక్కండి"</string>
<string name="mouse_keys" msgid="6237254627808525540">"మౌస్ కీలు"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"మీ కీబోర్డ్ను ఉపయోగించి పాయింటర్ను కంట్రోల్ చేయండి"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"మౌస్ రివర్స్ స్క్రోలింగ్"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"పేజీని కిందికి కదిలించడానికి పైకి స్క్రోల్ చేయండి"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"ఎడమ, కుడి బటన్లను మార్చండి"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ఎడమ మౌస్ బటన్ను, కుడి బటన్గా ఉపయోగించండి"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"కీబోర్డ్ షార్ట్కట్లు"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"షార్ట్కట్ల లిస్ట్ను చూడండి"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"కార్యాలయ ప్రొఫైల్ కీబోర్డ్లు & సాధనాలు"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> కొసం కొత్త కీని ఎంచుకోండి:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"ఫిజికల్ కీబోర్డ్ యాక్సెసిబిలిటీ"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"స్టిక్కీ కీలు, బౌన్స్ కీలు, మౌస్ కీలు"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"కీలను రిపీట్ చేయండి"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"రిపీట్ చేయడానికి ముందు జరిగిన ఆలస్యం"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"రిపీట్ రేటు"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"కీని వదిలేంత వరకు దాని క్యారెక్టర్ను రిపీట్ చేయడానికి ఆ కీని నొక్కి పట్టుకోండి"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> లేఅవుట్"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ఆటోమేటిక్"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"ఆటోమేటిక్: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ప్రివ్యూ"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"స్టాండర్డ్ ఆప్షన్లు"</string>
<string name="captioning_locale" msgid="5533303294290661590">"భాష"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"క్యాప్షన్ సైజ్"</string>
<string name="captioning_preset" msgid="4174276086501638524">"క్యాప్షన్ స్టయిల్"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"అనుకూల ఎంపికలు"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"నేపథ్య రంగు"</string>
@@ -2529,7 +2554,7 @@
<string name="power_usage_level_and_status" msgid="821521456989429593">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="power_discharge_remaining" msgid="6997529817917076536">"<xliff:g id="REMAIN">%1$s</xliff:g> ఉంది"</string>
<string name="power_charge_remaining" msgid="7046064326172265116">"<xliff:g id="UNTIL_CHARGED">%1$s</xliff:g>లోపు ఛార్జ్ చేయాలి"</string>
- <string name="power_usage_detail_screen_time" msgid="6027274749498485283">"పరికర వినియోగ వ్యవధి"</string>
+ <string name="power_usage_detail_screen_time" msgid="6027274749498485283">"స్క్రీన్ టైమ్"</string>
<string name="power_usage_detail_background_time" msgid="3661437083554322691">"బ్యాక్గ్రౌండ్ సమయం"</string>
<string name="low_battery_summary" msgid="4458925347316501953">"బ్యాటరీ తక్కువ ఉంది"</string>
<string name="background_activity_summary" msgid="3817376868497046016">"బ్యాక్గ్రౌండ్లో అమలు కావడానికి యాప్ను అనుమతించండి"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"శక్తి వినియోగాన్ని సర్దుబాటు చేయండి"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"చేర్చబడిన ప్యాకేజీలు"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"యాప్లు సాధారణంగా అమలు అవుతున్నాయి"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"బ్యాటరీ స్థాయి తక్కువగా ఉంది"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"బ్యాటరీ జీవితకాలాన్ని పెంచడానికి బ్యాటరీ సేవర్ను ఆన్ చేయండి"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"బ్యాటరీ జీవితకాలాన్ని మెరుగుపరుచుకోండి"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ఈ VPNను డిస్కనెక్ట్ చేయాలా?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"డిస్కనెక్ట్ చేయండి"</string>
<string name="vpn_version" msgid="6344167191984400976">"వెర్షన్"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"వెర్షన్ <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPNని విస్మరించు"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"ఇప్పటికే ఉన్న VPNని భర్తీ చేయాలా?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ఎల్లప్పుడూ ఆన్లో ఉండే VPNని సెట్ చేయాలా?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 AM - 5 PM వారపు రోజులు\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"క్యాలెండర్ ఈవెంట్లు"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} యాక్టివ్గా ఉంది}=2{{mode_1}, {mode_2} యాక్టివ్గా ఉన్నాయి}=3{{mode_1}, {mode_2}, {mode_3} యాక్టివ్గా ఉన్నాయి}other{{mode_1}, {mode_2}, మరో # యాక్టివ్గా ఉన్నాయి}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 మోడ్ ఆటోమేటిక్గా ఆన్ అవుతుంది}other{# మోడ్లు ఆటోమేటిక్గా ఆన్ అవుతాయి}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ఆన్ అయింది"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"సెట్ చేసి లేదు"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"డిజేబుల్ చేయబడింది"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"పరికరం మాత్రమే"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"కొత్త కాంటాక్ట్లు ఖాతాతో సింక్ అవ్వవు"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"కాంటాక్ట్లు మీ పరికరంలో సేవ్ అయ్యి, ఆటోమేటిక్గా మీ ఖాతాకు సింక్ అవుతాయి"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ఆటోమేటిక్ సెట్టింగ్ సెట్ చేయబడలేదు"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ఆటోమేటిక్ ఖాతాను సెట్ చేయడంలో ఎర్రర్ ఏర్పడింది"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ఆటోమేటిక్ సెట్టింగ్ సెట్ చేయబడలేదు"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"పరికరం మాత్రమే"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"ప్రారంభించడానికి ఒక ఖాతాను జోడించండి"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"సెర్చ్ చేయడానికి సర్కిల్ గీయండి"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"మీ స్క్రీన్పై ఉన్న కంటెంట్ను ఉపయోగించి సెర్చ్ చేయడానికి హోమ్ బటన్ లేదా నావిగేషన్ హ్యాండిల్ను నొక్కి, పట్టుకోండి."</string>
</resources>
diff --git a/res/values-th/arrays.xml b/res/values-th/arrays.xml
index 3d5a22f..665a87a 100644
--- a/res/values-th/arrays.xml
+++ b/res/values-th/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"เกล็ดหิมะ"</item>
<item msgid="7952183800501346803">"ร่มชายหาด"</item>
<item msgid="799139025758265891">"เครื่องมือเวิร์กช็อป"</item>
- <item msgid="1330084588359129896">"เต็นท์"</item>
+ <item msgid="8112685757657659269">"เปียโน"</item>
<item msgid="3861584909935022342">"ม้วนฟิล์ม"</item>
<item msgid="5827426100157335512">"หนังสือ"</item>
<item msgid="8585828346253128384">"ดอกบัว"</item>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index ec628f8..10c859a 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"ปิดใช้ Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"ปิดใช้ฟีเจอร์ Bluetooth LE Audio หากอุปกรณ์รองรับความสามารถของฮาร์ดแวร์ LE Audio"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"โหมด Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"แสดงปุ่มสลับ LE Audio ในรายละเอียดอุปกรณ์"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"ข้ามรายการที่อนุญาต Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"ใช้ LE Audio โดยค่าเริ่มต้นแม้ว่าอุปกรณ์ต่อพ่วง LE Audio จะไม่ได้รับการยืนยันว่าเป็นไปตามเกณฑ์รายการที่อนุญาตก็ตาม"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"ตั้งค่าอัตโนมัติโดยใช้เครือข่ายและสัญญาณไร้สาย"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"เขตเวลาอัตโนมัติ"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"ตั้งค่าโดยอัตโนมัติตามเครือข่ายมือถือที่อยู่ใกล้คุณ"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"ตั้งค่าโดยอัตโนมัติโดยใช้ตำแหน่งของอุปกรณ์ หากมี และอาจต้องเชื่อมต่อ Wi-Fi อยู่"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"ตั้งค่าโดยอัตโนมัติโดยใช้ตำแหน่งของอุปกรณ์ หากมี"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"ใช้รูปแบบเริ่มต้นในท้องถิ่น"</string>
<string name="date_time_24hour" msgid="286679379105653406">"ใช้รูปแบบ 24 ชั่วโมง"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"เวลา"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"การช่วยเหลือพิเศษ"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"แป้นพิมพ์จริง"</string>
<string name="bounce_keys" msgid="7419450970351743904">"คีย์ตีกลับ"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"แป้นพิมพ์จะละเว้นการกดปุ่มเดียวกันซ้ำๆ อย่างรวดเร็ว"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"เกณฑ์คีย์ตีกลับ"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"เลือกระยะเวลาที่แป้นพิมพ์จะละเว้นการกดปุ่มซ้ำ"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 วินาที"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 วินาที"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 วินาที"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"กำหนดเอง"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"ค่าที่กำหนดเอง"</string>
<string name="slow_keys" msgid="2891452895499690837">"เพิ่มระยะเวลาในการกดปุ่ม"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"ปรับเวลาที่ใช้ในการกดปุ่มเพื่อเปิดใช้งาน"</string>
<string name="sticky_keys" msgid="7317317044898161747">"คีย์ติดหนึบ"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"กดทีละปุ่มเพื่อใช้แป้นพิมพ์ลัดแทนการกดปุ่มค้างไว้พร้อมกัน"</string>
<string name="mouse_keys" msgid="6237254627808525540">"แป้นเมาส์"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"ใช้แป้นพิมพ์เพื่อควบคุมตัวชี้"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"การเลื่อนเมาส์แบบกลับด้าน"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"เลื่อนขึ้นเพื่อเลื่อนหน้าลง"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"สลับปุ่มซ้ายและขวา"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"ใช้ปุ่มเมาส์ด้านซ้ายเป็นปุ่มขวา"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"แป้นพิมพ์ลัด"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"แสดงรายการแป้นพิมพ์ลัด"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"เลือกคีย์ใหม่สำหรับ <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"การช่วยเหลือพิเศษด้วยแป้นพิมพ์จริง"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"คีย์ติดหนึบ คีย์ตีกลับ แป้นเมาส์"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"แป้นพิมพ์ซ้ำ"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"หน่วงเวลาก่อนพิมพ์ซ้ำ"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"อัตราการพิมพ์ซ้ำ"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"กดแป้นค้างไว้เพื่อพิมพ์อักขระซ้ำจนกว่าจะปล่อยแป้น"</string>
<string name="ime_label_title" msgid="8994569521516807168">"เลย์เอาต์ <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ค่าเริ่มต้น"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"อัตโนมัติ: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"ดูตัวอย่าง"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"ตัวเลือกมาตรฐาน"</string>
<string name="captioning_locale" msgid="5533303294290661590">"ภาษา"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"ขนาดคำบรรยายแทนเสียง"</string>
<string name="captioning_preset" msgid="4174276086501638524">"รูปแบบคำบรรยาย"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"ตัวเลือกที่กำหนดเอง"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"สีพื้นหลัง"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"ปรับการใช้พลังงาน"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"แพ็คเก็จที่รวมมาด้วย"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"แอปทำงานตามปกติ"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"ระดับแบตเตอรี่อ่อน"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"เปิดโหมดประหยัดแบตเตอรี่เพื่อยืดอายุการใช้งานแบตเตอรี่"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"เพิ่มอายุการใช้งานแบตเตอรี่"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"ยกเลิกการเชื่อมต่อ VPN นี้ไหม"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"ยกเลิกการเชื่อมต่อ"</string>
<string name="vpn_version" msgid="6344167191984400976">"รุ่น"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"เวอร์ชัน <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"ลืม VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"แทนที่ VPN ที่มีอยู่หรือไม่"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ตั้งค่า VPN แบบเปิดตลอดเวลาหรือไม่"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"09:00-17:00 น. วันธรรมดา\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"กิจกรรมในปฏิทิน"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} ทำงานอยู่}=2{{mode_1} และ {mode_2} ทำงานอยู่}=3{{mode_1}, {mode_2} และ {mode_3} ทำงานอยู่}other{{mode_1}, {mode_2} และอีก # โหมดทำงานอยู่}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 โหมดสามารถเปิดได้โดยอัตโนมัติ}other{# โหมดสามารถเปิดได้โดยอัตโนมัติ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"เปิด"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"ไม่ได้ตั้งค่า"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"ปิดอยู่"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"ค้นหาในการตั้งค่า"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"รายชื่อติดต่อ พื้นที่เก็บข้อมูล บัญชี"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"พื้นที่เก็บข้อมูลรายชื่อติดต่อ"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"ไม่ได้ตั้งค่าบัญชีเริ่มต้น"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"อุปกรณ์เท่านั้น"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"รายชื่อติดต่อใหม่จะไม่ซิงค์กับบัญชี"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"ระบบจะบันทึกรายชื่อติดต่อไว้ในอุปกรณ์และซิงค์กับบัญชีของคุณโดยค่าเริ่มต้น"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"เกิดข้อผิดพลาดในการตั้งค่าบัญชีเริ่มต้น"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"ไม่ได้ตั้งค่าบัญชีเริ่มต้น"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"อุปกรณ์เท่านั้น"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"เพิ่มบัญชีเพื่อเริ่มต้นใช้งาน"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"วงเพื่อค้นหา"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"แตะปุ่มหน้าแรกหรือแฮนเดิลนำทางค้างไว้เพื่อค้นหาโดยใช้เนื้อหาบนหน้าจอ"</string>
</resources>
diff --git a/res/values-tl/arrays.xml b/res/values-tl/arrays.xml
index 2a13662..6d1a881 100644
--- a/res/values-tl/arrays.xml
+++ b/res/values-tl/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Snowflake"</item>
<item msgid="7952183800501346803">"Beach umbrella"</item>
<item msgid="799139025758265891">"Mga tool sa workshop"</item>
- <item msgid="1330084588359129896">"Tent"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Film reel"</item>
<item msgid="5827426100157335512">"Libro"</item>
<item msgid="8585828346253128384">"Bulaklak na lotus"</item>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 0557ad3..adac83e 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"I-disable ang Bluetooth LE audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Dini-disable ang feature na Bluetooth LE audio kung sinusuportahan ng device ang mga kakayahan ng LE audio hardware."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio mode"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Ipakita ang toggle ng LE audio sa Mga Detalye ng Device"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"I-bypass ang Allowlist ng Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Gamitin ang LE Audio bilang default kahit na hindi pa na-verify ang peripheral ng LE Audio para matugunan ang mga pamantayan sa Allowlist."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Awtomatikong itakda gamit ang iyong network at mga wireless na signal"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Awtomatikong time zone"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Awtomatikong itakda batay sa mga mobile network na malapit sa iyo"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Awtomatikong itakda gamit ang lokasyon ng device kung available Baka kailangan ng koneksyon sa Wifi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Awtomatikong itakda gamit ang lokasyon ng iyong device, kung available"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Gamitin ang lokal na default"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Gamitin ang format na 24-oras"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Oras"</string>
@@ -622,7 +626,7 @@
<string name="private_space_cancel_label" msgid="379259667396956886">"Kanselahin"</string>
<string name="private_space_setup_button_label" msgid="2094882154623560585">"I-set up"</string>
<string name="private_space_setup_title" msgid="2272968244329821450">"Pribadong space"</string>
- <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Itago o i-lock ang mga pribadong space sa isang hiwalay na space. Gumamit ng nakalaang Google Account para sa karagdagang seguridad."</string>
+ <string name="private_space_hide_apps_summary" msgid="4418722947376042418">"I-hide o i-lock ang mga pribadong space sa isang hiwalay na space. Gumamit ng nakalaang Google Account para sa karagdagang seguridad."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Paano ito gumagana"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Gumawa ng Google Account para sa iyong space"</b>\n"Kung gumagamit ka ng nakalaang account, nakakatulong ito para hindi makita sa labas ng iyong space ang mga naka-sync na file, larawan, at email"</string>
<string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Magtakda ng lock"</b>\n"I-lock ang iyong space para mapigilan ang ibang taong buksan ito"</string>
@@ -658,7 +662,7 @@
<string name="private_space_choose_your_password_header" msgid="7660259341095044434">"Magtakda ng password sa pribadong space"</string>
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Magtakda ng pattern sa pribadong space"</string>
<string name="private_space_category_lock" msgid="1917657024358778169">"I-lock"</string>
- <string name="private_space_category_hide" msgid="3236587591523126649">"Itago"</string>
+ <string name="private_space_category_hide" msgid="3236587591523126649">"I-hide"</string>
<string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Kumpirmahin ang pattern ng pribadong space mo"</string>
<string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Ilagay ulit ang PIN ng pribadong space mo"</string>
<string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Ilagay ulit ang password ng pribadong space mo"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"Binabalewala ng keyboard ang mabilis na paulit-ulit na pagpindot sa iisang key"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Limitasyon ng bounce key"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Piliin kung gaano katagal babalewalain ng iyong keyboard ang paulit-ulit na pagpindot sa key"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Custom"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"custom na bilang"</string>
<string name="slow_keys" msgid="2891452895499690837">"Mga slow key"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"I-adjust kung gaano katagal bago ma-activate ang pagpindot ng key"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Mga sticky key"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Paisa-isang pumindot ng key para sa mga shortcut sa halip na sabay-sabay na pindutin ang mga key"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Mga mouse key"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"Gamitin ang iyong keyboard para kontrolin ang pointer"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Reverse na pag-scroll ng mouse"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Mag-scroll pataas para ibaba ang page"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Pagpalitin ang kaliwa at kanang button"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Gamitin ang kaliwang button ng mouse bilang iyong kanan"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Mga keyboard shortcut"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Ipakita ang listahan ng mga shortcut"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"Mga keyboard at tool ng profile sa trabaho"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Pumili ng bagong key para sa <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Accessibility ng pisikal na keyboard"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Mga sticky key, Mga bounce key, Mga mouse key"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Mga Umuulit na Key"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Pagkaantala bago umulit"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Rate ng Pag-uulit"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Pindutin nang matagal ang isang key para ulitin ang character nito hanggang sa bitawan ang key"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Layout na <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Default"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Awtomatiko: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"I-preview"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Mga karaniwang pagpipilian"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Wika"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Laki ng caption"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Istilo ng caption"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Mga custom na pagpipilian"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Kulay ng background"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Isaayos ang paggamit ng power"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Mga kasamang package"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Gumagana nang normal ang mga app"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Paubos na ang baterya"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"I-on ang Pantipid ng Baterya para patagalin ang baterya"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Patagalin ang baterya"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Putulin ang koneksyon ng VPN na ito?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Putulin ang koneksyon"</string>
<string name="vpn_version" msgid="6344167191984400976">"Bersyon"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Bersyon <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Kalimutan ang VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Gusto mo bang palitan ang dati nang VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Gusto mo bang itakda ang VPN na palaging naka-on?"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 AM - 5 PM tuwing weekday\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Mga event sa kalendaryo"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Aktibo ang {mode_1}}=2{Aktibo ang {mode_1} at {mode_2}}=3{Aktibo ang {mode_1}, {mode_2}, at {mode_3}}one{Aktibo ang {mode_1}, {mode_2}, at # pa}other{Aktibo ang {mode_1}, {mode_2}, at # pa}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mode ang puwedeng awtomatikong mag-on}one{# mode ang puwedeng awtomatikong mag-on}other{# na mode ang puwedeng awtomatikong mag-on}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"NAKA-ON"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Hindi nakatakda"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Naka-disable"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Device lang"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Hindi masi-sync sa account ang mga bagong contact"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"Ise-save sa iyong device at isi-sync sa iyong account bilang default ang mga contact"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Walang itinakdang default"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Nagka-error sa pagtatakda ng default na account"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Walang itinakdang default"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Device lang"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Magdagdag ng account para magsimula"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Circle to Search"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Pindutin nang matagal ang button ng Home o handle ng navigation para maghanap gamit ang content sa iyong screen."</string>
</resources>
diff --git a/res/values-tr/arrays.xml b/res/values-tr/arrays.xml
index b7e2f64..0a50c87 100644
--- a/res/values-tr/arrays.xml
+++ b/res/values-tr/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Kar tanesi"</item>
<item msgid="7952183800501346803">"Plaj şemsiyesi"</item>
<item msgid="799139025758265891">"Atölye araçları"</item>
- <item msgid="1330084588359129896">"Çadır"</item>
+ <item msgid="8112685757657659269">"Piyano"</item>
<item msgid="3861584909935022342">"Film rulosu"</item>
<item msgid="5827426100157335512">"Kitap"</item>
<item msgid="8585828346253128384">"Nilüfer çiçeği"</item>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 7cfc243..0a3c80d 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audio\'yu devre dışı bırak"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Cihaz, LE Audio donanımı özelliklerini destekliyorsa Bluetooth LE Audio özelliğini devre dışı bırakır."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio modu"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Cihaz Ayrıntıları\'nda LE Audio açma/kapatmayı göster"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio izin verilenler listesini atla"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio çevre biriminin, izin verilenler listesi kriterlerini karşıladığı doğrulanmamış olsa bile varsayılan olarak LE Audio\'yu kullanın."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Ağınızı ve kablosuz sinyallerinizi kullanarak otomatik olarak ayarlayın"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Otomatik saat dilimi"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Yakınınızdaki mobil ağlara göre otomatik olarak ayarlayın"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Varsa cihazınızın konumu ile otomatik olarak ayarlanır. Etkin bir kablosuz bağlantı da gerekebilir."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Varsa cihazınızın konumu ile otomatik olarak ayarlanır"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Yerel ayar varsayılan değerini kullan"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 saat biçimini kullan"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Saat"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Erişilebilirlik"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Fiziksel klavye"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Geri sekme tuşları"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Klavye, aynı tuşa hızlı bir şekilde tekrarlanan basma işlemlerini yoksayar"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Tekrarlı basmayı yoksayma tuş eşiği"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Klavyenizin, tuşlara ne kadar süre içinde tekrarlanan basma işlemlerini yoksayacağını seçin"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 saniye"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 saniye"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 saniye"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Özel"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"özel değer"</string>
<string name="slow_keys" msgid="2891452895499690837">"Yavaş tuşlar"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Bir tuşa basma işleminin etkinleştirileceği süreyi ayarlar"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Yapışkan tuşlar"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Tuşları aynı anda basılı tutmak yerine kısayollar için tek seferde bir tuşa basın"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Fare tuşları"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"İşaretçiyi kontrol etmek için klavyenizi kullanın"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Fare ters kaydırma"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Sayfayı aşağı taşımak için yukarı kaydırın"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Sol ve sağ düğmeleri değiştir"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Sol fare düğmesini sağ fare düğmesi olarak kullanın"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Klavye kısayolları"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Kısayol listesini göster"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> için yeni bir tuş seçin:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Fiziksel klavye erişilebilirliği"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Yapışkan tuşlar, geri sekme tuşları, fare tuşları"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Tuşları tekrarla"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Tekrardan önce geciktir"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Tekrarlama oranı"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Aynı karakteri tekrarlamak için ilgili tuşu basılı tutun. Tuş basılı tutulduğu sürece karakter tekrarlanır"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> düzeni"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Varsayılan"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Otomatik: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Önizle"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standart seçenekler"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Dil"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Altyazı boyutu"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Altyazı stili"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Özel seçenekler"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Arka plan rengi"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Pil kullanımını ayarla"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Dahil olan paketler"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Uygulamalar normal şekilde çalışıyor"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Düşük pil seviyesi"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Pil ömrünü uzatmak için Pil Tasarrufu özelliğini aç"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Pil ömrünü iyileştirme"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Bu VPN\'nin bağlantısı kesilsin mi?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Bağlantıyı kes"</string>
<string name="vpn_version" msgid="6344167191984400976">"Sürüm"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Sürüm <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN\'yi unut"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Mevcut VPN değiştirilsin mi?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Her zaman açık VPN ayarlansın mı?"</string>
@@ -3276,7 +3298,7 @@
<string name="keywords_factory_data_reset" msgid="4979623326958976773">"temizleme, silme, geri yükleme, kaldırma, fabrika ayarlarına sıfırlama"</string>
<string name="keywords_printing" msgid="3528250034669909466">"yazıcı"</string>
<string name="keywords_sounds" msgid="187191900698371911">"hoparlör bip sesi, hoparlör, ses düzeyi, sesi kapatma, sessiz, ses, müzik, dokunma teknolojisi, titreşim, titreşme"</string>
- <string name="keywords_sounds_and_notifications_interruptions" msgid="1500312884808362467">"rahatsız etmeyin, kesme, kesinti, kopma"</string>
+ <string name="keywords_sounds_and_notifications_interruptions" msgid="1500312884808362467">"rahatsız etmeyin, kesme, kesinti, araya girme"</string>
<string name="keywords_app" msgid="7983814237980258061">"RAM"</string>
<string name="keywords_location" msgid="8016374808099706213">"etrafta, konum, geçmiş, raporlama, GPS"</string>
<string name="keywords_accounts" msgid="3013897982630845506">"hesap, hesap ekle, iş profili, hesap ekleme, kaldır, sil"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"hafta içi 09:00-17:00\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Takvim etkinlikleri"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} etkin}=2{{mode_1} ve {mode_2} etkin}=3{{mode_1}, {mode_2} ve {mode_3} etkin}other{{mode_1}, {mode_2} ve # mod daha etkin}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 mod otomatik olarak etkinleştirilebilir}other{# mod otomatik olarak etkinleştirilebilir}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"AÇIK"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Ayarlanmadı"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Devre dışı"</string>
@@ -3822,7 +3845,7 @@
<string name="zen_mode_from_no_conversations" msgid="3924593219855567165">"Yok"</string>
<string name="zen_mode_conversations_count" msgid="3199310723073707153">"{count,plural, =0{Yok}=1{1 görüşme}other{# görüşme}}"</string>
<string name="zen_mode_from_conversations_settings" msgid="2411930666794576607">"Görüşme ayarları"</string>
- <string name="zen_mode_people_calls_messages_section_title" msgid="6815202112413762206">"Kimler kesintiye neden olabilir?"</string>
+ <string name="zen_mode_people_calls_messages_section_title" msgid="6815202112413762206">"Kimler rahatsız edebilir?"</string>
<string name="zen_mode_people_footer" msgid="7710707353004137431">"Mesajlaşma veya arama uygulamaları size bildirim gönderemese bile burada seçtiğiniz kişiler bu uygulamalar üzerinden size erişebilirler"</string>
<string name="zen_mode_calls_title" msgid="2078578043677037740">"Aramalar"</string>
<string name="zen_mode_calls" msgid="7653245854493631095">"Aramalar"</string>
@@ -3837,7 +3860,7 @@
<string name="zen_mode_messages_list" msgid="5431014101342361882">"mesajlar"</string>
<string name="zen_mode_messages_title" msgid="1777598523485334405">"Mesajlar"</string>
<string name="zen_mode_messages_header" msgid="253721635061451577">"Kesintiye neden olabilecek mesajlar"</string>
- <string name="zen_mode_messages_footer" msgid="6002468050854126331">"İzin verilen mesajların ses çıkardığından emin olmak için cihazınızın çalmaya ayarlı olduğundan emin olun"</string>
+ <string name="zen_mode_messages_footer" msgid="6002468050854126331">"İzin verilen mesajlardan sesli uyarı alabilmek için için cihazınızın zil sesi çıkaracak şekilde ayarlı olduğundan emin olun"</string>
<string name="zen_mode_custom_messages_footer" msgid="7545180036949550830">"\"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>\" için gelen mesajlar engelleniyor. Arkadaşlarınız, aileniz veya diğer kişilerin size ulaşmasına izin vermek için ayarları düzenleyebilirsiniz."</string>
<string name="zen_mode_all_messages_summary" msgid="3756267858343104554">"Tüm mesajlar size ulaşabilir"</string>
<string name="zen_mode_all_calls_summary" msgid="7337907849083824698">"Tüm aramalar size ulaşabilir"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Ayarlar\'da ara"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kişiler, depolama alanı, hesap"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kişi deposu"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Varsayılan ayar yok"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Yalnızca cihaz"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Yeni kişiler bir hesapla senkronize edilmez"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Kişiler varsayılan olarak cihazınıza kaydedilir ve hesabınızla senkronize edilir"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Varsayılan hesap ayarlanırken hata oluştu"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Varsayılan ayar yok"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Yalnızca cihaz"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Başlamak için hesap ekleyin"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Seçerek Arat"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Ekranınızdaki içerikleri kullanarak arama yapmak için ana sayfa düğmesine veya gezinme tutma yerine dokunup basılı tutun."</string>
</resources>
diff --git a/res/values-uk/arrays.xml b/res/values-uk/arrays.xml
index 45639e5..47028b9 100644
--- a/res/values-uk/arrays.xml
+++ b/res/values-uk/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Сніжинка"</item>
<item msgid="7952183800501346803">"Пляжна парасоля"</item>
<item msgid="799139025758265891">"Інструменти для майстерні"</item>
- <item msgid="1330084588359129896">"Намет"</item>
+ <item msgid="8112685757657659269">"Піаніно"</item>
<item msgid="3861584909935022342">"Кіноплівка"</item>
<item msgid="5827426100157335512">"Книга"</item>
<item msgid="8585828346253128384">"Квітка лотоса"</item>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ad50504..694253f 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Вимкнути Bluetooth LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Вимикає функцію Bluetooth LE Audio, якщо пристрій підтримує апаратні можливості LE Audio."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Режим Bluetooth LE Audio"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Перемикач LE Audio в інф. про пристрій"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Обходити білий список Bluetooth LE Audio"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio використовуватиметься за умовчанням, навіть якщо периферійний пристрій LE Audio не перевірено на відповідність критеріям білого списку."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Визначати автоматично за допомогою мережі й бездротових сигналів"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Автоматичний часовий пояс"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Визначати автоматично на основі мобільних мереж поблизу"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Визначати автоматично на основі геоданих пристрою (якщо доступно). Також може знадобитися активне з’єднання Wi-Fi."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Визначати автоматично на основі геоданих пристрою (якщо доступно)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Використовувати місцеві налаштування за умовчанням"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24-годинний формат"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Час"</string>
@@ -625,7 +629,7 @@
<string name="private_space_hide_apps_summary" msgid="4418722947376042418">"Приховуйте або блокуйте приватні додатки в окремому просторі. Задля додаткової безпеки використовуйте окремий обліковий запис Google."</string>
<string name="private_space_setup_sub_header" msgid="550476876393954356">"Як це працює"</string>
<string name="private_space_separate_account_text" msgid="790319706810190320"><b>"Створіть обліковий запис Google для свого простору"</b>\n"Якщо ви використовуватимете окремий обліковий запис, то файли, фотографії і електронна пошта не синхронізуватимуться за межами вашого простору"</string>
- <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Налаштуйте блокування"</b>\n"Блокуйте свій простір, щоб інші користувачі не мали доступу до нього."</string>
+ <string name="private_space_protected_lock_text" msgid="9123250938334372735"><b>"Налаштуйте блокування"</b>\n"Блокуйте свій простір, щоб інші користувачі не мали доступу до нього"</string>
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Установіть додатки"</b>\n"Установіть додатки, які хочете приватно використовувати у своєму просторі"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Важливо"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Під час блокування простору додатки припиняють роботу"</b>\n"Якщо ви заблокуєте свій простір, включені в нього додатки припинять роботу й ви не отримуватимете сповіщень від них"</string>
@@ -657,8 +661,8 @@
<string name="private_space_choose_your_pin_header" msgid="4560802934975898265">"Створіть PIN-код для особистого простору"</string>
<string name="private_space_choose_your_password_header" msgid="7660259341095044434">"Установіть пароль особистого простору"</string>
<string name="private_space_choose_your_pattern_header" msgid="2165607102459936724">"Налаштуйте ключ для особистого простору"</string>
- <string name="private_space_category_lock" msgid="1917657024358778169">"Заблокувати"</string>
- <string name="private_space_category_hide" msgid="3236587591523126649">"Приховати"</string>
+ <string name="private_space_category_lock" msgid="1917657024358778169">"Блокування"</string>
+ <string name="private_space_category_hide" msgid="3236587591523126649">"Приховування"</string>
<string name="private_space_confirm_your_pattern_header" msgid="449382220134788771">"Підтвердьте ключ для приватного простору"</string>
<string name="private_space_confirm_your_pin_header" msgid="4543332157470087796">"Введіть PIN-код для приватного простору ще раз"</string>
<string name="private_space_confirm_your_password_header" msgid="9202308075814307169">"Введіть пароль приватного простору ще раз"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Доступність"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Фізична клавіатура"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Ігнорувати повторне натискання"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Клавіатура ігнорує кілька натискань однієї клавіші поспіль"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Поріг ігнорування повт. натискання"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Виберіть, протягом якого часу клавіатура ігноруватиме кілька натискань однієї клавіші"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 с"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 с"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 с"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Спеціальне"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"Спеціальне значення"</string>
<string name="slow_keys" msgid="2891452895499690837">"Повільні клавіші"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Установлює проміжок часу, через який клавіша реагує на натискання"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Залипання клавіш"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Натискайте клавіші по одній, замість того щоб утримувати їх одночасно"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Клавіші для керування мишею"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Щоб керувати курсором, використовуйте клавіатуру"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Зворотне прокручування мишею"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Прокручувати вгору, щоб переміщатися сторінкою вниз"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Поміняти місцями ліву й праву кнопки"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Використовувати ліву кнопку миші як праву"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Комбінації клавіш"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Показати список комбінацій клавіш"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Виберіть нову клавішу для <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Функції доступності фізичної клавіатури"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Залипання клавіш, ігнорування повторного натискання клавіш, клавіші для керування мишею"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Повторювати введення символів клавіш"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Затримка перед повторенням"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Швидкість повторення"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Якщо ви втримуватимете клавішу, введення відповідного символу повторюватиметься, доки ви її не відпустите"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Розкладка <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"За умовчанням"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Автоматична розкладка: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2236,7 +2254,7 @@
<string name="accessibility_shortcut_edit_dialog_summary_software" msgid="8315934725362849788">"Натисніть кнопку функцій доступності <xliff:g id="ACCESSIBILITY_ICON">%s</xliff:g> унизу екрана. Щоб переключитися між функціями, натисніть і утримуйте цю кнопку."</string>
<string name="accessibility_shortcut_edit_dialog_summary_gesture" msgid="2081123009255579884">"{count,plural, =1{Проведіть пальцем угору від низу екрана. Щоб переключитися між функціями, проведіть пальцем угору й утримуйте його.}one{Проведіть # пальцем угору від низу екрана. Щоб переключитися між функціями, проведіть по екрану знизу вгору # пальцем і утримуйте їх.}few{Проведіть # пальцями вгору від низу екрана. Щоб переключитися між функціями, проведіть по екрану знизу вгору # пальцями й утримуйте їх.}many{Проведіть # пальцями вгору від низу екрана. Щоб переключитися між функціями, проведіть по екрану знизу вгору # пальцями й утримуйте їх.}other{Проведіть # пальця вгору від низу екрана. Щоб переключитися між функціями, проведіть по екрану знизу вгору # пальця й утримуйте їх.}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_software_floating" msgid="4459254227203203324"><annotation id="link">"Інші опції"</annotation></string>
- <string name="footer_learn_more_content_description" msgid="8843798273152131341">"Докладніше про сервіс <xliff:g id="SERVICE">%1$s</xliff:g>"</string>
+ <string name="footer_learn_more_content_description" msgid="8843798273152131341">"Докладніше про сервіс \"<xliff:g id="SERVICE">%1$s</xliff:g>\""</string>
<string name="accessibility_shortcut_edit_dialog_title_quick_settings" msgid="140959604014177304">"Швидкі налаштування"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings" msgid="739883998754165940">"{count,plural, =1{Проведіть пальцем униз від верхнього краю екрана}one{Проведіть # пальцем униз від верхнього краю екрана}few{Проведіть # пальцями вниз від верхнього краю екрана}many{Проведіть # пальцями вниз від верхнього краю екрана}other{Проведіть # пальця вниз від верхнього краю екрана}}"</string>
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw" msgid="4216628328191609785">"{count,plural, =1{Проведіть пальцем униз від верхнього краю екрана. Ця швидка команда стане доступною, коли ви налаштуєте пристрій.}one{Проведіть # пальцем униз від верхнього краю екрана. Ця швидка команда стане доступною, коли ви налаштуєте пристрій.}few{Проведіть # пальцями вниз від верхнього краю екрана. Ця швидка команда стане доступною, коли ви налаштуєте пристрій.}many{Проведіть # пальцями вниз від верхнього краю екрана. Ця швидка команда стане доступною, коли ви налаштуєте пристрій.}other{Проведіть # пальця вниз від верхнього краю екрана. Ця швидка команда стане доступною, коли ви налаштуєте пристрій.}}"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Переглянути"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Стандартні параметри"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Мова"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Розмір субтитрів"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Стиль субтитрів"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Спеціальні параметри"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Колір фону"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Режим енергоспоживання"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Уключені пакети"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Додатки працюють звичайно"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Низький заряд акумулятора"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Щоб подовжити час роботи акумулятора, увімкніть режим енергозбереження"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Подовжте час роботи акумулятора"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Відключити цю мережу VPN?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Відключити"</string>
<string name="vpn_version" msgid="6344167191984400976">"Версія"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Версія <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Забути мережу VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Замінити наявну мережу VPN?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Увімкнути постійну мережу VPN?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"09:00–17:00 у будні\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Події в календарі"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Активовано режим \"{mode_1}\"}=2{Активовано режими \"{mode_1}\" і \"{mode_2}\"}=3{Активовано режими \"{mode_1}\", \"{mode_2}\" і \"{mode_3}\"}one{Активовано режими \"{mode_1}\", \"{mode_2}\" і ще #}few{Активовано режими \"{mode_1}\", \"{mode_2}\" і ще #}many{Активовано режими \"{mode_1}\", \"{mode_2}\" і ще #}other{Активовано режими \"{mode_1}\", \"{mode_2}\" і ще #}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 режим може вмикатись автоматично}one{# режим може вмикатись автоматично}few{# режими можуть вмикатись автоматично}many{# режимів можуть вмикатись автоматично}other{# режиму можуть вмикатись автоматично}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"УВІМКНЕНО"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Не налаштовано"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Вимкнено"</string>
@@ -5434,7 +5457,7 @@
<string name="audio_streams_dialog_retry" msgid="4456843891970998556">"Повторити спробу"</string>
<string name="audio_streams_dialog_listen_to_audio_stream" msgid="8585253007762261528">"Слухайте потокове аудіо"</string>
<string name="audio_streams_dialog_control_volume" msgid="7615062686016713544">"Потокове аудіо відтворюватиметься на пристрої <xliff:g id="DEVICE_NAME">%1$s</xliff:g>. Керуйте гучністю за допомогою цього пристрою."</string>
- <string name="audio_streams_dialog_cannot_listen" msgid="4432257183698209966">"Не чути потокове аудіо"</string>
+ <string name="audio_streams_dialog_cannot_listen" msgid="4432257183698209966">"Помилка відтворення"</string>
<string name="audio_streams_dialog_default_device" msgid="6159800303379303266">"підключені сумісні навушники"</string>
<string name="audio_streams_activity_title" msgid="6766869545769831935">"Аудіопотоки"</string>
<string name="audio_streams_no_password_summary" msgid="8976357323034830144">"Без пароля"</string>
@@ -5464,13 +5487,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Шукати в налаштуваннях"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"контакти, пам’ять, обліковий запис"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Пам’ять контактів"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Немає параметра за умовчанням"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Лише на пристрої"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Нові контакти не синхронізуватимуться з обліковим записом"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Контакти будуть зберігатися на пристрої і за умовчанням синхронізуватися з обліковим записом"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Не вдалося налаштувати обліковий запис за умовчанням"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Немає облікового запису за умовчанням"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Лише на пристрої"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Щоб почати, додайте обліковий запис"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Обвести й знайти"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Натисніть і втримуйте кнопку головного екрана або маркер навігації, щоб здійснити пошук за вмістом на екрані."</string>
</resources>
diff --git a/res/values-ur/arrays.xml b/res/values-ur/arrays.xml
index 4563275..4fe0dfe 100644
--- a/res/values-ur/arrays.xml
+++ b/res/values-ur/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"برف کا گولا"</item>
<item msgid="7952183800501346803">"ساحل کی چھتری"</item>
<item msgid="799139025758265891">"ورکشاپ ٹولز"</item>
- <item msgid="1330084588359129896">"خیمہ"</item>
+ <item msgid="8112685757657659269">"پیانو"</item>
<item msgid="3861584909935022342">"فلم ریل"</item>
<item msgid="5827426100157335512">"کتاب"</item>
<item msgid="8585828346253128384">"کنول کا پھول"</item>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 504284e..7e0cbec 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"بلوٹوتھ LE آڈیو غیر فعال کریں"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"اگر آلہ LE آڈیو ہارڈویئر کی صلاحیتوں کو سپورٹ کرتا ہے تو یہ بلوٹوتھ LE آڈیو خصوصیت کو غیر فعال کر دے گا۔"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"بلوٹوتھ LE آڈیو وضع"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"آلے کی تفصیلات میں LE آڈیو ٹوگل کریں دکھائیں"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"بلوٹوتھ LE آڈیو کی اجازت یافتہ فہرست کو بائی پاس کریں"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"اجازت یافتہ کی فہرست کے معیار کو پورا کرنے کے لیے LE آڈیو پیریفرل کی تصدیق کے نہ ہونے کے باوجود LE آڈیو کو بطور ڈیفالٹ استعمال کریں۔"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"اپنے نیٹ ورک اور وائرلیس سگنلز کا استعمال کرتے ہوئے خود بخود سیٹ کریں"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"خودکار ٹائم زون"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"اپنے قریب کے موبائل نیٹ ورکس کی بنیاد پر خود بخود سیٹ کریں"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"دستیاب ہونے پر اپنے آلہ کا مقام استعمال کرتے ہوئے خود بخود سیٹ کریں۔ ایک فعال WiFi کنکشن بھی درکار ہو سکتا ہے۔"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"دستیاب ہونے پر اپنے آلہ کا مقام استعمال کر کے خودکار طور پر سیٹ کریں"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"مقامی ڈیفالٹ کا استعمال کریں"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 گھنٹے کا فارمیٹ استعمال کریں"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"وقت"</string>
@@ -1949,15 +1953,37 @@
<string name="bounce_keys_summary" msgid="7418024428905737729">"کی بورڈ ایک ہی کلید کے بار بار فوری طور پر دبانے کو نظر انداز کرتا ہے"</string>
<string name="bounce_keys_dialog_title" msgid="4088646362538368693">"باؤنس کلید کی حد"</string>
<string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"کی بورڈ کے بار بار کلید کو دبانے کو نظر انداز کرنے کے وقت کا انتخاب کریں"</string>
- <string name="bounce_keys_dialog_option_200" msgid="7876774697200082558">"0.2s"</string>
- <string name="bounce_keys_dialog_option_400" msgid="8146580138675322657">"0.4s"</string>
- <string name="bounce_keys_dialog_option_600" msgid="6166166103942612488">"0.6s"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 سیکنڈ"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 سیکنڈ"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 سیکنڈ"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"حسب ضرورت"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"مخصوص قدر"</string>
<string name="slow_keys" msgid="2891452895499690837">"سلو کلیدیں"</string>
<string name="slow_keys_summary" msgid="2914214326648535377">"کلید دبانے کو فعال کرنے میں لگنے والے وقت کو ایڈجسٹ کرتا ہے"</string>
<string name="sticky_keys" msgid="7317317044898161747">"دبی رہنے والی کلیدیں"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"کلیدوں کو ایک ساتھ نیچے کی طرف پکڑے رکھنے کے بجائے، شارٹ کٹس کیلئے ایک وقت میں ایک کلید دبائیں"</string>
<string name="mouse_keys" msgid="6237254627808525540">"ماؤس کیز"</string>
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
<string name="mouse_keys_summary" msgid="7030731235143286467">"پوائنٹر کو کنٹرول کرنے کے لیے اپنا کی بورڈ استعمال کریں"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"ماؤس کی معکوس اسکرولنگ"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"صفحہ کو نیچے منتقل کرنے کے لیے اوپر اسکرول کریں"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"بائیں اور دائیں بٹنز کو سویپ کریں"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"بائیں ماؤس کے بٹن کو اپنے دائیں کے طور پر استعمال کریں"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
+ <skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"کی بورڈ شارٹ کٹس"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"شارٹ کٹس کی فہرست دکھائیں"</string>
<string name="language_and_input_for_work_category_title" msgid="2546950919124199743">"دفتری پروفائل کے کی بورڈز اور ٹولز"</string>
@@ -2026,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> کے لیے نئی کلید منتخب کریں:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"فزیکل کی بورڈ ایکسیسبیلٹی"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"دبی رہنے والی کلیدیں، باؤنس کلیدیں، ماؤس کلیدیں"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"تکرار کی کلیدیں"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"دہرانے سے پہلے تاخیر"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"تکرار کی شرح"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"اس کے کردار کو دہرانے کے لیے کلید کے ریلیز ہونے تک کلید کو دبائے رکھیں"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> لے آؤٹ"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"ڈیفالٹ"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"خودکار: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2434,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"پیش منظر دیکھیں"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"معیاری اختیارات"</string>
<string name="captioning_locale" msgid="5533303294290661590">"زبان"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"کیپشن کا سائز"</string>
<string name="captioning_preset" msgid="4174276086501638524">"کیپشن کا طرز"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"حسب ضرورت اختیارات"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"پس منظر کا رنگ"</string>
@@ -2562,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"پاور کا استعمال ایڈجسٹ کریں"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"شامل کردہ پیکیجز"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"ایپس حسب معمول چل رہی ہیں"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"بیٹری لیول کم ہے"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"بیٹری لائف کو بڑھانے کے لیے بیٹری سیور آن کریں"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"بیٹری لائف کو بہتر بنائیں"</string>
@@ -2979,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"اس VPN سے غیر منسلک کریں؟"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"غیر منسلک کریں"</string>
<string name="vpn_version" msgid="6344167191984400976">"ورژن"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"ورژن <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPN بھول جائیں"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"موجودہ VPN بدلیں؟"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"ہمیشہ آن VPN سیٹ کریں؟"</string>
@@ -3401,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"ہفتے کے دن صبح 9 بجے سے شام 5 بجے تک\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"کیلنڈر ایونٹس"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} فعال ہے}=2{{mode_1} اور {mode_2} فعال ہیں}=3{{mode_1}، {mode_2} اور {mode_3} فعال ہیں}other{{mode_1}، {mode_2} اور # مزید فعال ہیں}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 موڈ خودکار طور پر آن ہو سکتا ہے}other{# موڈز خودکار طور پر آن ہو سکتے ہیں}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"آن ہے"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"سیٹ نہیں ہے"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"غیر فعال ہے"</string>
@@ -5457,6 +5488,10 @@
<string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"صرف آلہ"</string>
<string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"نئے رابطے کسی اکاؤنٹ کے ساتھ مطابقت پذیر نہیں ہوں گے"</string>
<string name="contacts_storage_selection_message" msgid="8082077300632059003">"رابطے آپ کے آلے میں محفوظ کیے جائیں گے اور آپ کے اکاؤنٹ میں بطور ڈیفالٹ مطابقت پذیر ہوں گے"</string>
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"کوئی ڈیفالٹ سیٹ نہیں ہے"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"ڈیفالٹ اکاؤنٹ کو ترتیب دینے میں خرابی"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"کوئی ڈیفالٹ سیٹ نہیں ہے"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"صرف آلہ"</string>
<string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"شروع کرنے کیلئے ایک اکاؤنٹ شامل کریں"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"تلاش کرنے کیلئے دائرہ بنائیں"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"اپنی اسکرین پر موجود مواد کو استعمال کر کے تلاش کرنے کے لیے ہوم بٹن یا نیویگیشن ہینڈل کو ٹچ کریں اور دبائے رکھیں۔"</string>
</resources>
diff --git a/res/values-uz/arrays.xml b/res/values-uz/arrays.xml
index 8764027..60c7df9 100644
--- a/res/values-uz/arrays.xml
+++ b/res/values-uz/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Qor parchasi"</item>
<item msgid="7952183800501346803">"Sohil soyaboni"</item>
<item msgid="799139025758265891">"Asbob-uskunalar"</item>
- <item msgid="1330084588359129896">"Chodir"</item>
+ <item msgid="8112685757657659269">"Pianino"</item>
<item msgid="3861584909935022342">"Plyonka ruloni"</item>
<item msgid="5827426100157335512">"Kitob"</item>
<item msgid="8585828346253128384">"Lotus guli"</item>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 79e0452..881c12b 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Bluetooth LE Audioni faolsizlantirish"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Qurilmada LE audio apparatli taʼminoti boʻlsa, Bluetooth LE audio funksiyasi faolsizlantiriladi."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth LE Audio rejimi"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Qurilma axborotida LE audio tugmasi chiqsin"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bluetooth LE Audio ruxsat roʻyxatini chetlash"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"LE Audio aloqasidan birlamchi holatda foydalanish, hatto qurilmaning ruxsat olishga muvofiqligi tekshirilmagan boʻlsa ham."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Qurilmadagi tarmoq va simsiz signallar orqali avtomatik sozlash"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Avtomatik vaqt mintaqasi"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Atrofdagi mobil tarmoq asosida avtomatik sozlash"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Geo-joylashuv asosida avtomatik sozlash. Wi-Fi aloqasi talab etilishi mumkin."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Geo-joylashuv asosida avtomatik sozlash"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Birlamchi hududiy sozlamalar"</string>
<string name="date_time_24hour" msgid="286679379105653406">"24 soatlik format"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Vaqt"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Qulayliklar"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Tashqi klaviatura"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Qayta bosishni nazorat qilish"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Klaviaturada bir tugmaning tez takroriy bosilishi inkor etiladi"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Takroriy bosishlar intervali"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Klaviaturada tugmaning takroriy bosilishi qancha vaqt inkor etilishini tanlang"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Boshqa"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"boshqa qiymat"</string>
<string name="slow_keys" msgid="2891452895499690837">"Sekin tugmalar"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Tugmani bosish intervali hamda uning amalini sozlash"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Yopishqoq tugmalar"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Barcha tugmalar kombinatsiyasini bosib turish oʻrniga ularni birma-bir bosing"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Sinchqoncha tugmalari"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Kursorni klaviatura orqali boshqarish"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Sichqonchada teskari varaqlash"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Sahifani pastga varaqlash uchun tepaga suring"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Chap va oʻng tugmalarni almashtirish"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Sichqonchada chap tugmani oʻng tugma sifatida ishlatish"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Tezkor tugmalar"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Tezkor tugmalar roʻyxatini ochish"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g> uchun yangi tugma tanlang:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Jismoniy klaviatura uchun qulayliklar"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Yopishqoq tugmalar, qayta bosish boshqaruvi, sichqonchani boshqarish tugmalari"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Takrorlash tugmalari"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Takror kiritishdan oldin kechiktirish"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Takror kiritish tezligi"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Kalit chiqarilmaguncha uning belgisini takrorlash uchun tugmani bosib turing"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> sxemasi"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Standart"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Avtomatik: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Dastlabki ko‘rib chiqish"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Standart sozlamalar"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Til"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Tagyozuv hajmi"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Taglavhalar uslubi"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Buyurtmali tanlamalar"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Fon rangi"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Quvvatdan foydalanishni moslash"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Quyidagi paketlarni o‘z ichiga oladi"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Ilovalar odatdagidek ishlamoqda"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Batareya quvvati kam"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Batareya quvvatini tejash uchun Quvvat tejash funksiyasini yoqing"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Batareya quvvatini uzoqroq vaqtga yetkazing"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Bu VPN bilan aloqa uzilsinmi?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Aloqani uzish"</string>
<string name="vpn_version" msgid="6344167191984400976">"Versiya"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Versiya <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"VPNni o‘chirish"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Mavjud VPN tarmog‘i almashtirilsinmi?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Doimiy VPN o‘rnatilsinmi?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9:00 — 17:00 begim kunlari\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Taqvimdagi tadbirlar"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{{mode_1} faol}=2{{mode_1} va {mode_2} faol}=3{{mode_1}, {mode_2} va {mode_3} faol}other{{mode_1}, {mode_2} va # tasi faol}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 ta rejim avtomatik yoqilishi mumkin}other{# ta rejim avtomatik yoqilishi mumkin}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"YONIQ"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Sozlanmagan"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Yoqilmagan"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Qidiruv sozlamalari"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"kontaktlar, xotira, hisob"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Kontaktlar ombori"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Asosiy hisob tayinlanmagan"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Faqat qurilmada"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Yangi kontaktlar hisobga sinxronlanmaydi"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Birlamchi holatda kontaktlar qurilmada saqlanadi va hisobga sinxronlanadi"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Birlamchi hisob tanlanmadi"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Birlamchi hisob tanlanmagan"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Faqat qurilmada"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Avval hisob qoʻshing"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Chizib qidirish"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Ekrandagi kontent orqali qidirish uchun Asosiy tugmani yoki navigatsiya panelini bosib turing"</string>
</resources>
diff --git a/res/values-vi/arrays.xml b/res/values-vi/arrays.xml
index 7763c19..550c7e0 100644
--- a/res/values-vi/arrays.xml
+++ b/res/values-vi/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"Bông tuyết"</item>
<item msgid="7952183800501346803">"Dù che trên bãi biển"</item>
<item msgid="799139025758265891">"Công cụ trong xưởng"</item>
- <item msgid="1330084588359129896">"Lều"</item>
+ <item msgid="8112685757657659269">"Piano"</item>
<item msgid="3861584909935022342">"Cuộn phim"</item>
<item msgid="5827426100157335512">"Sách"</item>
<item msgid="8585828346253128384">"Hoa sen"</item>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index c0cd408..be1fe8d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Tắt âm thanh năng lượng thấp qua Bluetooth"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Tắt tính năng âm thanh năng lượng thấp qua Bluetooth nếu thiết bị hỗ trợ chức năng phần cứng âm thanh năng lượng thấp."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Bluetooth Âm thanh năng lượng thấp"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Hiện nút bật/tắt Âm thanh năng lượng thấp"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Bỏ qua danh sách cho phép đối với tính năng Bluetooth Âm thanh năng lượng thấp"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Sử dụng Âm thanh năng lượng thấp theo mặc định, ngay cả khi chưa xác minh được rằng thiết bị ngoại vi Âm thanh năng lượng thấp đáp ứng tiêu chí của danh sách cho phép."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Tự động đặt dựa trên tín hiệu không dây và mạng của bạn"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Múi giờ tự động"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Tự động đặt dựa trên các mạng di động gần bạn"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Tự động đặt dựa trên vị trí thiết bị của bạn, nếu có. Có thể cần kết nối Wi-Fi đang hoạt động."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Tự động đặt dựa trên vị trí thiết bị của bạn, nếu có"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Sử dụng định dạng của địa phương"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Sử dụng định dạng 24 giờ"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Giờ"</string>
@@ -629,8 +633,8 @@
<string name="private_space_install_apps_text" msgid="8072027796190028830"><b>"Cài đặt ứng dụng"</b>\n"Cài đặt những ứng dụng bạn muốn giữ riêng tư trong không gian của mình"</string>
<string name="private_space_keep_in_mind_text" msgid="7721081172657563800">"Lưu ý"</string>
<string name="private_space_apps_stopped_text" msgid="4034574118911250169"><b>"Các ứng dụng sẽ bị dừng khi bạn khoá không gian của mình"</b>\n"Khi bạn khoá không gian của mình, các ứng dụng trong đó sẽ bị dừng và bạn sẽ không nhận được thông báo từ các ứng dụng đó"</string>
- <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Không gian riêng tư không phù hợp với những ứng dụng cần chạy trong nền hoặc gửi các thông báo nguy cấp, chẳng hạn như ứng dụng về sức khoẻ. Điều này là do các thông báo và hoạt động trong chế độ nền sẽ dừng lại khi không gian của bạn bị khoá.\n\nKhi không gian riêng tư của bạn bị khoá, các ứng dụng trong không gian này sẽ không xuất hiện trong trình quản lý quyền, bảng tổng quan về quyền riêng tư và những chế độ cài đặt khác.\n\nBạn không thể chuyển không gian riêng tư của mình sang một thiết bị mới. Nếu muốn dùng không gian đó trên một thiết bị khác, bạn sẽ cần thiết lập một không gian riêng tư khác.\n\nBất cứ ai kết nối thiết bị của bạn với một máy tính hoặc cài đặt các ứng dụng gây hại trên thiết bị này đều có thể truy cập vào không gian riêng tư của bạn."</string>
- <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Không gian riêng tư không phù hợp với những ứng dụng cần chạy trong nền hoặc gửi các thông báo nguy cấp, chẳng hạn như ứng dụng về sức khoẻ. Điều này là do các thông báo và hoạt động trong chế độ nền sẽ dừng lại khi không gian của bạn bị khoá.\n\nKhi không gian riêng tư của bạn bị khoá, các ứng dụng trong không gian này sẽ không xuất hiện trong trình quản lý quyền, bảng tổng quan về quyền riêng tư và những chế độ cài đặt khác.\n\nBạn không thể khôi phục không gian riêng tư của mình sang một thiết bị mới. Nếu muốn dùng không gian đó trên một thiết bị khác, bạn sẽ cần thiết lập một không gian khác.\n\nBất cứ ai kết nối thiết bị của bạn với một máy tính hoặc cài đặt các ứng dụng độc hại trên thiết bị này đều có thể truy cập vào không gian riêng tư của bạn."</string>
+ <string name="private_space_apps_permission_text" msgid="4416201648436201393">"Không gian riêng tư không phù hợp với những ứng dụng cần chạy trong nền hoặc gửi các thông báo nguy cấp, chẳng hạn như ứng dụng về y tế. Điều này là do các thông báo và hoạt động trong chế độ nền sẽ dừng lại khi không gian của bạn bị khoá.\n\nKhi không gian riêng tư của bạn bị khoá, các ứng dụng trong không gian này sẽ không xuất hiện trong trình quản lý quyền, bảng tổng quan về quyền riêng tư và những chế độ cài đặt khác.\n\nBạn không thể chuyển không gian riêng tư của mình sang một thiết bị mới. Nếu muốn dùng không gian đó trên một thiết bị khác, bạn sẽ cần thiết lập một không gian riêng tư khác.\n\nBất cứ ai kết nối thiết bị của bạn với một máy tính hoặc cài đặt các ứng dụng gây hại trên thiết bị này đều có thể truy cập vào không gian riêng tư của bạn."</string>
+ <string name="private_space_settings_footer_text" msgid="3742468470394835356">"Không gian riêng tư không phù hợp với những ứng dụng cần chạy trong nền hoặc gửi các thông báo nguy cấp, chẳng hạn như ứng dụng về y tế. Điều này là do các thông báo và hoạt động trong chế độ nền sẽ dừng lại khi không gian của bạn bị khoá.\n\nKhi không gian riêng tư của bạn bị khoá, các ứng dụng trong không gian này sẽ không xuất hiện trong trình quản lý quyền, bảng tổng quan về quyền riêng tư và những chế độ cài đặt khác.\n\nBạn không thể khôi phục không gian riêng tư của mình sang một thiết bị mới. Nếu muốn dùng không gian đó trên một thiết bị khác, bạn sẽ cần thiết lập một không gian khác.\n\nBất cứ ai kết nối thiết bị của bạn với một máy tính hoặc cài đặt các ứng dụng độc hại trên thiết bị này đều có thể truy cập vào không gian riêng tư của bạn."</string>
<string name="private_space_learn_more_text" msgid="5314198983263277586">"Tìm hiểu thêm về không gian riêng tư"</string>
<string name="private_space_few_moments_text" msgid="7166883272914424011">"Quá trình này sẽ mất vài phút"</string>
<string name="private_space_setting_up_text" msgid="8458035555212009528">"Đang thiết lập không gian riêng tư…"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Hỗ trợ tiếp cận"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Bàn phím vật lý"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Phím nảy"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Bàn phím sẽ bỏ qua các lần nhấn nhanh liên tục cùng một phím"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Ngưỡng phím nảy"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Chọn khoảng thời gian bàn phím bỏ qua các lần nhấn phím liên tục"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0,2 giây"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0,4 giây"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0,6 giây"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Tuỳ chỉnh"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"giá trị tuỳ chỉnh"</string>
<string name="slow_keys" msgid="2891452895499690837">"Phím chậm"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Điều chỉnh thời gian cần để kích hoạt một lượt nhấn phím"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Phím cố định"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Nhấn từng phím một để dùng phím tắt thay vì giữ các phím cùng lúc"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Các phím điều khiển chuột"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Sử dụng bàn phím để điều khiển con trỏ"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Đảo ngược hướng cuộn chuột"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Cuộn lên để di chuyển xuống phía dưới của trang"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Hoán đổi nút chuột trái và phải"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Sử dụng nút chuột trái như nút chuột phải"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Phím tắt"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Hiện danh sách phím tắt"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Chọn một phím mới cho <xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Hỗ trợ tiếp cận cho bàn phím vật lý"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Phím cố định, Phím nảy, Phím chuột"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Lặp lại phím"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Độ trễ trước khi lặp lại"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Tốc độ lặp lại"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Nhấn và giữ một phím để lặp lại ký tự của phím đó cho đến khi bạn nhả phím"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Bố cục <xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Mặc định"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Tự động: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Xem trước"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Tùy chọn chuẩn"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Ngôn ngữ"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Kích thước phụ đề"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Kiểu phụ đề"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Tùy chọn tùy chỉnh"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Màu nền"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Điều chỉnh việc sử dụng nguồn"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Gói bao gồm"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Các ứng dụng đang chạy bình thường"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Mức pin yếu"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Bật Trình tiết kiệm pin để kéo dài thời lượng pin"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Kéo dài thời lượng pin"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Ngắt kết nối VPN này?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Ngắt kết nối"</string>
<string name="vpn_version" msgid="6344167191984400976">"Phiên bản"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Phiên bản <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Xóa VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Thay thế VPN hiện có?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Đặt VPN luôn bật?"</string>
@@ -3392,7 +3414,7 @@
<string name="spatial_summary_on_one" msgid="6239933399496282994">"Đang bật/<xliff:g id="OUTPUT_DEVICE">%1$s</xliff:g>"</string>
<string name="spatial_summary_on_two" msgid="4526919818832483883">"Đang bật/<xliff:g id="OUTPUT_DEVICE_0">%1$s</xliff:g> và <xliff:g id="OUTPUT_DEVICE_1">%2$s</xliff:g>"</string>
<string name="spatial_audio_footer_title" msgid="8775010547623606088">"Bạn cũng có thể bật chế độ Âm thanh không gian cho các thiết bị Bluetooth."</string>
- <string name="spatial_audio_footer_learn_more_text" msgid="3826811708094366301">"Cài đặt thiết bị được kết nối"</string>
+ <string name="spatial_audio_footer_learn_more_text" msgid="3826811708094366301">"Cài đặt thiết bị đã kết nối"</string>
<string name="spatial_audio_multi_toggle_title" msgid="6175786400035541273">"Âm thanh không gian"</string>
<string name="spatial_audio_multi_toggle_off" msgid="2086359413991193164">"Đang tắt"</string>
<string name="spatial_audio_multi_toggle_on" msgid="4204808183659033003">"Đã khắc phục"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 giờ sáng – 5 giờ chiều các ngày trong tuần\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Sự kiện trên lịch"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Chế độ {mode_1} đang hoạt động}=2{Chế độ {mode_1} và {mode_2} đang hoạt động}=3{Chế độ {mode_1}, {mode_2} và {mode_3} đang hoạt động}other{{mode_1}, {mode_2} và # chế độ khác đang hoạt động}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Có thể tự động bật 1 chế độ}other{Có thể tự động bật # chế độ}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"ĐANG BẬT"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Chưa đặt"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Đã tắt"</string>
@@ -3762,7 +3785,7 @@
<string name="no_channels" msgid="4716199078612071915">"Ứng dụng này chưa đăng bất kỳ thông báo nào"</string>
<string name="no_recent_channels" msgid="5068574296267584043">"Hiện các danh mục không dùng đến"</string>
<string name="app_settings_link" msgid="6725453466705333311">"Chế độ cài đặt bổ sung trong ứng dụng"</string>
- <string name="show_unused_channels" msgid="4956292847964439078">"Hiện các danh mục không dùng"</string>
+ <string name="show_unused_channels" msgid="4956292847964439078">"Hiện các danh mục không dùng đến"</string>
<string name="hide_unused_channels" msgid="2019739275175707170">"Ẩn các danh mục không dùng"</string>
<string name="deleted_channels" msgid="8489800381509312964">"{count,plural, =1{# danh mục bị xoá}other{# danh mục bị xoá}}"</string>
<string name="app_notification_block_title" msgid="3880322745749900296">"Chặn tất cả"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Tìm kiếm trong phần Cài đặt"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"danh bạ, bộ nhớ, tài khoản"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Bộ nhớ danh bạ"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Chưa đặt tài khoản mặc định nào"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Chỉ thiết bị"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Những người liên hệ mới sẽ không được đồng bộ hoá với một tài khoản"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Những người liên hệ sẽ được lưu vào thiết bị và đồng bộ hoá với tài khoản của bạn theo mặc định"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Đã xảy ra lỗi khi đặt tài khoản mặc định"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Chưa đặt tài khoản mặc định nào"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Chỉ thiết bị"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Thêm một tài khoản để bắt đầu"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Khoanh tròn để tìm kiếm"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Bạn có thể chạm và giữ nút Màn hình chính hoặc thanh điều hướng để tìm kiếm bằng nội dung có trên màn hình của mình."</string>
</resources>
diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml
index 43b3ced..4ecb4f6 100644
--- a/res/values-zh-rCN/arrays.xml
+++ b/res/values-zh-rCN/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"雪花"</item>
<item msgid="7952183800501346803">"沙滩伞"</item>
<item msgid="799139025758265891">"工作坊工具"</item>
- <item msgid="1330084588359129896">"帐篷"</item>
+ <item msgid="8112685757657659269">"钢琴"</item>
<item msgid="3861584909935022342">"电影胶片"</item>
<item msgid="5827426100157335512">"图书"</item>
<item msgid="8585828346253128384">"莲花"</item>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 1273f07..99cf92c 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"停用蓝牙 LE 音频"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"如果设备支持 LE 音频硬件功能,则停用蓝牙 LE 音频功能。"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"蓝牙 LE 音频模式"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"在“设备详细信息”中显示 LE 音频切换开关"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"绕过蓝牙 LE 音频许可名单"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"默认使用 LE 音频,即使 LE 音频外围设备尚未通过旨在确保满足许可名单条件的验证,也是如此。"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"使用您的网络和无线信号自动设定"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"自动确定时区"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"根据您附近的移动网络自动设定"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"使用您的设备位置信息(如果可用)自动设定。可能还需要有效的 WLAN 连接。"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"根据设备位置信息(如果可用)自动设定"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"使用默认语言区域"</string>
<string name="date_time_24hour" msgid="286679379105653406">"使用 24 小时制"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"时间"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"无障碍功能"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"实体键盘"</string>
<string name="bounce_keys" msgid="7419450970351743904">"防抖键"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"键盘会忽略快速重复按下同一按键的操作"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"防抖键阈值"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"选择键盘忽略重复按键操作的时长"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 秒"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 秒"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 秒"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"自定义"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"自定义值"</string>
<string name="slow_keys" msgid="2891452895499690837">"慢速键"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"调整启用按键操作所需的时长"</string>
<string name="sticky_keys" msgid="7317317044898161747">"粘滞键"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"只需一次按下一个键即可执行快捷操作,而不用同时按住多个键"</string>
<string name="mouse_keys" msgid="6237254627808525540">"鼠标键"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"使用键盘来控制指针"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"鼠标反向滚动"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"向上滚动可使页面内容向下移动"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"切换左键和右键"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"将鼠标左键用作右键"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"键盘快捷键"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"显示快捷键列表"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"为<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>选择新的辅助键:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"实体键盘无障碍功能"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"粘滞键、防抖键、鼠标键"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"重复输入按键字符"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"开始重复输入前的延迟时间"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"重复速率"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"按住某个按键即重复输入其对应的字符,直到松开该按键为止"</string>
<string name="ime_label_title" msgid="8994569521516807168">"“<xliff:g id="IME_LABEL">%s</xliff:g>”布局"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"默认"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"自动选择的布局:<xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"预览"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"标准选项"</string>
<string name="captioning_locale" msgid="5533303294290661590">"语言"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"字幕大小"</string>
<string name="captioning_preset" msgid="4174276086501638524">"字幕样式"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"自定义选项"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"背景颜色"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"省电提示"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"包含的软件包"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"应用正常运行中"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"电池电量低"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"开启省电模式可延长电池续航时间"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"延长电池续航时间"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"要断开与此 VPN 的连接吗?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"断开连接"</string>
<string name="vpn_version" msgid="6344167191984400976">"版本"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g> 版"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"取消保存 VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"要替换现有 VPN 吗?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"要设置始终开启的 VPN 吗?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"“工作日上午 9 点到下午 5 点”"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"日历活动"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{已启用“{mode_1}”模式}=2{已启用“{mode_1}”和“{mode_2}”模式}=3{已启用“{mode_1}”“{mode_2}”和“{mode_3}”模式}other{已启用“{mode_1}”“{mode_2}”以及另外 # 个模式}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{1 个模式可以自动开启}other{# 个模式可以自动开启}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"已启用"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"未设置"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"已停用"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"在设置中搜索"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"联系人, 存储, 账号, contacts, storage, account"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"联系人存储"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"未设置默认账号"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"仅限设备"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"新联系人不会与账号同步"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"默认情况下,系统会将联系人保存到您的设备并同步到您的账号"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"设置默认账号时出错"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"未设置默认账号"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"仅限设备"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"添加账号即可开始"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"圈定即搜"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"轻触并按住主屏幕按钮或导航手柄,即可使用屏幕上的内容进行搜索。"</string>
</resources>
diff --git a/res/values-zh-rHK/arrays.xml b/res/values-zh-rHK/arrays.xml
index fa3cd29..190589a 100644
--- a/res/values-zh-rHK/arrays.xml
+++ b/res/values-zh-rHK/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"雪花"</item>
<item msgid="7952183800501346803">"沙灘傘"</item>
<item msgid="799139025758265891">"工作坊工具"</item>
- <item msgid="1330084588359129896">"帳篷"</item>
+ <item msgid="8112685757657659269">"鋼琴"</item>
<item msgid="3861584909935022342">"菲林卷軸"</item>
<item msgid="5827426100157335512">"書籍"</item>
<item msgid="8585828346253128384">"蓮花"</item>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 8478b1c..dd48c5d 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"停用藍牙 LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"如果裝置支援 LE Audio 硬件功能,則停用藍牙 LE Audio 功能。"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"藍牙 LE Audio 模式"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"在「裝置詳情」中顯示 LE Audio 切換按鈕"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"繞過藍牙 LE Audio 許可名單"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"即使 LE Audio 周邊裝置未通過符合許可清單條件的驗證,系統仍會預設使用 LE Audio。"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"使用網絡和無線訊號自動設定"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"自動設定時區"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"根據你附近的流動網絡自動設定"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"使用裝置位置 (如已開啟) 自動設定。你亦可能需要啟用 Wi-Fi 連線。"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"使用裝置位置 (如已開啟) 自動設定"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"使用地區設定預設值"</string>
<string name="date_time_24hour" msgid="286679379105653406">"使用 24 小時格式"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"時間"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"無障礙功能"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"實體鍵盤"</string>
<string name="bounce_keys" msgid="7419450970351743904">"篩選鍵"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"鍵盤會忽略快速重覆按下同一按鍵的動作"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"彈跳鍵門檻"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"選擇鍵盤忽略重覆按鍵的時間長度"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 秒"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 秒"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 秒"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"自訂"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"自訂值"</string>
<string name="slow_keys" msgid="2891452895499690837">"緩慢鍵"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"調整按鍵啟動時間"</string>
<string name="sticky_keys" msgid="7317317044898161747">"相黏鍵"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"一次按下快速鍵中的一個鍵,而非同時按住多個鍵"</string>
<string name="mouse_keys" msgid="6237254627808525540">"滑鼠按鍵"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"使用鍵盤控制游標"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"滑鼠反向捲動"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"向上捲動即可將頁面向下移動"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"調換左右鍵"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"將滑鼠左鍵當右鍵使用"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"鍵盤快速鍵"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"顯示快速鍵清單"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"為「<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>」選擇新的輔助鍵:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"實體鍵盤無障礙功能"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"相黏鍵、篩選鍵、滑鼠鍵"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"重複輸入按鍵"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"重複前的延遲時間"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"重複率"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"按住按鍵即可重複輸入按鍵上的字元,直到放開為止"</string>
<string name="ime_label_title" msgid="8994569521516807168">"<xliff:g id="IME_LABEL">%s</xliff:g> 版面配置"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"預設"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"自動:<xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"預覽"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"標準選項"</string>
<string name="captioning_locale" msgid="5533303294290661590">"語言"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"字幕大小"</string>
<string name="captioning_preset" msgid="4174276086501638524">"字幕樣式"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"自訂選項"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"背景顏色"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"調整電力使用"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"已包含套件"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"應用程式運作正常"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"電量不足"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"開啟慳電模式可延長電池壽命"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"延長電池壽命"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"要解除連結此 VPN 嗎?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"中斷連線"</string>
<string name="vpn_version" msgid="6344167191984400976">"版本"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"版本 <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"刪除 VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"要取代目前的 VPN 嗎?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"要設定保持開啟的 VPN 嗎?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"「平日上午 9 時至下午 5 時」"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"日曆活動"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{已啟用{mode_1}}=2{已啟用{mode_1}和{mode_2}}=3{已啟用{mode_1}、{mode_2}和{mode_3}}other{已啟用{mode_1}、{mode_2}和其他 # 個模式}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{可自動啟動 1 個模式}other{可自動啟動 # 個模式}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"開啟"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"未設定"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"已停用"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"搜尋設定"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"通訊錄, 儲存空間, 帳戶"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"「通訊錄」儲存空間"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"沒有預設帳戶"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"只限裝置"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"新聯絡人不會與帳戶同步"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"根據預設,系統會將聯絡人儲存至裝置並同步至你的帳戶"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"設定預設帳戶時發生錯誤"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"沒有預設帳戶"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"只限裝置"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"新增帳戶以開始使用"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"一圈即搜"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"按住主按鈕或導覽列,就能透過畫面上的內容搜尋。"</string>
</resources>
diff --git a/res/values-zh-rTW/arrays.xml b/res/values-zh-rTW/arrays.xml
index b34f354..876c5d9 100644
--- a/res/values-zh-rTW/arrays.xml
+++ b/res/values-zh-rTW/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"雪花"</item>
<item msgid="7952183800501346803">"沙灘遮陽傘"</item>
<item msgid="799139025758265891">"工作坊工具"</item>
- <item msgid="1330084588359129896">"帳篷"</item>
+ <item msgid="8112685757657659269">"鋼琴"</item>
<item msgid="3861584909935022342">"電影膠卷"</item>
<item msgid="5827426100157335512">"書籍"</item>
<item msgid="8585828346253128384">"蓮花"</item>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index ff49870..5fef019 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"停用藍牙 LE Audio"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"如果裝置支援 LE Audio 硬體功能,就停用藍牙 LE Audio 功能。"</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"藍牙 LE Audio 模式"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"在「裝置詳細資料」中顯示 LE Audio 切換鈕"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"略過藍牙 LE Audio 許可清單"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"即使 LE Audio 周邊裝置未經過驗證,尚未確認符合許可清單的條件,系統仍會預設使用 LE Audio。"</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"使用網路和無線訊號自動設定"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"自動判定時區"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"根據附近的行動網路自動設定"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"使用裝置位置資訊自動設定 (如有)。這個選項可能還需要有效的 Wi-Fi 連線。"</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"使用裝置位置資訊自動設定 (如有)"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"使用地區設定預設值"</string>
<string name="date_time_24hour" msgid="286679379105653406">"使用 24 小時格式"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"時間"</string>
@@ -1946,25 +1950,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"無障礙"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"實體鍵盤"</string>
<string name="bounce_keys" msgid="7419450970351743904">"彈回鍵"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"鍵盤會忽略快速重複按下同一按鍵的動作"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"彈回鍵門檻"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"選擇鍵盤忽略重複按下按鍵的時間長度"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2 秒"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4 秒"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6 秒"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"自訂"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"自訂值"</string>
<string name="slow_keys" msgid="2891452895499690837">"延遲感應鍵"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"調整按鍵啟動時間"</string>
<string name="sticky_keys" msgid="7317317044898161747">"相黏鍵"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"一次按下快速鍵中的一個按鍵,而非同時按住多個按鍵"</string>
<string name="mouse_keys" msgid="6237254627808525540">"滑鼠按鍵"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"使用鍵盤控制游標"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"滑鼠反向捲動"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"向上捲動即可將頁面向下移動"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"交換左右按鍵"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"將滑鼠左鍵做為右鍵使用"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"鍵盤快速鍵"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"顯示快速鍵清單"</string>
@@ -2034,10 +2052,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"為「<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>」選擇新的輔助鍵:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"實體鍵盤無障礙功能"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"相黏鍵、彈回鍵、滑鼠按鍵"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"重複輸入按鍵"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"重複前延遲時間"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"重複速度"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"按住按鍵即可重複輸入按鍵上的字元,直到放開為止"</string>
<string name="ime_label_title" msgid="8994569521516807168">"「<xliff:g id="IME_LABEL">%s</xliff:g>」版面配置"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"預設"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"自動選取:<xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2442,8 +2460,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"預覽"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"標準選項"</string>
<string name="captioning_locale" msgid="5533303294290661590">"語言"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"字幕大小"</string>
<string name="captioning_preset" msgid="4174276086501638524">"字幕樣式"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"自訂選項"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"背景顏色"</string>
@@ -2570,6 +2587,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"調整電力使用"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"已包含封裝檔案"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"應用程式正常執行中"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"電池電力不足"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"開啟省電模式可延長電池續航力"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"延長電池續航力"</string>
@@ -2987,6 +3008,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"要中斷這個 VPN 連線嗎?"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"中斷連線"</string>
<string name="vpn_version" msgid="6344167191984400976">"版本"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"<xliff:g id="VERSION">%s</xliff:g> 版"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"清除 VPN 設定檔"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"要取代現有的 VPN 嗎?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"要設定永久連線 VPN 嗎?"</string>
@@ -3409,7 +3431,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"「平日上午 9 點 - 下午 5 點」"</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"日曆活動"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{已啟用「{mode_1}」模式}=2{已啟用「{mode_1}」和「{mode_2}」模式}=3{已啟用「{mode_1}」、「{mode_2}」和「{mode_3}」模式}other{已啟用「{mode_1}」、「{mode_2}」和另外 # 個模式}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{可自動開啟 1 個模式}other{可自動開啟 # 個模式}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"開啟"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"未設定"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"已停用"</string>
@@ -3526,7 +3549,7 @@
<string name="zen_category_apps" msgid="1167374545618451925">"應用程式"</string>
<string name="zen_category_exceptions" msgid="1316097981052752811">"鬧鐘和其他干擾"</string>
<string name="zen_category_schedule" msgid="2003707171924226212">"排程"</string>
- <string name="zen_category_duration" msgid="7515850842082631460">"從「快速設定」開啟後持續多久"</string>
+ <string name="zen_category_duration" msgid="7515850842082631460">"從「快速設定」開啟後持續時長"</string>
<string name="zen_settings_general" msgid="2704932194620124153">"一般"</string>
<string name="zen_sound_footer" msgid="4090291351903631977">"開啟「零打擾」模式時,系統會將音效和震動設為靜音 (你在上方允許的項目除外)。"</string>
<string name="zen_custom_settings_dialog_title" msgid="4613603772432720380">"自訂設定"</string>
@@ -3708,7 +3731,7 @@
<string name="notif_listener_not_migrated" msgid="6265206376374278226">"這個應用程式不支援加強型設定"</string>
<string name="notif_listener_more_settings" msgid="1348409392307208921">"更多設定"</string>
<string name="notif_listener_more_settings_desc" msgid="7995492074281663658">"應用程式內提供更多設定"</string>
- <string name="notification_polite_title" msgid="6121016426991791557">"通知緩和功能"</string>
+ <string name="notification_polite_title" msgid="6121016426991791557">"通知冷卻"</string>
<string name="notification_polite_main_control_title" msgid="5812529809151927149">"使用通知緩和"</string>
<string name="notification_polite_description" msgid="5497748284893832854">"如果短時間內收到多則通知,裝置就會降低音量並減少通知數量,持續時間最多 2 分鐘。來電、鬧鐘和重要對話則不受影響。\n\n如要在緩和期間查看通知,請從螢幕頂端往下拉。"</string>
<string name="notification_polite_work" msgid="8823596456640216391">"套用至工作資料夾"</string>
@@ -5462,13 +5485,13 @@
<string name="homepage_search" msgid="6759334912284663559">"搜尋設定"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"聯絡人, 儲存空間, 帳戶"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"聯絡人儲存空間"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"沒有預設帳戶"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"僅限裝置"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"新的聯絡人資料不會與帳戶同步"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"系統預設會將聯絡人資料儲存到裝置,並同步到你的帳戶"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"設定預設帳戶時發生錯誤"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"沒有預設帳戶"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"僅限裝置"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"如要開始使用,請新增帳戶"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"畫圈搜尋"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"按住主畫面按鈕或導覽列,就能搜尋畫面內容。"</string>
</resources>
diff --git a/res/values-zu/arrays.xml b/res/values-zu/arrays.xml
index 9b0b52d..c7e1289 100644
--- a/res/values-zu/arrays.xml
+++ b/res/values-zu/arrays.xml
@@ -519,7 +519,7 @@
<item msgid="663512680597461570">"ISnowflake"</item>
<item msgid="7952183800501346803">"Isambulela sasebhishi"</item>
<item msgid="799139025758265891">"Amathuluzi asendaweni yomsebenzi"</item>
- <item msgid="1330084588359129896">"Itende"</item>
+ <item msgid="8112685757657659269">"Iphiyano"</item>
<item msgid="3861584909935022342">"Ireel yefilimu"</item>
<item msgid="5827426100157335512">"Incwadi"</item>
<item msgid="8585828346253128384">"Imbali yelotus"</item>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 441df39..87f7d71 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -120,6 +120,10 @@
<string name="bluetooth_disable_leaudio" msgid="8619410595945155354">"Khubaza umsindo we-Bluetooth LE"</string>
<string name="bluetooth_disable_leaudio_summary" msgid="4756307633476985470">"Kukhubaza isakhi somsindo we-Bluetooth LE uma idivayisi isekela amakhono wehadiwe yomsindo we-LE."</string>
<string name="bluetooth_leaudio_mode" msgid="5206961943393400814">"Imodi Yomsindo we-Bluetooth LE"</string>
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui (3205637582933819543) -->
+ <skip />
+ <!-- no translation found for bluetooth_leaudio_broadcast_ui_summary (3616202872693209662) -->
+ <skip />
<string name="bluetooth_show_leaudio_device_details" msgid="3306637862550475370">"Bonisa ukuguqulwa komsindo we-LE Emininingwaneni Yedivayisi"</string>
<string name="bluetooth_bypass_leaudio_allowlist" msgid="7392319491894565552">"Dlula Uhlu Lwabagunyaziwe Lomsindo we-Bluetooth LE"</string>
<string name="bluetooth_bypass_leaudio_allowlist_summary" msgid="8999245286359656738">"Sebenzisa umsindo we-LE ngokuzenzakalela ngisho noma umsindo we-LE exhumekayo uqinisekisiwe ukuthi uyahlangabezane nomkhakha Wohlu Lwabagunyaziwe."</string>
@@ -250,7 +254,7 @@
<string name="date_time_auto_summary" msgid="8294938565417729698">"Setha ngokuzenzakalela usebenzisa inethiwekhi yakho namasignali angenantambo"</string>
<string name="zone_auto_title" msgid="3520584257065861479">"Izoni yesikhathi ezenzekelayo"</string>
<string name="zone_auto_title_summary" msgid="6540356783943375071">"Setha ngokuzenzekelayo ngokusekelwe kumanethiwekhi eselula aseduze nawe"</string>
- <string name="auto_zone_requires_location_summary" msgid="8751995978350701451">"Setha ngokuzenzakalela usebenzisa indawo yedivayisi yakho, uma ikhona. Uxhumo lwe-Wifi olusebenzayo nalo lungadingeka."</string>
+ <string name="auto_zone_requires_location_summary" msgid="2366567167956530124">"Setha ngokuzenzekela usebenzisa indawo yedivayisi yakho, uma ikhona"</string>
<string name="date_time_24hour_auto" msgid="6583078135067804252">"Sebenzisa okuzenzakalelayo kwasendaweni"</string>
<string name="date_time_24hour" msgid="286679379105653406">"Sebenzisa ifomethi ye-24 amahora"</string>
<string name="date_time_set_time_title" msgid="2870083415922991906">"Isikhathi"</string>
@@ -1947,25 +1951,39 @@
<string name="keyboard_a11y_category" msgid="8230758278046841469">"Ukufinyeleleka"</string>
<string name="physical_keyboard_title" msgid="3328134097512350958">"Ikhibhodi ephathekayo"</string>
<string name="bounce_keys" msgid="7419450970351743904">"Okhiye bokubuyisela emuva"</string>
- <!-- no translation found for bounce_keys_summary (7418024428905737729) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_title (4088646362538368693) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_subtitle (5640575860258120026) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_200 (7876774697200082558) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_400 (8146580138675322657) -->
- <skip />
- <!-- no translation found for bounce_keys_dialog_option_600 (6166166103942612488) -->
- <skip />
+ <string name="bounce_keys_summary" msgid="7418024428905737729">"Ikhibhodi iziba ukucindezela okuphindaphindiwe okusheshayo kwenkinobho efanayo"</string>
+ <string name="bounce_keys_dialog_title" msgid="4088646362538368693">"Ukhawulo wokhiye abaphindwayo"</string>
+ <string name="bounce_keys_dialog_subtitle" msgid="5640575860258120026">"Khetha inkathi yesikhathi ikhibhodi yakho ezoziba ngaso ukucindezela kwezinkinobho okuphindaphindiwe"</string>
+ <string name="input_setting_keys_dialog_option_200" msgid="3121006986226247560">"0.2s"</string>
+ <string name="input_setting_keys_dialog_option_400" msgid="2634500629396699440">"0.4s"</string>
+ <string name="input_setting_keys_dialog_option_600" msgid="3828362866751805146">"0.6s"</string>
+ <string name="input_setting_keys_custom_title" msgid="670425691119253202">"Okomuntu ngamunye"</string>
+ <string name="input_setting_keys_custom_value" msgid="4455905650507193648">"inani lokomuntu ngamunye"</string>
<string name="slow_keys" msgid="2891452895499690837">"Okhiye abahamba kancane"</string>
- <!-- no translation found for slow_keys_summary (2914214326648535377) -->
- <skip />
+ <string name="slow_keys_summary" msgid="2914214326648535377">"Ilungisa isikhathi okusithathayo ukuze ukucindezela inkinobho kusebenze"</string>
<string name="sticky_keys" msgid="7317317044898161747">"Okhiye abanamathelayo"</string>
<string name="sticky_keys_summary" msgid="1844953803625480623">"Cindezela inkinobho eyodwa ngesikhathi ukuze uthole izinqamuleli esikhundleni sokubamba izinkinobho ndawonye"</string>
<string name="mouse_keys" msgid="6237254627808525540">"Okhiye bemouse"</string>
- <!-- no translation found for mouse_keys_summary (7030731235143286467) -->
+ <!-- no translation found for mouse_keys_main_title (3570638931365221460) -->
+ <skip />
+ <string name="mouse_keys_summary" msgid="7030731235143286467">"Sebenzisa ikhibhodi yakho ukuze ulawule isikhombi"</string>
+ <string name="mouse_reverse_vertical_scrolling" msgid="154907817154779952">"Ukuskrola ngokuphendukezela igundane"</string>
+ <string name="mouse_reverse_vertical_scrolling_summary" msgid="3386655598642587942">"Skrola uye phezulu bese uyisa ikhasi ezansi"</string>
+ <string name="mouse_swap_primary_button" msgid="3028204969091057207">"Shintshanisa izinkinobho kwesokunxele nakwesokudla"</string>
+ <string name="mouse_swap_primary_button_summary" msgid="3276638019321067902">"Sebenzisa inkinobho yemawusi kwesokunxele njengesokudla sakho"</string>
+ <!-- no translation found for mouse_key_main_page_title (8051692181770475257) -->
+ <skip />
+ <!-- no translation found for mouse_keys_directional_summary (8108444346340180562) -->
+ <skip />
+ <!-- no translation found for mouse_keys_click_summary (1642125742164614577) -->
+ <skip />
+ <!-- no translation found for mouse_keys_press_hold_summary (2313418505798763112) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release_summary (2379239679203818720) -->
+ <skip />
+ <!-- no translation found for mouse_keys_toggle_scroll_summary (8129249227018251990) -->
+ <skip />
+ <!-- no translation found for mouse_keys_release2_summary (2395196580659122185) -->
<skip />
<string name="keyboard_shortcuts_helper" msgid="2553221039203165344">"Izinqamuleli zekhibhodi"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="5979507677602559203">"Bonisa uhlu lwezinqamuleli"</string>
@@ -2035,10 +2053,10 @@
<string name="modifier_keys_picker_summary" msgid="739397232249560785">"Khetha ukhiye omusha we-<xliff:g id="MODIFIER_KEY_DEFAULT_NAME">%1$s</xliff:g>:"</string>
<string name="keyboard_a11y_settings" msgid="2564659018555385728">"Ukufinyeleleka kwekhibhodi engokoqobo"</string>
<string name="keyboard_a11y_settings_summary" msgid="1698531156574098722">"Okhiye abanamathelayo, okhiye Bokubuyisela emuva, okhiye Bemawusi"</string>
- <!-- no translation found for keyboard_repeat_key_title (3641350808120194549) -->
- <skip />
- <!-- no translation found for keyboard_repeat_key_summary (3970350989341158854) -->
- <skip />
+ <string name="keyboard_repeat_keys_title" msgid="6346877755243280735">"Phinda Okhiye"</string>
+ <string name="keyboard_repeat_keys_timeout_title" msgid="3411871149974652293">"Bambezela ngaphambi kokuphinda"</string>
+ <string name="keyboard_repeat_keys_delay_title" msgid="7323531750483922943">"Phinda Ukulinganisela"</string>
+ <string name="keyboard_repeat_keys_summary" msgid="8972905345211768313">"Bambela phansi ukhiye ukuze uphinde uhlamvu lwawo kuze kukhululwe ukhiye walo"</string>
<string name="ime_label_title" msgid="8994569521516807168">"Isakhiwo se-<xliff:g id="IME_LABEL">%s</xliff:g>"</string>
<string name="default_keyboard_layout" msgid="8690689331289452201">"Okuzenzakalelayo"</string>
<string name="automatic_keyboard_layout_label" msgid="9138088156046198913">"Okuzenzekelayo: <xliff:g id="LAYOUT_LABEL">%s</xliff:g>"</string>
@@ -2443,8 +2461,7 @@
<string name="captioning_preview_title" msgid="2888561631323180535">"Buka kuqala"</string>
<string name="captioning_standard_options_title" msgid="5360264497750980205">"Izinketho ezijwayelekile"</string>
<string name="captioning_locale" msgid="5533303294290661590">"Ulimi"</string>
- <!-- no translation found for captioning_text_size (5764254558945371745) -->
- <skip />
+ <string name="captioning_text_size" msgid="5764254558945371745">"Usayizi wegama-ncazo"</string>
<string name="captioning_preset" msgid="4174276086501638524">"Isitayela segama-ncazo"</string>
<string name="captioning_custom_options_title" msgid="3858866498893566351">"Izinketho ezingokwezifiso"</string>
<string name="captioning_background_color" msgid="5231412761368883107">"Umbala ongemuva"</string>
@@ -2571,6 +2588,10 @@
<string name="controls_subtitle" msgid="3759606830916441564">"Lungisa amandla okusebenza"</string>
<string name="packages_subtitle" msgid="8687690644931499428">"Amaphakheji ahlanganisiwe"</string>
<string name="battery_tip_summary_title" msgid="321127485145626939">"Izinhlelo zokusebenza zisebenza ngokujwayelekile"</string>
+ <!-- no translation found for battery_tip_replacement_title (3932335880485957919) -->
+ <skip />
+ <!-- no translation found for battery_tip_replacement_summary (7892640031317153349) -->
+ <skip />
<string name="battery_tip_low_battery_title" msgid="4155239078744100997">"Ileveli yebhethri iphansi"</string>
<string name="battery_tip_low_battery_summary" msgid="2629633757244297436">"Vula Isilondolozi Sebhethri ukuze unwebe impilo yebhethri"</string>
<string name="battery_tip_smart_battery_title" msgid="8925025450214912325">"Thuthukisa impilo yebhethri"</string>
@@ -2988,6 +3009,7 @@
<string name="vpn_disconnect_confirm" msgid="6356789348816854539">"Nqamula le-VPN"</string>
<string name="vpn_disconnect" msgid="7753808961085867345">"Nqamula"</string>
<string name="vpn_version" msgid="6344167191984400976">"Uhlobo"</string>
+ <string name="vpn_version_info" msgid="5717671228402924155">"Uhlobo <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="729132269203870205">"Khohlwa i-VPN"</string>
<string name="vpn_replace_vpn_title" msgid="3994226561866340280">"Shintshanisa i-VPN ekhona?"</string>
<string name="vpn_set_vpn_title" msgid="1667539483005810682">"Setha i-VPN ehlala ivuliwe?"</string>
@@ -3410,7 +3432,8 @@
<string name="zen_mode_select_schedule_time_example" msgid="2690518300573994725">"\"9 AM - 5 PM phakathi neviki\""</string>
<string name="zen_mode_select_schedule_calendar" msgid="8098396764270136497">"Imicimbi yekhalenda"</string>
<string name="zen_modes_summary_some_active" msgid="4780578487747956559">"{count,plural,offset:2 =0{}=1{Okuthi {mode_1} kuyasebenza}=2{Okuthi {mode_1} nokuthi {mode_2} kuyasebenza}=3{Okuthi {mode_1}, {mode_2}, nokuthi {mode_3} kuyasebenza}one{Okuthi {mode_1}, {mode_2}, kanye nokwengeziwe okungu-# kuyasebenza}other{Okuthi {mode_1}, {mode_2}, kanye nokwengeziwe okungu-# kuyasebenza}}"</string>
- <string name="zen_modes_summary_none_active" msgid="7076119084658457243">"{count,plural, =0{}=1{Imodi e-1 ingavuleka ngokuzenzakalela}one{Amamodi angu-# angavuleka ngokuzenzakalela}other{Amamodi angu-# angavuleka ngokuzenzakalela}}"</string>
+ <!-- no translation found for zen_modes_summary (2576893588489258390) -->
+ <skip />
<string name="zen_mode_active_text" msgid="5002406772481439437">"KUVULIWE"</string>
<string name="zen_mode_disabled_needs_setup" msgid="389269759040103728">"Akusethiwe"</string>
<string name="zen_mode_disabled_by_user" msgid="138592173630683253">"Kukhutshaziwe"</string>
@@ -5463,13 +5486,13 @@
<string name="homepage_search" msgid="6759334912284663559">"Amasethingi Okusesha"</string>
<string name="keywords_contacts_storage" msgid="9061213057165337893">"oxhumana nabo, isitoreji, i-akhawunti"</string>
<string name="contacts_storage_settings_title" msgid="1574030546525203810">"Isitoreji soxhumana nabo"</string>
- <!-- no translation found for contacts_storage_device_only_preference_label (970250816918108264) -->
- <skip />
- <!-- no translation found for contacts_storage_device_only_preference_summary (2339782491812039153) -->
- <skip />
- <!-- no translation found for contacts_storage_selection_message (8082077300632059003) -->
- <skip />
- <string name="contacts_storage_no_account_set" msgid="1548101985417720782">"Ayikho isethi ezenzakalelayo"</string>
- <!-- no translation found for contacts_storage_first_time_add_account_message (5161093169928132323) -->
- <skip />
+ <string name="contacts_storage_device_only_preference_label" msgid="970250816918108264">"Idivayisi kuphela"</string>
+ <string name="contacts_storage_device_only_preference_summary" msgid="2339782491812039153">"Oxhumana nabo abasha ngeke bavumelaniswe ne-akhawunti"</string>
+ <string name="contacts_storage_selection_message" msgid="8082077300632059003">"Oxhumana nabo bazolondolozwa kudivayisi yakho futhi bavumelaniswe ne-akhawunti yakho ngokuzenzakalelayo"</string>
+ <string name="contacts_storage_set_default_account_error_message" msgid="849847649756411393">"Iphutha ekusetheni i-akhawunti ezenzekelayo"</string>
+ <string name="contacts_storage_no_account_set_summary" msgid="7454973781666475276">"Ayikho isethi ezenzekelayo"</string>
+ <string name="contacts_storage_local_account_summary" msgid="5034805108128685712">"Idivayisi kuphela"</string>
+ <string name="contacts_storage_first_time_add_account_message" msgid="5161093169928132323">"Faka i-akhawunti ukuze uqalise"</string>
+ <string name="search_gesture_feature_title" msgid="7037117019612710960">"Khethela Ukusesha"</string>
+ <string name="search_gesture_feature_summary" msgid="1793056495030564014">"Thinta uphinde ubambe inkinobho yokubuyela ekhasini lasekhaya noma isibambi sokufuna ukuze useshe usebenzisa okuqukethwe okusesikrinini sakho."</string>
</resources>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 8e5519f..ed0bce4 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -1551,7 +1551,7 @@
<item>@*android:drawable/ic_zen_mode_icon_snowflake</item>
<item>@*android:drawable/ic_zen_mode_icon_beach</item>
<item>@*android:drawable/ic_zen_mode_icon_workshop</item>
- <item>@*android:drawable/ic_zen_mode_icon_camping</item>
+ <item>@*android:drawable/ic_zen_mode_icon_piano</item>
<item>@*android:drawable/ic_zen_mode_type_theater</item> <!-- Film reel -->
<item>@*android:drawable/ic_zen_mode_icon_book</item>
<!-- Wellbeing -->
@@ -1602,7 +1602,7 @@
<item>Snowflake</item>
<item>Beach umbrella</item>
<item>Workshop tools</item>
- <item>Tent</item>
+ <item>Piano</item>
<item>Film reel</item>
<item>Book</item>
<!-- Wellbeing -->
diff --git a/res/values/config.xml b/res/values/config.xml
index 065d28a..09f941f 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -836,4 +836,7 @@
<!-- Package name for diagnostics app. -->
<string name="config_device_diagnostics_package_name" translatable="false">com.android.devicediagnostics</string>
+
+ <!-- Package name for Linux terminal app -->
+ <string name="config_linux_terminal_app_package_name" translatable="false">com.android.virtualization.terminal</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ed293ff..a58702a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -33,9 +33,9 @@
<string name="device_info_protected_single_press">Tap to show info</string>
<!-- [CHAR LIMIT=NONE] Device Info screen. Countdown for user taps to enable development settings -->
<string name="show_dev_countdown">{count, plural,
- =1 {You are now # step away from being a developer.}
- other {You are now # steps away from being a developer.}
- }</string>
+ =1 {You are now # step away from being a developer.}
+ other {You are now # steps away from being a developer.}
+ }</string>
<!-- [CHAR LIMIT=NONE] Device Info screen. Confirmation that developer settings are enabled -->
<string name="show_dev_on">You are now a developer!</string>
<!-- [CHAR LIMIT=NONE] Device Info screen. Okay we get it, stop pressing, you already have it on -->
@@ -260,6 +260,13 @@
<string name="bluetooth_disable_leaudio_summary">Disables Bluetooth LE audio feature if the device supports LE audio hardware capabilities.</string>
<!-- Setting toggle title for switch Bluetooth LE Audio mode. [CHAR LIMIT=40] -->
<string name="bluetooth_leaudio_mode">Bluetooth LE Audio mode</string>
+
+ <!-- Setting toggle title for enabling Bluetooth LE Audio UI preview. [CHAR LIMIT=none] -->
+ <string name="bluetooth_leaudio_broadcast_ui">Enable Bluetooth LE Audio Broadcast UI preview</string>
+ <!-- Summary of toggle for enabling Bluetooth LE Audio UI preview. [CHAR LIMIT=none]-->
+ <string name="bluetooth_leaudio_broadcast_ui_summary">Enables the LE Audio Sharing UI preview
+ including personal audio sharing and private broadcast</string>
+
<!-- Setting toggle title for enabling Bluetooth LE Audio toggle in Device Details. [CHAR LIMIT=40] -->
<string name="bluetooth_show_leaudio_device_details">Show LE audio toggle in Device Details</string>
@@ -502,9 +509,9 @@
<!-- The title of the confirmation dialog shown when the user selects one / several languages and tries to remove them [CHAR LIMIT=60] -->
<string name="dlg_remove_locales_title">{count, plural,
- =1 {Remove selected language?}
- other {Remove selected languages?}
- }</string>
+ =1 {Remove selected language?}
+ other {Remove selected languages?}
+ }</string>
<!-- The text of the confirmation dialog shown when the user selects several languages and tries to remove them [CHAR LIMIT=NONE] -->
<string name="dlg_remove_locales_message">Text will be displayed in another language.</string>
@@ -654,9 +661,9 @@
<string name="location_settings_summary_location_off">Off</string>
<!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]-->
<string name="location_settings_summary_location_on">{count, plural,
- =1 {On / # app has access to location}
- other {On / # apps have access to location}
- }</string>
+ =1 {On / # app has access to location}
+ other {On / # apps have access to location}
+ }</string>
<!-- Location settings, loading the number of apps which have location permission [CHAR LIMIT=30] -->
<string name="location_settings_loading_app_permission_stats">Loading\u2026</string>
<!-- Location settings footer warning text when location is on [CHAR LIMIT=NONE] -->
@@ -845,9 +852,9 @@
<string name="fingerprint_add_title">Add fingerprint</string>
<!-- Message showing the current number of fingerprints set up. Shown for a menu item that launches fingerprint settings or enrollment. -->
<string name="security_settings_fingerprint_preference_summary">{count, plural,
- =1 {Fingerprint added}
- other {# fingerprints added}
- }</string>
+ =1 {Fingerprint added}
+ other {# fingerprints added}
+ }</string>
<!-- message shown in summary field when no fingerprints are registered -->
<string name="security_settings_fingerprint_preference_summary_none">Setup needed</string>
<!-- Introduction title shown in fingerprint enrollment to introduce the fingerprint feature [CHAR LIMIT=29] -->
@@ -1448,9 +1455,9 @@
<string name="private_space_category_hide">Hide</string>
<!-- Header on pattern confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
<string name="private_space_confirm_your_pattern_header">Confirm your private space pattern</string>
- <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
+ <!-- Header on PIN confirm screen inside private space settings when separate lock set for private space [CHAR LIMIT=50] -->
<string name="private_space_confirm_your_pin_header">Re-enter your private space PIN</string>
- <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
+ <!-- Header on password confirm screen inside private space when separate lock set for private space[CHAR LIMIT=50] -->
<string name="private_space_confirm_your_password_header">Re-enter your private space password</string>
<!-- Text shown when "Add fingerprint" button is disabled -->
@@ -1686,21 +1693,21 @@
<!-- Hint shown in dialog screen when password is too short -->
<string name="lockpassword_password_too_short">{count, plural,
- =1 {Must contain at least # character}
- other {Must be at least # characters}
- }</string>
+ =1 {Must contain at least # character}
+ other {Must be at least # characters}
+ }</string>
<!-- Hint shown in dialog screen when password is too short and only using numbers. [CHAR LIMIT=NONE] -->
<string name="lockpassword_password_too_short_all_numeric">
{count, plural,
- =1 {If using only numbers, must be at least 1 digit}
- other {If using only numbers, must be at least # digits}
+ =1 {If using only numbers, must be at least 1 digit}
+ other {If using only numbers, must be at least # digits}
}
</string>
<!-- Hint shown in dialog screen when PIN is too short -->
<string name="lockpassword_pin_too_short">{count, plural,
- =1 {PIN must contain at least # digit}
- other {PIN must be at least # digits}
- }</string>
+ =1 {PIN must contain at least # digit}
+ other {PIN must be at least # digits}
+ }</string>
<!-- Hint shown in dialog screen when PIN is too short with Additional text indicating minAutoConfirmLen(eg: 6) digits PIN offer additional security -->
<string name="lockpassword_pin_too_short_autoConfirm_extra_message">{count, plural,
@@ -1710,14 +1717,14 @@
<!-- Error shown in popup when password is too long -->
<string name="lockpassword_password_too_long">{count, plural,
- =1 {Must be fewer than # character}
- other {Must be fewer than # characters}
- }</string>
+ =1 {Must be fewer than # character}
+ other {Must be fewer than # characters}
+ }</string>
<!-- Error shown in popup when PIN is too long -->
<string name="lockpassword_pin_too_long">{count, plural,
- =1 {Must be fewer than # digit}
- other {Must be fewer than # digits}
- }</string>
+ =1 {Must be fewer than # digit}
+ other {Must be fewer than # digits}
+ }</string>
<!-- Error shown when in PIN mode and PIN has been used recently. Please keep this string short! -->
<string name="lockpassword_pin_recently_used">Device admin doesn\'t allow using a recent PIN</string>
@@ -1727,45 +1734,45 @@
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of letters -->
<string name="lockpassword_password_requires_letters">{count, plural,
- =1 {Must contain at least 1 letter}
- other {Must contain at least # letters}
- }</string>
+ =1 {Must contain at least 1 letter}
+ other {Must contain at least # letters}
+ }</string>
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of lowercase letters -->
<string name="lockpassword_password_requires_lowercase">{count, plural,
- =1 {Must contain at least 1 lowercase letter}
- other {Must contain at least # lowercase letters}
- }</string>
+ =1 {Must contain at least 1 lowercase letter}
+ other {Must contain at least # lowercase letters}
+ }</string>
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of uppercase letters -->
<string name="lockpassword_password_requires_uppercase">{count, plural,
- =1 {Must contain at least 1 uppercase letter}
- other {Must contain at least # uppercase letters}
- }</string>
+ =1 {Must contain at least 1 uppercase letter}
+ other {Must contain at least # uppercase letters}
+ }</string>
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of numerical digits -->
<string name="lockpassword_password_requires_numeric">{count, plural,
- =1 {Must contain at least 1 numerical digit}
- other {Must contain at least # numerical digits}
- }</string>
+ =1 {Must contain at least 1 numerical digit}
+ other {Must contain at least # numerical digits}
+ }</string>
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of special symbols -->
<string name="lockpassword_password_requires_symbols">{count, plural,
- =1 {Must contain at least 1 special symbol}
- other {Must contain at least # special symbols}
- }</string>
+ =1 {Must contain at least 1 special symbol}
+ other {Must contain at least # special symbols}
+ }</string>
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of non-letter characters -->
<string name="lockpassword_password_requires_nonletter">{count, plural,
- =1 {Must contain at least 1 non-letter character}
- other {Must contain at least # non-letter characters}
- }</string>
+ =1 {Must contain at least 1 non-letter character}
+ other {Must contain at least # non-letter characters}
+ }</string>
<!-- Error shown when in PASSWORD mode and password doesn't contain the required number of non-numerical characters -->
<string name="lockpassword_password_requires_nonnumerical">{count, plural,
- =1 {Must contain at least 1 non-numerical character}
- other {Must contain at least # non-numerical characters}
- }</string>
+ =1 {Must contain at least 1 non-numerical character}
+ other {Must contain at least # non-numerical characters}
+ }</string>
<!-- Error shown when in PASSWORD mode and password has been used recently. Please keep this string short! -->
<string name="lockpassword_password_recently_used">Device admin doesn\'t allow using a recent
@@ -1801,9 +1808,9 @@
<!-- Summary of preference to manage device admin apps, informing the user how many device admin apps are installed and active -->
<string name="number_of_device_admins">{count, plural,
- =1 {# active app}
- other {# active apps}
- }</string>
+ =1 {# active app}
+ other {# active apps}
+ }</string>
<!-- Title of preference to manage trust agents -->
<string name="manage_trust_agents">Trust agents</string>
@@ -1816,9 +1823,9 @@
<!-- Summary of preference to manage device policies when there is trust agent-->
<string name="manage_trust_agents_summary_on">{count, plural,
- =1 {1 active trust agent}
- other {# active trust agents}
- }</string>
+ =1 {1 active trust agent}
+ other {# active trust agents}
+ }</string>
<!-- Bluetooth settings -->
<!--Used as title on second screen after selecting Bluetooth settings -->
@@ -2412,19 +2419,19 @@
<!-- Wi-Fi Advanced Settings --> <skip />
<!-- Wi-Fi settings screen, Saved networks summary. This shows below the "Saved networks" item and indicates the number of networks, not including passpoint network, a user has saved. [CHAR LIMIT=30] -->
<string name="wifi_saved_access_points_summary">{count, plural,
- =1 {1 network}
- other {# networks}
- }</string>
+ =1 {1 network}
+ other {# networks}
+ }</string>
<!-- Wi-Fi settings screen, Saved networks summary. This shows below the "Saved networks" item and indicates the number of passpoint networks a user has saved. [CHAR LIMIT=30] -->
<string name="wifi_saved_passpoint_access_points_summary">{count, plural,
- =1 {1 subscription}
- other {# subscriptions}
- }</string>
+ =1 {1 subscription}
+ other {# subscriptions}
+ }</string>
<!-- Wi-Fi settings screen, Saved networks summary. This shows below the "Saved networks" item and indicates number of whole kinds networks, if there are both normal saved networks and saved passpoint networks. The number will be at least 2, so the one case is only to prevent lint error. [CHAR LIMIT=60] -->
<string name="wifi_saved_all_access_points_summary">{count, plural,
- =1 {1 network & subscription}
- other {# networks & subscriptions}
- }</string>
+ =1 {1 network & subscription}
+ other {# networks & subscriptions}
+ }</string>
<!-- Wi-Fi settings screen, advanced, title of the item to show the Wi-Fi device's SSID. [CHAR LIMIT=20] -->
<string name="wifi_advanced_ssid_title">SSID</string>
<!-- Wi-Fi settings screen, advanced, title of the item to show the device's Wi-Fi MAC address. [CHAR LIMIT=50] -->
@@ -2998,11 +3005,11 @@
<!-- Dark UI screen footer summary text shown to indicate Modes may turn on/off Dark theme automatically according to their triggers. [CHAR LIMIT=NONE] -->
<string name="dark_ui_modes_footer_summary">
{count, plural, offset:2
- =0 {Modes can also activate dark theme}
- =1 {{mode_1} also activates dark theme}
- =2 {{mode_1} and {mode_2} also activate dark theme}
- =3 {{mode_1}, {mode_2}, and {mode_3} also activate dark theme}
- other {{mode_1}, {mode_2}, and # more also activate dark theme}
+ =0 {Modes can also activate dark theme}
+ =1 {{mode_1} also activates dark theme}
+ =2 {{mode_1} and {mode_2} also activate dark theme}
+ =3 {{mode_1}, {mode_2}, and {mode_3} also activate dark theme}
+ other {{mode_1}, {mode_2}, and # more also activate dark theme}
}
</string>
<!-- Dark UI screen footer action text linking to Modes settings. [CHAR LIMIT=NONE] -->
@@ -3153,9 +3160,9 @@
<string name="wrong_pin_code_pukked">Incorrect SIM PIN code you must now contact your carrier to unlock your device.</string>
<!-- Instructions telling the user that they entered the wrong SIM PIN while trying to unlock the keyguard. Displayed in a dialog box. [CHAR LIMIT=100] -->
<string name="wrong_pin_code">{count, plural,
- =1 {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
- other {Incorrect SIM PIN code, you have # remaining attempts.}
- }</string>
+ =1 {Incorrect SIM PIN code, you have # remaining attempt before you must contact your carrier to unlock your device.}
+ other {Incorrect SIM PIN code, you have # remaining attempts.}
+ }</string>
<!-- This is instruction text to inform the user that they have entered the wrong SIM PIN while trying to unlock the keyguard.
The variable will be replaced with a number. [CHAR LIMIT=NONE] -->
@@ -3324,27 +3331,27 @@
<!-- Dialog body informing user about an unmountable storage device. [CHAR LIMIT=NONE]-->
<string name="storage_dialog_unmountable">This <xliff:g id="name" example="SD card">^1</xliff:g> is corrupted.
-\n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
+ \n\nTo use this <xliff:g id="name" example="SD card">^1</xliff:g>, you have to set it up first.</string>
<!-- Body of dialog informing user about consequences of formatting an internal storage device [CHAR LIMIT=NONE]-->
<string name="storage_internal_format_details">You can format this SD card to store photos, videos, music,
and more and access them on other devices.
\n\n<b>All data on this SD card will be erased.</b>
\n\n<b>Before formatting</b>
-\n\n<b>Back up photos & other media</b>
-\nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
-\n\n<b>Back up apps</b>
-\nAll apps stored on this <xliff:g id="name" example="SD card">^1</xliff:g> will be uninstalled and their data will be erased. To keep these apps, move them to alternative storage on this device.</string>
+ \n\n<b>Back up photos & other media</b>
+ \nMove your media files to alternative storage on this device, or transfer them to a computer using a USB cable.
+ \n\n<b>Back up apps</b>
+ \nAll apps stored on this <xliff:g id="name" example="SD card">^1</xliff:g> will be uninstalled and their data will be erased. To keep these apps, move them to alternative storage on this device.</string>
<!-- Body of dialog informing user about consequences of ejecting an internal storage device [CHAR LIMIT=NONE]-->
<string name="storage_internal_unmount_details"><b>When you eject this <xliff:g id="name" example="SD card">^1</xliff:g>, apps stored on it will stop working, and media files stored on it will not be available until it is reinserted.</b>
-\n\nThis <xliff:g id="name" example="SD card">^1</xliff:g> is formatted to work on this device only. It won\u2019t work on any others.</string>
+ \n\nThis <xliff:g id="name" example="SD card">^1</xliff:g> is formatted to work on this device only. It won\u2019t work on any others.</string>
<!-- Body of dialog informing user about consequences of forgetting an internal storage device [CHAR LIMIT=NONE]-->
<string name="storage_internal_forget_details">To use the apps, photos, or data this <xliff:g id="name" example="SD card">^1</xliff:g> contains, reinsert it.
-\n\nAlternatively, you can choose to forget this storage if the device isn\u2019t available.
-\n\nIf you choose to forget, all the data the device contains will be lost forever.
-\n\nYou can reinstall the apps later, but their data stored on this device will be lost.</string>
+ \n\nAlternatively, you can choose to forget this storage if the device isn\u2019t available.
+ \n\nIf you choose to forget, all the data the device contains will be lost forever.
+ \n\nYou can reinstall the apps later, but their data stored on this device will be lost.</string>
<!-- Title of dialog confirming that user wants to forget an internal storage device [CHAR LIMIT=32]-->
<string name="storage_internal_forget_confirm_title">Forget <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
@@ -3378,7 +3385,7 @@
<string name="storage_wizard_move_confirm_title">Move <xliff:g id="app" example="Calculator">^1</xliff:g></string>
<!-- Body of wizard step prompting user to move an app [CHAR LIMIT=NONE] -->
<string name="storage_wizard_move_confirm_body">Moving <xliff:g id="app" example="Calculator">^1</xliff:g> and its data to <xliff:g id="name" example="SD card">^2</xliff:g> will take only a few moments. You won\u2019t be able to use the app until the move is complete.
-\n\nDon\u2019t remove the <xliff:g id="name" example="SD card">^2</xliff:g> during the move.
+ \n\nDon\u2019t remove the <xliff:g id="name" example="SD card">^2</xliff:g> during the move.
</string>
<!-- Body of lock screen challenge message explaining that the given user must be unlocked before data can be moved [CHAR LIMIT=64] -->
@@ -3388,7 +3395,7 @@
<string name="storage_wizard_move_progress_title">Moving <xliff:g id="app" example="Calculator">^1</xliff:g>\u2026</string>
<!-- Body of wizard step showing app move progress [CHAR LIMIT=NONE] -->
<string name="storage_wizard_move_progress_body">Don\u2019t remove the <xliff:g id="name" example="SD card">^1</xliff:g> during the move.
-\n\nThe <xliff:g id="app" example="Calculator">^2</xliff:g> app on this device won\u2019t be available until the move is complete.
+ \n\nThe <xliff:g id="app" example="Calculator">^2</xliff:g> app on this device won\u2019t be available until the move is complete.
</string>
<!-- This is the title of a full-screen message. After this question, the user will get to choose how they want to use the storage device that they have in their phone. The placeholder is for the specific device (e.g. SD card, USB drive, etc.). [CHAR LIMIT=32] -->
@@ -3408,7 +3415,7 @@
<string name="storage_wizard_format_confirm_v2_title">Format this <xliff:g id="name" example="SD card">^1</xliff:g>?</string>
<!-- Body of a dialog. This text is confirming that the user wants to use their SD card as extra phone storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
<string name="storage_wizard_format_confirm_v2_body">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store apps, files, and media.
-\n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
+ \n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
<!-- Body of a dialog. This text is confirming that the user wants to use their SD card as portable storage, but the formatting process will erase existing content on the card. The first placeholder is for the name of the device (e.g. a brand name of the SD card or USB drive). The second and third placeholders are for the general references (e.g. SD card, USB drive). [CHAR LIMIT=NONE] -->
<string name="storage_wizard_format_confirm_v2_body_external">This <xliff:g id="name" example="SanDisk SD card">^1</xliff:g> needs to be formatted to store photos, videos, music, and more.
\n\nFormatting will erase existing content on the <xliff:g id="name" example="SD card">^2</xliff:g>. To avoid losing content, back it up to another <xliff:g id="name" example="SD card">^3</xliff:g> or device.</string>
@@ -3437,8 +3444,8 @@
<string name="storage_wizard_slow_v2_title">Slow <xliff:g id="name" example="SD card">^1</xliff:g></string>
<!-- Strings that are part of a full-screen message. These strings let the user know that their storage device is slow, and include some options they can try. The first placeholder is for the name of the storage device (e.g. brand name of the SD card), and the second and third placeholders are for the general references (e.g. SD card, USB drive, etc.). [CHAR LIMIT=NONE] -->
<string name="storage_wizard_slow_v2_body">You can still use this <xliff:g id="name" example="SanDisk SD card">^1</xliff:g>, but it may be slow.
-\n\nApps stored on this <xliff:g id="name" example="SD card">^2</xliff:g> may not work properly, and content transfers could take a long time.
-\n\nTry using a faster <xliff:g id="name" example="SD card">^3</xliff:g>, or use this <xliff:g id="name" example="SD card">^4</xliff:g> for portable storage instead.</string>
+ \n\nApps stored on this <xliff:g id="name" example="SD card">^2</xliff:g> may not work properly, and content transfers could take a long time.
+ \n\nTry using a faster <xliff:g id="name" example="SD card">^3</xliff:g>, or use this <xliff:g id="name" example="SD card">^4</xliff:g> for portable storage instead.</string>
<!-- Action of a dialog. This action will start the wizard from the beginning, letting the user make an alternative choice. [CHAR LIMIT=32] -->
<string name="storage_wizard_slow_v2_start_over">Start over</string>
<!-- Action of a dialog. This action will continue the wizard, meaning the user acknowledges their card is slow. [CHAR LIMIT=32] -->
@@ -3753,9 +3760,9 @@
[CHAR LIMIT=NONE]-->
<string name="location_app_permission_summary_location_on">{count, plural,
- =1 {# of {total} apps has access to location}
- other {# of {total} apps have access to location}
- }</string>
+ =1 {# of {total} apps has access to location}
+ other {# of {total} apps have access to location}
+ }</string>
<!-- [CHAR LIMIT=50] Location settings screen, sub category for recent location access -->
<string name="location_category_recent_location_access">Recent access</string>
<!-- Location settings screen, displayed when there're more than three recent location access apps [CHAR LIMIT=30] -->
@@ -4141,9 +4148,9 @@
<string name="recent_app_category_title">Recently opened apps</string>
<!-- Preference title for showing all apps on device [CHAR_LIMIT=50]-->
<string name="see_all_apps_title">{count, plural,
- =1 {See all apps}
- other {See all # apps}
- }</string>
+ =1 {See all apps}
+ other {See all # apps}
+ }</string>
<!-- Title of the dialog that asks the user to contact the IT admin to reset password [CHAR LIMIT=40] -->
<string name="forgot_password_title">Contact your IT admin</string>
@@ -4174,9 +4181,9 @@
<string name="cache_size_label">Cache</string>
<!-- Manage applications, individual application info storage screen. Describes the number of URIs (directories or files) an app has been granted access (by another apps)-->
<string name="uri_permissions_text">{count, plural,
- =1 {1 item}
- other {# items}
- }</string>
+ =1 {1 item}
+ other {# items}
+ }</string>
<!-- Manage applications, individual application info storage screen. Button below list of URIs. -->
<string name="clear_uri_btn_text">Clear access</string>
<!-- Manage applications, Header name used for other controls -->
@@ -4229,7 +4236,7 @@
<string name="clear_activities">Clear default preferences</string>
<!-- Manage applications, individual application info screen, screen, message text under screen compatibility heading -->
<string name="screen_compatibility_text">This app may not be designed for your screen. You can control how it
- adjusts to your screen here.</string>
+ adjusts to your screen here.</string>
<!-- Manage applications, individual application screen, checkbox to control asking for compatibility mode. -->
<string name="ask_compatibility">Ask when launched</string>
<!-- Manage applications, individual application screen, checkbox to control compatibility mode. -->
@@ -4493,10 +4500,10 @@
<!-- Warning message about security implications of enabling a spell checker, displayed as a dialog
message when the user selects to enable a spell checker. -->
<string name="spellchecker_security_warning">This spell checker may be able to collect
- all the text you type, including personal data like passwords and credit
- card numbers. It comes from the app
- <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
- Use this spell checker?</string>
+ all the text you type, including personal data like passwords and credit
+ card numbers. It comes from the app
+ <xliff:g id="spellchecker_application_name">%1$s</xliff:g>.
+ Use this spell checker?</string>
<!-- Image button description for spell checker quick settings. -->
<string name="spellchecker_quick_settings">Settings</string>
<!-- Image button description for spell checker language. -->
@@ -4525,12 +4532,17 @@
<string name="bounce_keys_dialog_title">Bounce key threshold</string>
<!-- Subtitle for the 'Bounce keys' threshold dialog. [CHAR LIMIT=300] -->
<string name="bounce_keys_dialog_subtitle">Choose the duration of time your keyboard ignores repeated key presses</string>
- <!-- Option title for the 'Bounce keys' threshold dialog for 200 millisecond. [CHAR LIMIT=35] -->
- <string name="bounce_keys_dialog_option_200">0.2s</string>
- <!-- Option title for the 'Bounce keys' threshold dialog for 400 millisecond. [CHAR LIMIT=35] -->
- <string name="bounce_keys_dialog_option_400">0.4s</string>
- <!-- Option title for the 'Bounce keys' threshold dialog for 600 millisecond. [CHAR LIMIT=35] -->
- <string name="bounce_keys_dialog_option_600">0.6s</string>
+ <!-- Option title for the input setting keys threshold dialog for 200 millisecond. [CHAR LIMIT=35] -->
+ <string name="input_setting_keys_dialog_option_200">0.2s</string>
+ <!-- Option title for the input setting keys threshold dialog for 400 millisecond. [CHAR LIMIT=35] -->
+ <string name="input_setting_keys_dialog_option_400">0.4s</string>
+ <!-- Option title for the input setting keys threshold dialog for 600 millisecond. [CHAR LIMIT=35] -->
+ <string name="input_setting_keys_dialog_option_600">0.6s</string>
+ <!-- Option title for the input setting keys threshold dialog for custom value. [CHAR LIMIT=35] -->
+ <string name="input_setting_keys_custom_title">Custom</string>
+ <!-- Option subtitle for the input setting keys threshold dialog for custom value. [CHAR LIMIT=35] -->
+ <string name="input_setting_keys_custom_value">custom value</string>
+
<!-- Title for the 'Slow keys' preference switch. [CHAR LIMIT=35] -->
<string name="slow_keys">Slow keys</string>
<!-- Summary text for the 'Slow keys' preference sub-screen. [CHAR LIMIT=300] -->
@@ -4541,6 +4553,8 @@
<string name="sticky_keys_summary">Press one key at a time for shortcuts instead of holding keys down together</string>
<!-- Title for a toggle switch for 'mouse' keys, an accessibility setting that allows the mouse pointer to be controlled using certain keys on a physical keyboard if keyboard is connected. [CHAR LIMIT=35] -->
<string name="mouse_keys">Mouse keys</string>
+ <!-- Title for a toggle switch for 'mouse' keys under mouse key main page, an accessibility setting that allows the mouse pointer to be controlled using certain keys on a physical keyboard if keyboard is connected. [CHAR LIMIT=35] -->
+ <string name="mouse_keys_main_title">Use mouse keys</string>
<!-- Summary text for the accessibility setting 'Mouse keys' preference sub-screen. [CHAR LIMIT=100] -->
<string name="mouse_keys_summary">Use your keyboard to control the pointer</string>
<!-- Title for the 'Mouse reverse scrolling' preference switch, which reverses the direction of mouse scroll wheels so that moving the wheel up scrolls the content down. [CHAR LIMIT=60] -->
@@ -4551,6 +4565,21 @@
<string name="mouse_swap_primary_button">Swap left and right buttons</string>
<!-- Summary text for the 'Swap buttons' preference switch indicating to users that when this switch is enabled, their left click will behave as though it is the right click (secondary action) and that the right click will be the primary action. [CHAR LIMIT=NONE] -->
<string name="mouse_swap_primary_button_summary">Use the left mouse button as your right</string>
+ <!-- page title for Mouse key main page. [CHAR LIMIT=NONE] -->
+ <string name="mouse_key_main_page_title">Mouse keys for <xliff:g id="keyboard name" example="my keyboard">%s</xliff:g></string>
+ <!-- Summary text for Mouse keys directional image. [CHAR LIMIT=NONE] -->
+ <string name="mouse_keys_directional_summary">Use the \“<xliff:g id="directional_label" example="7,8,9,u,o,j,k,l">%s</xliff:g>\” keys to move the mouse pointer</string>
+ <!-- Summary text for Mouse keys click image. [CHAR LIMIT=NONE] -->
+ <string name="mouse_keys_click_summary">Use the \“<xliff:g id="click_label" example="i">%s</xliff:g>\” key to click the primary mouse button</string>
+ <!-- Summary text for Mouse keys press hold image. [CHAR LIMIT=NONE] -->
+ <string name="mouse_keys_press_hold_summary">Use the \“<xliff:g id="press_hold_label" example="m">%s</xliff:g>\” key to press & hold the primary mouse button</string>
+ <!-- Summary text for Mouse keys release image. [CHAR LIMIT=NONE] -->
+ <string name="mouse_keys_release_summary">Use the \“<xliff:g id="release_label" example=",">%s</xliff:g>\” key to release the primary mouse button</string>
+ <!-- Summary text for Mouse keys toggle scroll image. [CHAR LIMIT=NONE] -->
+ <string name="mouse_keys_toggle_scroll_summary">Use the \“<xliff:g id="release_label_1" example=".">%1$s</xliff:g>\” key to toggle scroll mode. This will make the \“<xliff:g id="release_label_2" example="8, k, o, u">%2$s</xliff:g>\” keys scroll the view top, down, left or right</string>
+ <!-- Summary text for Mouse keys click secondary button image. [CHAR LIMIT=NONE] -->
+ <string name="mouse_keys_release2_summary">Use the \“<xliff:g id="release_2_label" example="/">%s</xliff:g>\” key to click the secondary mouse button</string>
+
<!-- Title for the button to trigger the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=35] -->
<string name="keyboard_shortcuts_helper">Keyboard shortcuts</string>
<!-- Summary text for the 'keyboard shortcuts helper' dialog. [CHAR LIMIT=100] -->
@@ -5134,18 +5163,18 @@
<string name="accessibility_tutorial_dialog_twofinger_doubletap_instruction">To start and stop magnification, quickly tap the screen twice with %1$d fingers</string>
<!-- Instruction for the accessibility tutorial dialog in accessibility service with quick settings shortcut. [CHAR LIMIT=NONE]-->
<string name="accessibility_tutorial_dialog_message_quick_setting">{count, plural,
- =1 {To use this feature, swipe down from the top of your screen. Then, find the {featureName} tile.}
- other {To use this feature, swipe down from the top of your screen with # fingers. Then, find the {featureName} tile.}
- }</string>
+ =1 {To use this feature, swipe down from the top of your screen. Then, find the {featureName} tile.}
+ other {To use this feature, swipe down from the top of your screen with # fingers. Then, find the {featureName} tile.}
+ }</string>
<!-- Warning for the accessibility shortcut type that is not available immediately during device setup when chosen, but will be available after setup. [CHAR LIMIT=NONE]-->
<string name="accessibility_tutorial_dialog_shortcut_unavailable_in_suw">This shortcut will be available after you finish device setup.</string>
<!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation and touch exploration is not enabled. [CHAR LIMIT=NONE] -->
<string name="accessibility_tutorial_dialog_message_gesture">To use this feature, swipe up from the bottom of the screen with 2 fingers.\n\nTo switch between features, swipe up with 2 fingers and hold.</string>
<!-- Instruction for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation. [CHAR LIMIT=NONE] -->
<string name="accessibility_tutorial_dialog_gesture_shortcut_instruction">{count, plural,
- =1 {To use this feature, swipe up from the bottom of your screen}
- other {To use this feature, swipe up with # fingers from the bottom of your screen}
- }</string>
+ =1 {To use this feature, swipe up from the bottom of your screen}
+ other {To use this feature, swipe up with # fingers from the bottom of your screen}
+ }</string>
<!-- Message for the accessibility tutorial dialog when user enables an accessibility service while using gesture navigation and touch exploration is enabled. [CHAR LIMIT=NONE] -->
<string name="accessibility_tutorial_dialog_message_gesture_talkback">To use this feature, swipe up from the bottom of the screen with 3 fingers.\n\nTo switch between features, swipe up with 3 fingers and hold.</string>
<!-- Message for the accessibility tutorial dialog when user chooses gesture navigation in navigation settings, an accessibility service is using the accessibility button, and touch exploration is disabled. [CHAR LIMIT=NONE] -->
@@ -5178,9 +5207,9 @@
<string name="accessibility_shortcut_edit_dialog_summary_software">Tap the accessibility button <xliff:g id="accessibility_icon" example="[Icon]">%s</xliff:g> at the bottom of your screen. To switch between features, touch & hold the accessibility button.</string>
<!-- Summary for gesture shortcut option -->
<string name="accessibility_shortcut_edit_dialog_summary_gesture">{count, plural,
- =1 {Swipe up from the bottom of your screen. To switch between features, swipe up and hold.}
- other {Swipe up with # fingers from the bottom of your screen. To switch between features, swipe up with # fingers and hold.}
- }</string>
+ =1 {Swipe up from the bottom of your screen. To switch between features, swipe up and hold.}
+ other {Swipe up with # fingers from the bottom of your screen. To switch between features, swipe up with # fingers and hold.}
+ }</string>
<!-- Summary for software shortcut in accessibility edit shortcut dialog when user had enabled the accessibility floating button mode (Floating over other apps). [CHAR LIMIT=NONE] -->
<string name="accessibility_shortcut_edit_dialog_summary_software_floating"><annotation id="link">More options</annotation></string>
<!-- Footer to show help link content description. [CHAR LIMIT=NONE] -->
@@ -5189,14 +5218,14 @@
<string name="accessibility_shortcut_edit_dialog_title_quick_settings">Quick Settings</string>
<!-- Summary for quick settings shortcut option in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings">{count, plural,
- =1 {Swipe down from the top of your screen}
- other {Swipe down with # fingers from the top of your screen}
- }</string>
+ =1 {Swipe down from the top of your screen}
+ other {Swipe down with # fingers from the top of your screen}
+ }</string>
<!-- Summary for quick settings shortcut option in accessibility edit shortcut dialog in Setup Wizard. [CHAR LIMIT=NONE] -->
<string name="accessibility_shortcut_edit_dialog_summary_quick_settings_suw">{count, plural,
- =1 {Swipe down from the top of your screen. This shortcut will be available after you finish device setup.}
- other {Swipe down with # fingers from the top of your screen. This shortcut will be available after you finish device setup.}
- }</string>
+ =1 {Swipe down from the top of your screen. This shortcut will be available after you finish device setup.}
+ other {Swipe down with # fingers from the top of your screen. This shortcut will be available after you finish device setup.}
+ }</string>
<!-- Shown as one of the item in the chosen accessibility shortcut types list presented as a label next to the shortcut toggle. [CHAR LIMIT=NONE] -->
<string name="accessibility_feature_shortcut_setting_summary_quick_settings">Quick Settings</string>
<!-- Title for hardware shortcut in accessibility edit shortcut dialog. [CHAR LIMIT=NONE] -->
@@ -5616,25 +5645,25 @@
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<string name="accessibilty_autoclick_preference_subtitle_short_delay">{count, plural,
- =1 {Short ({time} second)}
- other {Short ({time} seconds)}
- }</string>
+ =1 {Short ({time} second)}
+ other {Short ({time} seconds)}
+ }</string>
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<string name="accessibilty_autoclick_preference_subtitle_medium_delay">{count, plural,
- =1 {Medium ({time} second)}
- other {Medium ({time} seconds)}
- }</string>
+ =1 {Medium ({time} second)}
+ other {Medium ({time} seconds)}
+ }</string>
<!-- Subtitle for the accessibility preference to configure feature that performs click action soon after mouse/trackpad pointer stops moving, in case delay before click is extremely short. Placeholder will be set to the number of milliseconds to which the delay amounts. [CHAR LIMIT=NONE] -->
<string name="accessibilty_autoclick_preference_subtitle_long_delay">{count, plural,
- =1 {Long ({time} second)}
- other {Long ({time} seconds)}
- }</string>
+ =1 {Long ({time} second)}
+ other {Long ({time} seconds)}
+ }</string>
<!-- Summary for autoclick seekbar settings preference when user selected custom item. [CHAR LIMIT=35] -->
<string name="accessibilty_autoclick_delay_unit_second">{count, plural,
- =1 {{time} second}
- other {{time} seconds}
- }</string>
+ =1 {{time} second}
+ other {{time} seconds}
+ }</string>
<!-- Title for accessibility menu item to launch a settings activity. [CHAR LIMIT=15] -->
<string name="accessibility_menu_item_settings">Settings</string>
@@ -5796,15 +5825,15 @@
<string name="print_settings_summary_no_service">Off</string>
<string name="print_settings_summary">{count, plural,
- =1 {1 print service on}
- other {# print services on}
- }</string>
+ =1 {1 print service on}
+ other {# print services on}
+ }</string>
<!-- Print setting summary in settings screenm indicating how many print jobs are active [CHAR LIMIT=None] -->
<string name="print_jobs_summary">{count, plural,
- =1 {1 print job}
- other {# print jobs}
- }</string>
+ =1 {1 print job}
+ other {# print jobs}
+ }</string>
<!-- Title for print service settings screen [CHAR LIMIT=25] -->
<string name="print_settings_title">Print services</string>
@@ -5889,7 +5918,7 @@
<string name="power_usage_summary">What has been using the battery</string>
<!-- Display the battery level and status [CHAR_LIMIT=60] -->
<string name="power_usage_level_and_status"><xliff:g id="level">%1$s</xliff:g>
- - <xliff:g id="status">%2$s</xliff:g></string>
+ - <xliff:g id="status">%2$s</xliff:g></string>
<!-- Display time remaining until battery is discharged [CHAR_LIMIT=60] -->
<string name="power_discharge_remaining"><xliff:g id="remain">%1$s</xliff:g> remaining</string>
<!-- Display time remaining until battery is charged [CHAR_LIMIT=60] -->
@@ -5973,6 +6002,10 @@
<!-- Title for the battery summary tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_summary_title">Apps are running normally</string>
+ <!-- Title for the battery replacement tip [CHAR LIMIT=NONE] -->
+ <string name="battery_tip_replacement_title">Battery replacement recommended</string>
+ <!-- Summary for the battery replacement tip [CHAR LIMIT=NONE] -->
+ <string name="battery_tip_replacement_summary">Battery capacity and charging performance are reduced, and battery replacement is recommended.</string>
<!-- Title for the low battery tip [CHAR LIMIT=NONE] -->
<string name="battery_tip_low_battery_title">Battery level low</string>
<!-- Summary for the low battery tip [CHAR LIMIT=NONE] -->
@@ -6007,30 +6040,30 @@
<string name="battery_tip_dialog_message_footer">Includes high-power background activity</string>
<!-- Title for restricted app preference, showing how many app need to be restricted [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_title">{count, plural,
- =1 {Restrict # app}
- other {Restrict # apps}
- }</string>
+ =1 {Restrict # app}
+ other {Restrict # apps}
+ }</string>
<!-- Title for restricted app preference, showing how many app been restricted [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_handled_title">{count, plural,
- =1 {{label} recently restricted}
- other {# apps recently restricted}
- }</string>
+ =1 {{label} recently restricted}
+ other {# apps recently restricted}
+ }</string>
<!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_summary">{count, plural,
- =1 {{label} has high background battery usage}
- other {# apps have high background battery usage}
- }</string>
+ =1 {{label} has high background battery usage}
+ other {# apps have high background battery usage}
+ }</string>
<!-- Summary for restricted app preference, showing the impact of the apps [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_handled_summary">{count, plural,
- =1 {This app can\'t run in the background}
- other {These apps can\'t run in the background}
- }</string>
+ =1 {This app can\'t run in the background}
+ other {These apps can\'t run in the background}
+ }</string>
<!-- Title for dialog to restrict the app [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_app_dialog_title">{count, plural,
- =1 {Restrict app?}
- other {Restrict # apps?}
- }</string>
+ =1 {Restrict app?}
+ other {Restrict # apps?}
+ }</string>
<!-- Message for battery tip dialog to show the info to restrict the app [CHAR LIMIT=NONE] -->
<string name="battery_tip_restrict_app_dialog_message">To save battery, stop <xliff:g id="app">%1$s</xliff:g> from using battery in the background. This app may not work properly and notifications may be delayed.</string>
<!-- Message for battery tip dialog to show the info to restrict the app, below it app list will be shown as a view [CHAR LIMIT=NONE] -->
@@ -6064,9 +6097,9 @@
<string name="restricted_app_title">Restricted apps</string>
<!-- Summary for restricted app preference, clicking it will goes to restricted app list [CHAR LIMIT=NONE] -->
<string name="restricted_app_summary">{count, plural,
- =1 {Limiting battery usage for # app}
- other {Limiting battery usage for # apps}
- }</string>
+ =1 {Limiting battery usage for # app}
+ other {Limiting battery usage for # apps}
+ }</string>
<!-- Summary for restricted app to show the restriction time [CHAR LIMIT=NONE] -->
<string name="restricted_app_time_summary">Restricted <xliff:g id="time" example="5 days ago">%1$s</xliff:g></string>
@@ -6086,9 +6119,9 @@
<!-- Summary for battery manager, showing app restricted -->
<string name="battery_manager_app_restricted">{count, plural,
- =1 {# app restricted}
- other {# apps restricted}
- }</string>
+ =1 {# app restricted}
+ other {# apps restricted}
+ }</string>
<!-- Summary for top level battery tile if battery is not present. [CHAR LIMIT=NONE] -->
<string name="battery_missing_message">Problem reading the battery meter.</string>
@@ -6576,9 +6609,9 @@
<string name="remove_credential_management_app_dialog_message">This app won\u2019t manage certificates, but it will stay on your device. Any certificates installed by the app will be uninstalled.</string>
<!-- List item found in the credential management app's authentication policy [CHAR LIMIT=NONE] -->
<string name="number_of_urls">{count, plural,
- =1 {# URL}
- other {# URLs}
- }</string>
+ =1 {# URL}
+ other {# URLs}
+ }</string>
<!-- Sound settings screen, setting check box label -->
<string name="emergency_tone_title">Emergency dialing signal</string>
@@ -6680,9 +6713,9 @@
<!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<string name="notification_history_count">{count, plural,
- =1 {# notification}
- other {# notifications}
- }</string>
+ =1 {# notification}
+ other {# notifications}
+ }</string>
<!-- Category title for phone call's ringtone and vibration settings in the Sound Setting.
[CHAR LIMIT=40] -->
@@ -7103,9 +7136,9 @@
<string name="done_button">Done</string>
<!-- Title of Dialog warning users of SSL monitoring. [CHAR LIMIT=NONE] -->
<string name="ssl_ca_cert_dialog_title">{count, plural,
- =1 {Trust or remove certificate}
- other {Trust or remove certificates}
- }</string>
+ =1 {Trust or remove certificate}
+ other {Trust or remove certificates}
+ }</string>
<!-- Text of message to show to device owner user whose administrator has installed a SSL CA Cert. [CHAR LIMIT=NONE] -->
<string name="ssl_ca_cert_info_message_device_owner"> {numberOfCertificates, plural,
=1 {{orgName} has installed a certificate authority on your device, which may allow them to monitor your device network activity, including emails, apps, and secure websites.\n\nFor more information about this certificate, contact your admin.}
@@ -7120,9 +7153,9 @@
<string name="ssl_ca_cert_warning_message">A third party is capable of monitoring your network activity, including emails, apps, and secure websites.\n\nA trusted credential installed on your device is making this possible.</string>
<!-- Label on button that will take the user to the Trusted Credentials settings page. [CHAR LIMIT=NONE]-->
<string name="ssl_ca_cert_settings_button">{count, plural,
- =1 {Check certificate}
- other {Check certificates}
- }</string>
+ =1 {Check certificate}
+ other {Check certificates}
+ }</string>
<!-- User settings screen title [CHAR LIMIT=40] -->
<string name="user_settings_title">Users</string>
@@ -7395,6 +7428,8 @@
<string name="help_url_battery" translatable="false"></string>
<!-- Help URL, Battery Defender [DO NOT TRANSLATE] -->
<string name="help_url_battery_defender" translatable="false"></string>
+ <!-- Help URL, Battery Replacement [DO NOT TRANSLATE] -->
+ <string name="help_url_battery_replacement" translatable="false"></string>
<!-- Help URL, Dock Defender [DO NOT TRANSLATE] -->
<string name="help_url_dock_defender" translatable="false"></string>
<!-- Help URL, Incompatible charging [DO NOT TRANSLATE] -->
@@ -8080,9 +8115,9 @@
<!-- Zen Modes: Summary for the Do not Disturb option that describes how many automatic rules (schedules) are enabled [CHAR LIMIT=NONE]-->
<string name="zen_mode_settings_schedules_summary">
{count, plural,
- =0 {None}
- =1 {1 schedule set}
- other {# schedules set}
+ =0 {None}
+ =1 {1 schedule set}
+ other {# schedules set}
}
</string>
@@ -8118,20 +8153,22 @@
<!-- Modes: Summary for the modes segment, when at least one mode is active. [CHAR LIMIT=NONE]-->
<string name="zen_modes_summary_some_active">
{count, plural, offset:2
- =0 {}
- =1 {{mode_1} is active}
- =2 {{mode_1} and {mode_2} are active}
- =3 {{mode_1}, {mode_2}, and {mode_3} are active}
- other {{mode_1}, {mode_2}, and # more are active}
+ =0 {}
+ =1 {{mode_1} is active}
+ =2 {{mode_1} and {mode_2} are active}
+ =3 {{mode_1}, {mode_2}, and {mode_3} are active}
+ other {{mode_1}, {mode_2}, and # more are active}
}
</string>
<!-- Modes: Summary for the modes segment, when no modes are active. [CHAR LIMIT=NONE]-->
- <string name="zen_modes_summary_none_active">
+ <!-- Note: The "0" option should never actually occur. -->
+ <string name="zen_modes_summary">
{count, plural,
- =0 {}
- =1 {1 mode can turn on automatically}
- other {# modes can turn on automatically}
+ =0 {Do Not Disturb}
+ =1 {{mode_1}}
+ =2 {{mode_1}, {mode_2}}
+ other {{mode_1}, {mode_2}, {mode_3}}
}
</string>
@@ -8432,25 +8469,25 @@
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when dnd is manually toggled on [CHAR LIMIT=NONE] -->
<string name="zen_mode_duration_summary_time_hours">
{count, plural,
- =1 {1 hour}
- other {# hours}
+ =1 {1 hour}
+ other {# hours}
}
</string>
<!-- Do not disturb: Summary for zen mode duration setting indicating how long dnd will last when toggled on -->
<string name="zen_mode_duration_summary_time_minutes">
{count, plural,
- =1 {1 minute}
- other {# minutes}
+ =1 {1 minute}
+ other {# minutes}
}
</string>
<!-- Summary for the Sound Do not Disturb option when DND isn't currently on. [CHAR LIMIT=NONE]-->
<string name="zen_mode_sound_summary_off">
{count, plural,
- =0 {Off}
- =1 {Off / 1 schedule can turn on automatically}
- other {Off / # schedules can turn on automatically}
+ =0 {Off}
+ =1 {Off / 1 schedule can turn on automatically}
+ other {Off / # schedules can turn on automatically}
}
</string>
@@ -8793,9 +8830,9 @@
<!-- [CHAR LIMIT=100] summary text on link to 'all conversations' page, some conversations are priority -->
<string name="priority_conversation_count">{count, plural,
- =1 {# priority conversation}
- other {# priority conversations}
- }</string>
+ =1 {# priority conversation}
+ other {# priority conversations}
+ }</string>
<!-- [CHAR LIMIT=100] preference category title -->
<string name="important_conversations">Priority conversations</string>
@@ -8892,13 +8929,13 @@
<!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<string name="notifications_sent_daily">{count, plural,
- =1 {About # notification per day}
- other {About # notifications per day}
- }</string>
+ =1 {About # notification per day}
+ other {About # notifications per day}
+ }</string>
<string name="notifications_sent_weekly">{count, plural,
- =1 {About # notification per week}
- other {About # notifications per week}
- }</string>
+ =1 {About # notification per week}
+ other {About # notifications per week}
+ }</string>
<!-- app summary of notification app list screen [CHAR LIMIT=100] -->
<string name="notifications_sent_never">Never</string>
@@ -8938,7 +8975,7 @@
<!-- Title for a warning message about security implications of enabling a notification
listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
<string name="notification_listener_security_warning_title">Allow notification access for
- <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
+ <xliff:g id="service" example="NotificationReader">%1$s</xliff:g>?</string>
<!-- Summary for a warning message about security implications of enabling a notification
listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
<string name="notification_listener_security_warning_summary">
@@ -9002,7 +9039,7 @@
<!-- Title for a warning message about security implications of enabling a VR
listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
<string name="vr_listener_security_warning_title">Allow VR service access for
- <xliff:g id="service" example="VrCore">%1$s</xliff:g>?</string>
+ <xliff:g id="service" example="VrCore">%1$s</xliff:g>?</string>
<!-- Summary for a warning message about security implications of enabling a VR
listener, displayed as a dialog message. [CHAR LIMIT=NONE] -->
<string name="vr_listener_security_warning_summary">
@@ -9109,9 +9146,9 @@
<!-- Summary of preference to manage connected work and personal apps, informing the user how many apps are connected -->
<string name="interact_across_profiles_number_of_connected_apps">{count, plural,
- =1 {# app connected}
- other {# apps connected}
- }</string>
+ =1 {# app connected}
+ other {# apps connected}
+ }</string>
<!-- Banner title. This banner lets a user know that they need to install an app in their
work profile in order to connect it to the corresponding personal app.
@@ -9183,9 +9220,9 @@
<!-- [CHAR LIMIT=NONE] Footer listing a count of deleted channels. -->
<string name="deleted_channels">{count, plural,
- =1 {# category deleted}
- other {# categories deleted}
- }</string>
+ =1 {# category deleted}
+ other {# categories deleted}
+ }</string>
<!-- [CHAR LIMIT=NONE] App notification settings: Block option title -->
<string name="app_notification_block_title">Block all</string>
@@ -9346,9 +9383,9 @@
<!-- [CHAR LIMIT=NONE] Zen mode settings: Number of conversations allowed to bypass DND -->
<string name="zen_mode_conversations_count">
{count, plural,
- =0 {None}
- =1 {1 conversation}
- other {# conversations}
+ =0 {None}
+ =1 {1 conversation}
+ other {# conversations}
}
</string>
@@ -9380,11 +9417,11 @@
<!-- Zen mode settings: Starred contacts summary [CHAR LIMIT=NONE] -->
<string name="zen_mode_starred_contacts_summary_contacts">
{count, plural, offset:2
- =0 {None}
- =1 {{contact_1}}
- =2 {{contact_1} and {contact_2}}
- =3 {{contact_1}, {contact_2}, and {contact_3}}
- other {{contact_1}, {contact_2}, and # others}
+ =0 {None}
+ =1 {{contact_1}}
+ =2 {{contact_1} and {contact_2}}
+ =3 {{contact_1}, {contact_2}, and {contact_3}}
+ other {{contact_1}, {contact_2}, and # others}
}
</string>
@@ -9411,9 +9448,9 @@
<!-- Zen mode settings: Senders in contacts can bypass DND summary summary [CHAR LIMIT=NONE] -->
<string name="zen_mode_contacts_count">
{count, plural,
- =0 {None}
- =1 {1 contact}
- other {# contacts}
+ =0 {None}
+ =1 {1 contact}
+ other {# contacts}
}
</string>
<!-- [CHAR LIMIT=40] Zen mode settings: Calls or messages option value: From anyone -->
@@ -9489,11 +9526,11 @@
<!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
<string name="zen_mode_apps_subtext">
{count, plural, offset:2
- =0 {No apps can interrupt}
- =1 {{app_1} can interrupt}
- =2 {{app_1} and {app_2} can interrupt}
- =3 {{app_1}, {app_2}, and {app_3} can interrupt}
- other {{app_1}, {app_2}, and # more can interrupt}
+ =0 {No apps can interrupt}
+ =1 {{app_1} can interrupt}
+ =2 {{app_1} and {app_2} can interrupt}
+ =3 {{app_1}, {app_2}, and {app_3} can interrupt}
+ other {{app_1}, {app_2}, and # more can interrupt}
}
</string>
<!-- Modes: Entry in the "apps that can bypass DND" list that corresponds to a work profile app (e.g. "Chrome (Work)" [CHAR LIMIT=15]. -->
@@ -9528,11 +9565,11 @@
<!-- [CHAR LIMIT=NONE] Zen mode settings: Lists apps that can bypass DND. For example, "Nest, Messages, and 2 more can interrupt". -->
<string name="zen_mode_bypassing_apps_subtext">
{count, plural, offset:2
- =0 {No apps can interrupt}
- =1 {{app_1} can interrupt}
- =2 {{app_1} and {app_2} can interrupt}
- =3 {{app_1}, {app_2}, and {app_3} can interrupt}
- other {{app_1}, {app_2}, and # more can interrupt}
+ =0 {No apps can interrupt}
+ =1 {{app_1} can interrupt}
+ =2 {{app_1} and {app_2} can interrupt}
+ =3 {{app_1}, {app_2}, and {app_3} can interrupt}
+ other {{app_1}, {app_2}, and # more can interrupt}
}
</string>
<!-- [CHAR LIMIT=100] Zen mode settings: Allow apps to bypass DND title-->
@@ -9546,11 +9583,11 @@
<!-- [CHAR LIMIT=NONE] Zen mode settings: Summary for sound interruption settings -->
<string name="zen_mode_other_sounds_summary">
{count, plural, offset:2
- =0 {Nothing can interrupt}
- =1 {{sound_category_1} can interrupt}
- =2 {{sound_category_1} and {sound_category_2} can interrupt}
- =3 {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
- other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
+ =0 {Nothing can interrupt}
+ =1 {{sound_category_1} can interrupt}
+ =2 {{sound_category_1} and {sound_category_2} can interrupt}
+ =3 {{sound_category_1}, {sound_category_2}, and {sound_category_3} can interrupt}
+ other {{sound_category_1}, {sound_category_2}, and # more can interrupt}
}
</string>
<!-- [CHAR LIMIT=120] Zen mode settings: No sounds are allowed to bypass DND -->
@@ -9594,14 +9631,14 @@
<string name="zen_mode_summary_alarms_only_indefinite">Change to alarms only indefinitely</string>
<!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only for < 60 minutes. -->
<string name="zen_mode_summary_alarms_only_by_minute">{count, plural,
- =1 {Change to alarms only for one minute until {time}}
- other {Change to alarms only for # minutes (until {time})}
- }</string>
+ =1 {Change to alarms only for one minute until {time}}
+ other {Change to alarms only for # minutes (until {time})}
+ }</string>
<!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only for N hours. -->
<string name="zen_mode_summary_alarms_only_by_hour">{count, plural,
- =1 {Change to alarms only for one hour until {time}}
- other {Change to alarms only for # hours until {time}}
- }</string>
+ =1 {Change to alarms only for one hour until {time}}
+ other {Change to alarms only for # hours until {time}}
+ }</string>
<!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: switch to alarms only until a specific time. -->
<string name="zen_mode_summary_alarms_only_by_time">Change to alarms only until <xliff:g id="formattedTime" example="10:00 PM">%1$s</xliff:g></string>
<!-- [CHAR LIMIT=NONE] Zen mode summary spoken when changing mode by voice: Turn on all notifications. -->
@@ -9823,13 +9860,13 @@
<!-- Title, message and button for verified links dialog. -->
<string name="app_launch_verified_links_title">{count, plural,
- =1 {# verified link}
- other {# verified links}
- }</string>
+ =1 {# verified link}
+ other {# verified links}
+ }</string>
<string name="app_launch_verified_links_message">{count, plural,
- =1 {This link is verified and automatically opens in this app.}
- other {These links are verified and automatically open in this app.}
- }</string>
+ =1 {This link is verified and automatically opens in this app.}
+ other {These links are verified and automatically open in this app.}
+ }</string>
<!-- OK button for verified links dialog. [CHAR LIMIT=20] -->
<string name="app_launch_dialog_ok">OK</string>
<!-- Info icon description of the verified links. [CHAR LIMIT=NONE] -->
@@ -9842,9 +9879,9 @@
<!-- Title and button for supported links dialog. -->
<string name="app_launch_supported_links_title">{count, plural,
- =1 {# supported link}
- other {# supported links}
- }</string>
+ =1 {# supported link}
+ other {# supported links}
+ }</string>
<!-- Add button for supported links dialog. [CHAR LIMIT=20] -->
<string name="app_launch_supported_links_add">Add</string>
<!-- The subtext of the link title in supported links dialog. [CHAR LIMIT=30] -->
@@ -9880,15 +9917,15 @@
<!-- Permissions preference summary [CHAR LIMIT=40] -->
<string name="notifications_categories_off">{count, plural,
- =1 {# category turned off}
- other {# categories turned off}
- }</string>
+ =1 {# category turned off}
+ other {# categories turned off}
+ }</string>
<!-- Runtime permissions preference summary. Number of additional permissions granted. [CHAR LIMIT=40] -->
<string name="runtime_permissions_additional_count">{count, plural,
- =1 {# additional permission}
- other {# additional permissions}
- }</string>
+ =1 {# additional permission}
+ other {# additional permissions}
+ }</string>
<!-- Runtime permissions preference summary, shown when the app has no permissions granted. [CHAR LIMIT=40] -->
<string name="runtime_permissions_summary_no_permissions_granted">No permissions granted</string>
@@ -9910,9 +9947,9 @@
<!-- Summary of number of apps that have not been used for months. [CHAR LIMIT=40]-->
<string name="unused_apps_summary">{count, plural,
- =1 {# unused app}
- other {# unused apps}
- }</string>
+ =1 {# unused app}
+ other {# unused apps}
+ }</string>
<!-- Label for category for unused app settings for an app. [CHAR LIMIT=40]-->
<string name="unused_apps_category">Unused app settings</string>
@@ -9980,9 +10017,9 @@
<!-- Summary for allow app to open supported links [CHAR LIMIT=42] -->
<string name="app_link_open_always_summary">{count, plural,
- =1 {App claims to handle # link}
- other {App claims to handle # links}
- }</string>
+ =1 {App claims to handle # link}
+ other {App claims to handle # links}
+ }</string>
<!-- Footer of open supported links settings [CHAR LIMIT=NONE] -->
<string name="open_supported_links_footer">App claims to handle following links:</string>
@@ -10252,9 +10289,9 @@
<!-- Description of number of apps using memory [CHAR LIMIT=NONE] -->
<string name="memory_usage_apps_summary">{count, plural,
- =1 {1 app used memory in the last {time}}
- other {# apps used memory in the last {time}}
- }</string>
+ =1 {1 app used memory in the last {time}}
+ other {# apps used memory in the last {time}}
+ }</string>
<!-- Label for toggle that enables the profiling/aggregating of memory usage [CHAR LIMIT=80]-->
<string name="force_enable_pss_profiling_title">Enable memory usage profiling</string>
@@ -10680,9 +10717,9 @@
<!-- Description of number of apps allowed to ignore Data Saver [CHAR LIMIT=NONE] -->
<string name="data_saver_unrestricted_summary">{count, plural,
- =1 {1 app allowed to use unrestricted mobile data when Data Saver is on}
- other {# apps allowed to use unrestricted mobile data when Data Saver is on}
- }</string>
+ =1 {1 app allowed to use unrestricted mobile data when Data Saver is on}
+ other {# apps allowed to use unrestricted mobile data when Data Saver is on}
+ }</string>
<!-- Data usage title text [CHAR LIMIT=30] -->
<string name="data_usage_title">Primary data</string>
@@ -10707,9 +10744,9 @@
<!-- Informational text about time left in billing cycle [CHAR LIMIT=60] -->
<string name="billing_cycle_days_left">{count, plural,
- =1 {# day left}
- other {# days left}
- }</string>
+ =1 {# day left}
+ other {# days left}
+ }</string>
<!-- Informational text about time left in billing cycle [CHAR LIMIT=60] -->
<string name="billing_cycle_none_left">No time remaining</string>
@@ -11286,9 +11323,9 @@
<string name="enterprise_privacy_apps_count_estimation_info">Number of apps is estimated. It may not include apps installed outside of the Play Store.</string>
<!-- Summary indicating the number of apps that a label (e.g. installed apps or apps granted a particular permission) refers to. The number shown is a minimum as there may be additional apps we do not know about. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_number_packages_lower_bound">{count, plural,
- =1 {Minimum # app}
- other {Minimum # apps}
- }</string>
+ =1 {Minimum # app}
+ other {Minimum # apps}
+ }</string>
<!-- Label indicating that the admin granted one or more apps access to the device's location. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_location_access">Location permissions</string>
<!-- Label indicating that the admin granted one or more apps access to the microphone. [CHAR LIMIT=NONE] -->
@@ -11299,9 +11336,9 @@
<string name="enterprise_privacy_enterprise_set_default_apps">Default apps</string>
<!-- Summary indicating the number of apps that a label (e.g. installed apps or apps granted a particular permission) refers to. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_number_packages">{count, plural,
- =1 {# app}
- other {# apps}
- }</string>
+ =1 {# app}
+ other {# apps}
+ }</string>
<!-- Label explaining that the current input method was set by the admin. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_input_method">Default keyboard</string>
<!-- Summary indicating the input method set by the admin. [CHAR LIMIT=NONE] -->
@@ -11322,9 +11359,9 @@
<string name="enterprise_privacy_ca_certs_work">Trusted credentials in your work profile</string>
<!-- Summary indicating the number of trusted CA certificates installed by the admin. The number shown is a minimum as there may be additional CA certificates we do not know about. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_number_ca_certs">{count, plural,
- =1 {Minimum # CA certificate}
- other {Minimum # CA certificates}
- }</string>
+ =1 {Minimum # CA certificate}
+ other {Minimum # CA certificates}
+ }</string>
<!-- Label explaining that the admin can lock the device and change the user's password. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_lock_device">Admin can lock the device and reset password</string>
<!-- Label explaining that the admin can wipe the device remotely. [CHAR LIMIT=NONE] -->
@@ -11335,9 +11372,9 @@
<string name="enterprise_privacy_failed_password_wipe_work">Failed password attempts before deleting work profile data</string>
<!-- Summary indicating the number of mistyped passwords after which the device or work profile wipes itself. [CHAR LIMIT=NONE] -->
<string name="enterprise_privacy_number_failed_password_wipe">{count, plural,
- =1 {# attempt}
- other {# attempts}
- }</string>
+ =1 {# attempt}
+ other {# attempts}
+ }</string>
<!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
<string name="do_disclosure_generic">This device is managed by your organization.</string>
<!-- Message indicating that the device is enterprise-managed by a Device Owner [CHAR LIMIT=NONE] -->
@@ -11400,25 +11437,25 @@
<!-- Strings for displaying which applications were set as default for specific actions. -->
<!-- Title for the apps that have been set as default handlers of camera-related intents. [CHAR LIMIT=30] -->
<string name="default_camera_app_title">{count, plural,
- =1 {Camera app}
- other {Camera apps}
- }</string>
+ =1 {Camera app}
+ other {Camera apps}
+ }</string>
<!-- Title for the app that has been set as default handler of calendar-related intents. [CHAR LIMIT=30] -->
<string name="default_calendar_app_title">Calendar app</string>
<!-- Title for the app that has been set as default handler of contacts-related intents. [CHAR LIMIT=30] -->
<string name="default_contacts_app_title">Contacts app</string>
<!-- Title for the apps that have been set as default handlers of new email intents. [CHAR LIMIT=30] -->
<string name="default_email_app_title">{count, plural,
- =1 {Email client app}
- other {Email client apps}
- }</string>
+ =1 {Email client app}
+ other {Email client apps}
+ }</string>
<!-- Title for the app that has been set as default handler of geo-related intents. [CHAR LIMIT=30] -->
<string name="default_map_app_title">Map app</string>
<!-- Title for the apps that have been set as default handlers of call-related intents. [CHAR LIMIT=30] -->
<string name="default_phone_app_title">{count, plural,
- =1 {Phone app}
- other {Phone apps}
- }</string>
+ =1 {Phone app}
+ other {Phone apps}
+ }</string>
<!-- Template for concatenating two app names -->
<string name="app_names_concatenation_template_2"><xliff:g id="first_app_name">%1$s</xliff:g>, <xliff:g id="second_app_name">%2$s</xliff:g></string>
<!-- Template for concatenating three app names -->
@@ -11513,9 +11550,9 @@
<!-- Summary for passwords settings that shows how many passwords are saved for each autofill
service. [CHAR LIMIT=NONE] -->
<string name="autofill_passwords_count">{count, plural,
- =1 {# password}
- other {# passwords}
- }</string>
+ =1 {# password}
+ other {# passwords}
+ }</string>
<!-- DO NOT TRANSLATE Summary placeholder for when the passwords count is still loading or is
unavailable. -->
<string name="autofill_passwords_count_placeholder" translatable="false">\u2014</string>
@@ -12374,10 +12411,10 @@
<string name="choose_sim_title">Choose a SIM to use</string>
<!-- The body text of choose SIM activity. [CHAR LIMIT=NONE] -->
<string name="choose_sim_text">{count, plural,
- =1 {1 SIM is available on this device, but only one can be used at a time}
- =2 {2 SIMs are available on this device, but only one can be used at a time}
- other {# SIMs are available on this device, but only one can be used at a time}
- }</string>
+ =1 {1 SIM is available on this device, but only one can be used at a time}
+ =2 {2 SIMs are available on this device, but only one can be used at a time}
+ other {# SIMs are available on this device, but only one can be used at a time}
+ }</string>
<!-- String indicating that we are activating the profile [CHAR LIMIT=NONE] -->
<string name="choose_sim_activating">Turning on<xliff:g id="ellipsis" example="...">…</xliff:g></string>
<!-- String indicating that we failed to activate the selected profile [CHAR LIMIT=NONE] -->
@@ -12508,9 +12545,9 @@
<!-- Summary for the accessibility usage preference in the Privacy page. [CHAR LIMIT=NONE] -->
<string name="accessibility_usage_summary">{count, plural,
- =1 {1 app has full access to your device}
- other {# apps have full access to your device}
- }</string>
+ =1 {1 app has full access to your device}
+ other {# apps have full access to your device}
+ }</string>
<!-- Label for the title on wfc disclaimer fragment. [CHAR LIMIT=40] -->
<string name="wfc_disclaimer_title_text">Important information</string>
@@ -13263,9 +13300,9 @@
<!-- Background Install Control UI -->
<!-- [CHAR LIMIT=NONE] Preference Feature Summary -->
<string name="background_install_preference_summary">{count, plural,
- =1 {# app}
- other {# apps}
- }</string>
+ =1 {# app}
+ other {# apps}
+ }</string>
<!-- [CHAR LIMIT=NONE] Feature Title -->
<string name="background_install_title">Apps installed in the background</string>
@@ -13277,14 +13314,14 @@
<string name="background_install_uninstall_button_description">Uninstall app</string>
<!-- [CHAR LIMIT=NONE] Before time period group list title -->
<string name="background_install_before">{count, plural,
- =1 {Apps installed in the last # month}
- other {Apps installed in the last # months}
- }</string>
+ =1 {Apps installed in the last # month}
+ other {Apps installed in the last # months}
+ }</string>
<!-- [CHAR LIMIT=NONE] After time period group list title -->
<string name="background_install_after">{count, plural,
- =1 {Apps installed more than # month ago}
- other {Apps installed more than # months ago}
- }</string>
+ =1 {Apps installed more than # month ago}
+ other {Apps installed more than # months ago}
+ }</string>
<!-- App Aspect Ratio (User Aspect Ratio Override) -->
<!-- [CHAR LIMIT=60] Aspect ratio title setting to choose app aspect ratio -->
@@ -13477,11 +13514,11 @@
<!--Text for Stylus Pointer Icon preference -->
<string name="show_stylus_pointer_icon">Show pointer while hovering</string>
- <!-- Developer settings title: Media DRM settings screen. [CHAR LIMIT=50] -->
+ <!-- Developer settings title: Media DRM settings screen. [CHAR LIMIT=50] -->
<string name="media_drm_settings_title">Media DRM settings</string>
- <!-- Developer settings title: select whether to enable force Software Secure Crypto fallback. [CHAR LIMIT=50] -->
+ <!-- Developer settings title: select whether to enable force Software Secure Crypto fallback. [CHAR LIMIT=50] -->
<string name="force_swcrypto_fallback_title">Force Software Secure Crypto</string>
- <!-- Developer settings summary: select to force Software Secure Crypto.[CHAR LIMIT=NONE] -->
+ <!-- Developer settings summary: select to force Software Secure Crypto.[CHAR LIMIT=NONE] -->
<string name="force_swcrypto_fallback_summary">Force DRM key management to use software-based whitebox crypto</string>
<!--Text for acquire msg on UDFPS devices -->
@@ -13701,8 +13738,10 @@
<string name="audio_streams_main_page_password_dialog_join_button">Listen to stream</string>
<!-- Le audio streams main page qr code scanner summary [CHAR LIMIT=NONE] -->
<string name="audio_streams_main_page_qr_code_scanner_summary">Scan an audio stream QR code to listen with <xliff:g example="LE headset" id="device_name">%1$s</xliff:g></string>
- <!-- Le audio streams password dialog [CHAR LIMIT=NONE] -->
+ <!-- Le audio streams password dialog not editable message [CHAR LIMIT=NONE] -->
<string name="audio_streams_main_page_password_dialog_cannot_edit">Can\u0027t edit password while sharing. To change the password, first turn off audio sharing.</string>
+ <!-- Le audio streams password dialog password format alert [CHAR LIMIT=NONE] -->
+ <string name="audio_streams_main_page_password_dialog_format_alert">Your password must contain 4-16 characters and use only letters, numbers and symbols</string>
<!-- Text for audio sharing qrcode scanner [CHAR LIMIT=none]-->
<string name="audio_streams_qr_code_scanner_label">QR code scanner</string>
<!-- Learn more link for audio sharing qrcode [CHAR LIMIT=none]-->
@@ -13724,8 +13763,12 @@
<string name="contacts_storage_device_only_preference_summary">New contacts won\'t be synced with an account</string>
<!-- Text for explaining the selection in Contacts Storage Settings [CHAR LIMIT=NONE] -->
<string name="contacts_storage_selection_message">Contacts will be saved to your device and synced to your account by default</string>
+ <!-- Text for error toast when there's error setting the default account in Contacts Storage Settings [CHAR LIMIT=NONE] -->
+ <string name="contacts_storage_set_default_account_error_message">Error setting the default account</string>
<!-- Text for displaying when no account is set as default account [CHAR LIMIT=50] -->
- <string name="contacts_storage_no_account_set">No default set</string>
+ <string name="contacts_storage_no_account_set_summary">No default set</string>
+ <!-- Text for displaying when default account is set as local only [CHAR LIMIT=50] -->
+ <string name="contacts_storage_local_account_summary">Device only</string>
<!-- Text for add account selection message when no account has been added [CHAR LIMIT=100] -->
<string name="contacts_storage_first_time_add_account_message">Add an account to get started</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 70d3670..5bcb805 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -455,11 +455,13 @@
</style>
<style name="SearchBarStyle">
+ <item name="android:theme">@style/Theme.MaterialComponents.DayNight</item>
<item name="cardCornerRadius">@dimen/search_bar_corner_radius</item>
<item name="cardElevation">0dp</item>
</style>
<style name="SearchBarStyle_v2">
+ <item name="android:theme">@style/Theme.MaterialComponents.DayNight</item>
<item name="cardCornerRadius">40dp</item>
<item name="cardElevation">0dp</item>
<item name="strokeWidth">1dp</item>
diff --git a/res/xml/accessibility_system_controls.xml b/res/xml/accessibility_system_controls.xml
index 460214f..a8cb1bb 100644
--- a/res/xml/accessibility_system_controls.xml
+++ b/res/xml/accessibility_system_controls.xml
@@ -20,6 +20,9 @@
android:persistent="false"
android:title="@string/accessibility_system_controls_title">
+ <!-- The item is not specific to Accessibility.
+ The same entry is under System, which is unlikely to be removed,
+ so this is not searchable. -->
<Preference
android:fragment="com.android.settings.gestures.SystemNavigationGestureSettings"
android:key="gesture_system_navigation_input_summary_accessibility"
@@ -28,6 +31,9 @@
settings:searchable="false"
settings:controller="com.android.settings.gestures.SystemNavigationPreferenceController"/>
+ <!-- The item is not specific to Accessibility.
+ The same entry is under System > Gesture, which is unlikely to be removed,
+ so this is not searchable. -->
<Preference
android:fragment="com.android.settings.gestures.OneHandedSettings"
android:key="gesture_system_navigation_one_handed_accessibility"
@@ -43,21 +49,28 @@
settings:controller="com.android.settings.accessibility.PowerButtonEndsCallPreferenceController"/>
<!-- Standard auto-rotation preference that will be shown when device state based auto-rotation
- settings are NOT available. -->
+ settings are NOT available.
+ The item is not specific to Accessibility.
+ The same entry is under Display & touch, which is unlikely to be removed,
+ so this is not searchable.-->
<SwitchPreferenceCompat
android:key="toggle_lock_screen_rotation_preference"
android:persistent="false"
android:title="@string/accelerometer_title"
+ settings:searchable="false"
settings:controller="com.android.settings.accessibility.LockScreenRotationPreferenceController"/>
<!-- Auto-rotation preference that will be shown when device state based auto-rotation settings
- are available. -->
+ are available.
+ The item is not specific to Accessibility.
+ The same entry is under Display & touch, which is unlikely to be removed,
+ so this is not searchable. -->
<Preference
android:key="device_state_auto_rotate_accessibility"
android:persistent="false"
android:title="@string/accelerometer_title"
android:fragment="com.android.settings.display.DeviceStateAutoRotateDetailsFragment"
- settings:keywords="@string/keywords_auto_rotate"
+ settings:searchable="false"
settings:controller="com.android.settings.display.DeviceStateAutoRotateOverviewController"/>
</PreferenceScreen>
diff --git a/res/xml/adaptive_connectivity_settings.xml b/res/xml/adaptive_connectivity_settings.xml
index 6306006..0c8ff88 100644
--- a/res/xml/adaptive_connectivity_settings.xml
+++ b/res/xml/adaptive_connectivity_settings.xml
@@ -29,7 +29,7 @@
settings:lottie_rawRes="@drawable/ic_enhanced_connectivity"/>
<com.android.settingslib.widget.MainSwitchPreference
- android:key="adaptive_connectivity"
+ android:key="adaptive_connectivity_enabled"
android:title="@string/adaptive_connectivity_main_switch_title"
settings:controller="com.android.settings.network.AdaptiveConnectivityTogglePreferenceController"/>
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index f494795..dde397b 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -200,6 +200,11 @@
android:summary="@string/enable_terminal_summary" />
<SwitchPreferenceCompat
+ android:key="enable_linux_terminal"
+ android:title="@string/enable_linux_terminal_title"
+ android:summary="@string/enable_linux_terminal_summary" />
+
+ <SwitchPreferenceCompat
android:key="bugreport_in_power"
android:title="@string/bugreport_in_power"
android:summary="@string/bugreport_in_power_summary" />
@@ -389,6 +394,11 @@
android:entryValues="@array/bluetooth_leaudio_mode_values"/>
<SwitchPreferenceCompat
+ android:key="bluetooth_leaudio_broadcast_ui"
+ android:title="@string/bluetooth_leaudio_broadcast_ui"
+ android:summary="@string/bluetooth_leaudio_broadcast_ui_summary"/>
+
+ <SwitchPreferenceCompat
android:key="bluetooth_show_leaudio_device_details"
android:title="@string/bluetooth_show_leaudio_device_details"/>
diff --git a/res/xml/language_settings.xml b/res/xml/language_settings.xml
index 4613cb0..7618399 100644
--- a/res/xml/language_settings.xml
+++ b/res/xml/language_settings.xml
@@ -19,7 +19,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/languages_settings"
- android:key="languages_settings">
+ android:key="language_settings">
<PreferenceCategory
android:key="languages_category"
android:title="@string/locale_picker_category_title">
diff --git a/res/xml/mouse_keys_main_page.xml b/res/xml/mouse_keys_main_page.xml
new file mode 100644
index 0000000..d781b51
--- /dev/null
+++ b/res/xml/mouse_keys_main_page.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright 2024 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/mouse_keys"
+ android:key="mouse_key_main_page">
+
+ <com.android.settingslib.widget.MainSwitchPreference
+ android:key="mouse_keys_main_switch"
+ android:title="@string/mouse_keys_main_title"
+ settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityMouseKeysController"/>
+
+ <com.android.settingslib.widget.LayoutPreference
+ android:key="mouse_keys_list"
+ android:layout="@layout/mouse_keys_image_list"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/physical_keyboard_a11y_settings.xml b/res/xml/physical_keyboard_a11y_settings.xml
index 62479f9..9d634c0 100644
--- a/res/xml/physical_keyboard_a11y_settings.xml
+++ b/res/xml/physical_keyboard_a11y_settings.xml
@@ -19,39 +19,40 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/keyboard_a11y_settings"
- android:key="physical_keyboard_a11y">
+ android:key="physical_keyboard_a11y_page">
<PreferenceCategory
- android:key="keyboard_a11y_category"
+ android:key="keyboard_a11y_page_category"
android:title="@string/keyboard_a11y_category">
<SwitchPreferenceCompat
- android:key="accessibility_sticky_keys"
+ android:key="keyboard_a11y_page_sticky_keys"
android:title="@string/sticky_keys"
android:summary="@string/sticky_keys_summary"
android:defaultValue="false"
settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityStickyKeysController"/>
<com.android.settingslib.PrimarySwitchPreference
- android:key="accessibility_bounce_keys"
+ android:key="keyboard_a11y_page_bounce_keys"
android:title="@string/bounce_keys"
android:summary="@string/bounce_keys_summary"
android:defaultValue="false"
settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityBounceKeysController"/>
- <SwitchPreferenceCompat
- android:key="accessibility_slow_keys"
+ <com.android.settingslib.PrimarySwitchPreference
+ android:key="keyboard_a11y_page_slow_keys"
android:title="@string/slow_keys"
android:defaultValue="false"
android:summary="@string/slow_keys_summary"
- settings:controller="com.android.settings.inputmethod.KeyboardAccessibilitySlowKeysController" />
+ settings:controller="com.android.settings.inputmethod.KeyboardAccessibilitySlowKeysController"/>
- <SwitchPreferenceCompat
- android:key="accessibility_mouse_keys"
+ <com.android.settingslib.PrimarySwitchPreference
+ android:key="keyboard_a11y_page_mouse_keys"
android:title="@string/mouse_keys"
android:summary="@string/mouse_keys_summary"
android:defaultValue="false"
- settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityMouseKeysController" />
+ android:fragment="com.android.settings.inputmethod.MouseKeysMainPageFragment"
+ settings:controller="com.android.settings.inputmethod.KeyboardAccessibilityMouseKeysController"/>
</PreferenceCategory>
diff --git a/res/xml/power_background_usage_detail.xml b/res/xml/power_background_usage_detail.xml
index 5c7b6a5..32d80b5 100644
--- a/res/xml/power_background_usage_detail.xml
+++ b/res/xml/power_background_usage_detail.xml
@@ -25,22 +25,25 @@
android:layout="@layout/settings_entity_header"
android:selectable="false"/>
- <com.android.settingslib.widget.MainSwitchPreference
- android:key="allow_background_usage"
- android:title="@string/manager_battery_usage_allow_background_usage_title"
- settings:controller="com.android.settings.fuelgauge.AllowBackgroundPreferenceController"/>
+ <PreferenceCategory
+ android:key="battery_optimization_mode_category"
+ android:layout="@layout/settingslib_preference_category_no_title"
+ settings:controller="com.android.settings.fuelgauge.BatteryOptimizationModePreferenceController">
- <com.android.settingslib.widget.SelectorWithWidgetPreference
- android:key="optimized_preference"
- android:title="@string/manager_battery_usage_optimized_title"
- android:summary="@string/manager_battery_usage_optimized_summary"
- settings:controller="com.android.settings.fuelgauge.OptimizedPreferenceController"/>
+ <com.android.settingslib.widget.MainSwitchPreference
+ android:key="background_usage_allowability_switch"
+ android:title="@string/manager_battery_usage_allow_background_usage_title"/>
- <com.android.settingslib.widget.SelectorWithWidgetPreference
- android:key="unrestricted_preference"
- android:title="@string/manager_battery_usage_unrestricted_title"
- android:summary="@string/manager_battery_usage_unrestricted_summary"
- settings:controller="com.android.settings.fuelgauge.UnrestrictedPreferenceController"/>
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
+ android:key="optimized_preference"
+ android:title="@string/manager_battery_usage_optimized_title"
+ android:summary="@string/manager_battery_usage_optimized_summary"/>
+
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
+ android:key="unrestricted_preference"
+ android:title="@string/manager_battery_usage_unrestricted_title"
+ android:summary="@string/manager_battery_usage_unrestricted_summary"/>
+ </PreferenceCategory>
<com.android.settingslib.widget.FooterPreference
android:key="app_usage_footer_preference"
diff --git a/res/xml/power_usage_detail.xml b/res/xml/power_usage_detail.xml
index f3b30b6..655dbc5 100644
--- a/res/xml/power_usage_detail.xml
+++ b/res/xml/power_usage_detail.xml
@@ -48,12 +48,12 @@
<PreferenceCategory
android:title="@string/manager_battery_usage_category_title"
- android:key="manage_battery_usage_category">
+ android:key="background_usage_allowability_category"
+ settings:controller="com.android.settings.fuelgauge.BackgroundUsageAllowabilityPreferenceController">
<com.android.settingslib.PrimarySwitchPreference
- android:key="allow_background_usage"
- android:title="@string/manager_battery_usage_allow_background_usage_title"
- settings:controller="com.android.settings.fuelgauge.AllowBackgroundPreferenceController"/>
+ android:key="background_usage_allowability_switch"
+ android:title="@string/manager_battery_usage_allow_background_usage_title"/>
</PreferenceCategory>
diff --git a/res/xml/regional_preference_main_page.xml b/res/xml/regional_preference_main_page.xml
index 5c46f8c..704019f 100644
--- a/res/xml/regional_preference_main_page.xml
+++ b/res/xml/regional_preference_main_page.xml
@@ -20,41 +20,46 @@
android:key="regional_preferences">
<com.android.settingslib.widget.TopIntroPreference
+ android:key="regional_pref_intro"
android:title="@string/regional_preferences_main_page_sub_title"
- android:persistent="false" />
+ android:persistent="false"/>
- <Preference
- android:key="key_temperature_unit"
- android:title="@string/temperature_preferences_title"
- android:summary="@string/default_string_of_regional_preference"
- settings:controller="com.android.settings.regionalpreferences.TemperatureUnitController"
- settings:fragment="com.android.settings.regionalpreferences.TemperatureUnitFragment">
- <extra
- android:name="arg_key_regional_preference"
- android:value="mu" />
- </Preference>
+ <PreferenceCategory
+ android:key="regional_preferences_category"
+ android:layout="@layout/settingslib_preference_category_no_title">
+ <Preference
+ android:key="key_temperature_unit"
+ android:title="@string/temperature_preferences_title"
+ android:summary="@string/default_string_of_regional_preference"
+ settings:controller="com.android.settings.regionalpreferences.TemperatureUnitController"
+ settings:fragment="com.android.settings.regionalpreferences.TemperatureUnitFragment">
+ <extra
+ android:name="arg_key_regional_preference"
+ android:value="mu"/>
+ </Preference>
- <Preference
- android:key="key_first_day_of_week"
- android:title="@string/first_day_of_week_preferences_title"
- android:summary="@string/default_string_of_regional_preference"
- settings:controller="com.android.settings.regionalpreferences.FirstDayOfWeekController"
- settings:fragment="com.android.settings.regionalpreferences.FirstDayOfWeekItemFragment">
- <extra
- android:name="arg_key_regional_preference"
- android:value="fw" />
- </Preference>
+ <Preference
+ android:key="key_first_day_of_week"
+ android:title="@string/first_day_of_week_preferences_title"
+ android:summary="@string/default_string_of_regional_preference"
+ settings:controller="com.android.settings.regionalpreferences.FirstDayOfWeekController"
+ settings:fragment="com.android.settings.regionalpreferences.FirstDayOfWeekItemFragment">
+ <extra
+ android:name="arg_key_regional_preference"
+ android:value="fw"/>
+ </Preference>
- <Preference
- android:key="key_numbering_system"
- android:title="@string/numbers_preferences_title"
- android:summary="@string/default_string_of_regional_preference"
- settings:controller="com.android.settings.regionalpreferences.NumberingSystemController"
- settings:fragment="com.android.settings.regionalpreferences.NumberingPreferencesFragment">
- <extra
- android:name="arg_key_regional_preference"
- android:value="arg_value_language_select" />
- </Preference>
+ <Preference
+ android:key="key_numbering_system"
+ android:title="@string/numbers_preferences_title"
+ android:summary="@string/default_string_of_regional_preference"
+ settings:controller="com.android.settings.regionalpreferences.NumberingSystemController"
+ settings:fragment="com.android.settings.regionalpreferences.NumberingPreferencesFragment">
+ <extra
+ android:name="arg_key_regional_preference"
+ android:value="arg_value_language_select"/>
+ </Preference>
+ </PreferenceCategory>
<com.android.settingslib.widget.FooterPreference
android:key="regional_pref_footer"
diff --git a/res/xml/regional_preferences_first_day_of_week.xml b/res/xml/regional_preferences_first_day_of_week.xml
index d9de5e5..2848748 100644
--- a/res/xml/regional_preferences_first_day_of_week.xml
+++ b/res/xml/regional_preferences_first_day_of_week.xml
@@ -21,6 +21,7 @@
android:key="regional_preference_first_day_of_week">
<com.android.settingslib.widget.TopIntroPreference
+ android:key="first_day_of_week_intro"
android:title="@string/regional_preferences_option_page_sub_title"
android:persistent="false" />
diff --git a/res/xml/regional_preferences_temperature.xml b/res/xml/regional_preferences_temperature.xml
index 2519dfa..888a0ec 100644
--- a/res/xml/regional_preferences_temperature.xml
+++ b/res/xml/regional_preferences_temperature.xml
@@ -21,6 +21,7 @@
android:key="regional_preference_temperature">
<com.android.settingslib.widget.TopIntroPreference
+ android:key="temperature_unit_intro"
android:title="@string/regional_preferences_option_page_sub_title"
android:persistent="false" />
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index 15312c8..eed4406 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -170,7 +170,7 @@
<!-- Dial pad tones -->
<SwitchPreferenceCompat
- android:key="dial_pad_tones"
+ android:key="dtmf_tone"
android:title="@string/dial_pad_tones_title"
android:order="-50"/>
diff --git a/res/xml/terms_of_address.xml b/res/xml/terms_of_address.xml
index 90cbe52..3c1ba31 100644
--- a/res/xml/terms_of_address.xml
+++ b/res/xml/terms_of_address.xml
@@ -24,22 +24,22 @@
android:title="@string/terms_of_address_intro_title"
android:persistent="false"/>
- <com.android.settings.widget.TickButtonPreference
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_not_specified"
android:title="@string/terms_of_address_not_specified"
settings:controller="com.android.settings.localepicker.TermsOfAddressNotSpecifiedController"/>
- <com.android.settings.widget.TickButtonPreference
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_feminine"
android:title="@string/terms_of_address_feminine"
settings:controller="com.android.settings.localepicker.TermsOfAddressFeminineController"/>
- <com.android.settings.widget.TickButtonPreference
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_masculine"
android:title="@string/terms_of_address_masculine"
settings:controller="com.android.settings.localepicker.TermsOfAddressMasculineController"/>
- <com.android.settings.widget.TickButtonPreference
+ <com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="key_terms_of_address_neutral"
android:title="@string/terms_of_address_neutral"
settings:controller="com.android.settings.localepicker.TermsOfAddressNeutralController"/>
diff --git a/res/xml/wifi_calling_settings.xml b/res/xml/wifi_calling_settings.xml
index c45f702..2ce408b 100644
--- a/res/xml/wifi_calling_settings.xml
+++ b/res/xml/wifi_calling_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:key="wifi_calling_settings"
+ android:key="wifi_calling"
android:title="@string/wifi_calling_settings_title">
<com.android.settings.widget.SettingsMainSwitchPreference
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index a095006..10763d0 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -97,9 +97,8 @@
}
};
- @Nullable
@Override
- public String getPreferenceScreenBindingKey(@NonNull Context context) {
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
return DisplayScreen.KEY;
}
}
diff --git a/src/com/android/settings/LegalSettings.java b/src/com/android/settings/LegalSettings.java
index e48da26..533dde3 100644
--- a/src/com/android/settings/LegalSettings.java
+++ b/src/com/android/settings/LegalSettings.java
@@ -50,9 +50,8 @@
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.about_legal);
- @Nullable
@Override
- public String getPreferenceScreenBindingKey(@NonNull Context context) {
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
return LegalSettingsScreen.KEY;
}
}
diff --git a/src/com/android/settings/RegulatoryInfoDisplayActivity.kt b/src/com/android/settings/RegulatoryInfoDisplayActivity.kt
index 6b5ccc7..4038aa8 100644
--- a/src/com/android/settings/RegulatoryInfoDisplayActivity.kt
+++ b/src/com/android/settings/RegulatoryInfoDisplayActivity.kt
@@ -69,6 +69,6 @@
private fun getRegulatoryText(): CharSequence? {
val regulatoryInfoText = resources.getText(R.string.regulatory_info_text)
if (regulatoryInfoText.isNotBlank()) return regulatoryInfoText
- return featureFactory.hardwareInfoFeatureProvider?.countryIfOriginLabel
+ return featureFactory.hardwareInfoFeatureProvider?.countryOfOriginLabel
}
}
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index f86e29f..2178b60 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -47,7 +47,6 @@
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
-import com.android.internal.telephony.flags.Flags;
import com.android.settings.core.InstrumentedFragment;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.ResetNetworkRestrictionViewBuilder;
@@ -142,13 +141,10 @@
Context context = getContext();
boolean resetSims = false;
- // TODO(b/317276437) Simplify the logic once flag is released
int resetOptions = ResetNetworkRequest.RESET_CONNECTIVITY_MANAGER
- | ResetNetworkRequest.RESET_VPN_MANAGER;
- if (Flags.resetMobileNetworkSettings()) {
- resetOptions |= ResetNetworkRequest.RESET_IMS_STACK;
- resetOptions |= ResetNetworkRequest.RESET_PHONE_PROCESS;
- }
+ | ResetNetworkRequest.RESET_VPN_MANAGER
+ | ResetNetworkRequest.RESET_IMS_STACK
+ | ResetNetworkRequest.RESET_PHONE_PROCESS;
ResetNetworkRequest request = new ResetNetworkRequest(resetOptions);
if (mSubscriptions != null && mSubscriptions.size() > 0) {
int selectedIndex = mSubscriptionSpinner.getSelectedItemPosition();
@@ -156,9 +152,7 @@
int subId = subscription.getSubscriptionId();
request.setResetTelephonyAndNetworkPolicyManager(subId)
.setResetApn(subId);
- if (Flags.resetMobileNetworkSettings()) {
- request.setResetImsSubId(subId);
- }
+ request.setResetImsSubId(subId);
}
if (mEsimContainer.getVisibility() == View.VISIBLE && mEsimCheckbox.isChecked()) {
resetSims = true;
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 481ad65..adda094 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -1516,13 +1516,13 @@
final UserManager userManager = context.getSystemService(
UserManager.class);
final int status = biometricManager.canAuthenticate(getEffectiveUserId(
- userManager, userId), BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
+ userManager, userId), BiometricManager.Authenticators.IDENTITY_CHECK);
switch(status) {
case BiometricManager.BIOMETRIC_SUCCESS:
return BiometricStatus.OK;
case BiometricManager.BIOMETRIC_ERROR_LOCKOUT:
return BiometricStatus.LOCKOUT;
- case BiometricManager.BIOMETRIC_ERROR_MANDATORY_NOT_ACTIVE:
+ case BiometricManager.BIOMETRIC_ERROR_IDENTITY_CHECK_NOT_ACTIVE:
case BiometricManager.BIOMETRIC_ERROR_NOT_ENABLED_FOR_APPS:
return BiometricStatus.NOT_ACTIVE;
default:
@@ -1582,7 +1582,7 @@
final Intent intent = new Intent();
if (android.hardware.biometrics.Flags.mandatoryBiometrics()) {
intent.putExtra(BIOMETRIC_PROMPT_AUTHENTICATORS,
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
+ BiometricManager.Authenticators.IDENTITY_CHECK);
}
intent.putExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT,
resources.getString(R.string.cancel));
diff --git a/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java b/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java
index 0f551b0..09e2d97 100644
--- a/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityHearingAidsFragment.java
@@ -26,6 +26,7 @@
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceCategory;
import com.android.internal.accessibility.AccessibilityShortcutController;
@@ -118,6 +119,21 @@
return getText(R.string.accessibility_hearing_device_shortcut_title);
}
+ @VisibleForTesting
+ static boolean isPageSearchEnabled(Context context) {
+ final HearingAidHelper mHelper = new HearingAidHelper(context);
+ return mHelper.isHearingAidSupported();
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids);
+ new BaseSearchIndexProvider(R.xml.accessibility_hearing_aids) {
+ @Override
+ protected boolean isPageSearchEnabled(Context context) {
+ if (Flags.fixA11ySettingsSearch()) {
+ return AccessibilityHearingAidsFragment.isPageSearchEnabled(context);
+ } else {
+ return super.isPageSearchEnabled(context);
+ }
+ }
+ };
}
diff --git a/src/com/android/settings/accessibility/ColorAndMotionFragment.java b/src/com/android/settings/accessibility/ColorAndMotionFragment.java
index 4ea2226..7a7c21d 100644
--- a/src/com/android/settings/accessibility/ColorAndMotionFragment.java
+++ b/src/com/android/settings/accessibility/ColorAndMotionFragment.java
@@ -17,12 +17,15 @@
package com.android.settings.accessibility;
import android.app.settings.SettingsEnums;
+import android.content.Context;
import android.hardware.display.ColorDisplayManager;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.view.accessibility.Flags;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
import androidx.preference.TwoStatePreference;
@@ -148,6 +151,12 @@
}
}
+ @Nullable
+ @Override
+ public String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return ColorAndMotionScreen.KEY;
+ }
+
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.accessibility_color_and_motion);
}
diff --git a/src/com/android/settings/accessibility/ColorAndMotionScreen.kt b/src/com/android/settings/accessibility/ColorAndMotionScreen.kt
new file mode 100644
index 0000000..909b08b
--- /dev/null
+++ b/src/com/android/settings/accessibility/ColorAndMotionScreen.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class ColorAndMotionScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.accessibility_color_and_motion_title
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystAccessibilityColorAndMotion()
+
+ override fun hasCompleteHierarchy(): Boolean = false
+
+ override fun fragmentClass() = ColorAndMotionFragment::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "accessibility_color_and_motion"
+ }
+}
diff --git a/src/com/android/settings/accessibility/DisplaySizeData.java b/src/com/android/settings/accessibility/DisplaySizeData.java
index 77ae897..15aeb6b 100644
--- a/src/com/android/settings/accessibility/DisplaySizeData.java
+++ b/src/com/android/settings/accessibility/DisplaySizeData.java
@@ -35,7 +35,7 @@
super(context);
mDensity = new DisplayDensityUtils(getContext());
- final int initialIndex = mDensity.getCurrentIndexForDefaultDisplay();
+ final int initialIndex = mDensity.getCurrentIndex();
if (initialIndex < 0) {
// Failed to obtain default density, which means we failed to
// connect to the window manager service. Just use the current
@@ -46,9 +46,9 @@
setInitialIndex(0);
setValues(Collections.singletonList(densityDpi));
} else {
- setDefaultValue(mDensity.getDefaultDensityForDefaultDisplay());
+ setDefaultValue(mDensity.getDefaultDensity());
setInitialIndex(initialIndex);
- setValues(Arrays.stream(mDensity.getDefaultDisplayDensityValues()).boxed()
+ setValues(Arrays.stream(mDensity.getValues()).boxed()
.collect(Collectors.toList()));
}
}
diff --git a/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java
index 9c8560b..8b37c8f 100644
--- a/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java
@@ -18,8 +18,6 @@
import android.accessibilityservice.AccessibilityServiceInfo;
-import com.android.settingslib.accessibility.AccessibilityUtils;
-
/**
* Fragment that does not have toggle bar to turn on service to use.
*
@@ -37,29 +35,4 @@
super.onInstallSwitchPreferenceToggleSwitch();
mToggleServiceSwitchPreference.setVisible(false);
}
-
- /**
- * {@inheritDoc}
- *
- * Enables accessibility service only when user had allowed permission. Disables
- * accessibility service when shortcutPreference is unchecked.
- */
- @Override
- public void onToggleClicked(ShortcutPreference preference) {
- super.onToggleClicked(preference);
- boolean enabled = getArguments().getBoolean(AccessibilitySettings.EXTRA_CHECKED)
- && preference.isChecked();
- AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName, enabled);
- }
-
- /**
- * {@inheritDoc}
- *
- * Enables accessibility service when user clicks permission allow button.
- */
- @Override
- void onAllowButtonFromShortcutToggleClicked() {
- super.onAllowButtonFromShortcutToggleClicked();
- AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName, true);
- }
}
diff --git a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
index a90af21..9fc9e10 100644
--- a/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/TextReadingPreferenceFragment.java
@@ -30,6 +30,8 @@
import android.widget.Toast;
import androidx.annotation.IntDef;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import com.android.settings.R;
@@ -313,4 +315,9 @@
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.accessibility_text_reading_options);
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return TextReadingScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/accessibility/TextReadingScreen.kt b/src/com/android/settings/accessibility/TextReadingScreen.kt
new file mode 100644
index 0000000..8970d52
--- /dev/null
+++ b/src/com/android/settings/accessibility/TextReadingScreen.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.accessibility
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class TextReadingScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.accessibility_text_reading_options_title
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystTextReadingScreen()
+
+ override fun fragmentClass() = TextReadingPreferenceFragment::class.java
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "text_reading_screen"
+ }
+}
diff --git a/src/com/android/settings/accessibility/VibrationIntensityScreen.kt b/src/com/android/settings/accessibility/VibrationIntensityScreen.kt
new file mode 100644
index 0000000..5d7d4fb
--- /dev/null
+++ b/src/com/android/settings/accessibility/VibrationIntensityScreen.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.accessibility
+
+import android.content.Context
+import androidx.fragment.app.Fragment
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class VibrationIntensityScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.accessibility_vibration_settings_title
+
+ override fun isFlagEnabled(context: Context): Boolean = Flags.catalystVibrationIntensityScreen()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass(): Class<out Fragment>? =
+ VibrationIntensitySettingsFragment::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "vibration_intensity_screen"
+ }
+}
diff --git a/src/com/android/settings/accessibility/VibrationIntensitySettingsFragment.java b/src/com/android/settings/accessibility/VibrationIntensitySettingsFragment.java
index 1d24ec9..328bed9 100644
--- a/src/com/android/settings/accessibility/VibrationIntensitySettingsFragment.java
+++ b/src/com/android/settings/accessibility/VibrationIntensitySettingsFragment.java
@@ -25,6 +25,8 @@
import android.view.View;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.recyclerview.widget.RecyclerView;
@@ -90,4 +92,9 @@
return VibrationIntensitySettingsFragment.isPageSearchEnabled(context);
}
};
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return VibrationIntensityScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java b/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java
index d04b34a..f05b157 100644
--- a/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragment.java
@@ -61,6 +61,7 @@
import com.android.settings.R;
import com.android.settings.SetupWizardUtils;
import com.android.settings.accessibility.AccessibilitySetupWizardUtils;
+import com.android.settings.accessibility.Flags;
import com.android.settings.accessibility.PreferredShortcuts;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
@@ -201,9 +202,14 @@
super.onCreatePreferences(savedInstanceState, rootKey);
Activity activity = getActivity();
+ final Preference descriptionPref = findPreference(getString(
+ R.string.accessibility_shortcut_description_pref));
if (!activity.getIntent().getAction().equals(
Settings.ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS)) {
+ if (Flags.toggleFeatureFragmentCollectionInfo()) {
+ descriptionPref.setVisible(false);
+ }
return;
}
@@ -219,10 +225,11 @@
);
activity.setTitle(titles.first);
-
- String screenDescriptionPrefKey = getString(
- R.string.accessibility_shortcut_description_pref);
- findPreference(screenDescriptionPrefKey).setSummary(titles.second);
+ if (titles.second != null || !Flags.toggleFeatureFragmentCollectionInfo()) {
+ descriptionPref.setSummary(titles.second);
+ } else {
+ descriptionPref.setVisible(false);
+ }
}
@NonNull
diff --git a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
index 0550a9a..db239aa 100644
--- a/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
+++ b/src/com/android/settings/applications/appcompat/UserAspectRatioManager.java
@@ -36,6 +36,7 @@
import android.app.AppGlobals;
import android.app.compat.CompatChanges;
import android.content.Context;
+import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.LauncherApps;
@@ -44,6 +45,7 @@
import android.os.UserHandle;
import android.provider.DeviceConfig;
import android.util.ArrayMap;
+import android.util.Log;
import android.util.SparseIntArray;
import androidx.annotation.NonNull;
@@ -71,6 +73,7 @@
private static final boolean DEFAULT_VALUE_ENABLE_USER_ASPECT_RATIO_FULLSCREEN = true;
final boolean mIsUserMinAspectRatioAppDefaultFlagEnabled = Flags.userMinAspectRatioAppDefault();
+ private final boolean mIgnoreActivityOrientationRequest;
private final Context mContext;
private final IPackageManager mIPm;
@@ -90,6 +93,8 @@
mUserAspectRatioA11yMap = new ArrayMap<>();
mUserAspectRatioOrder = new SparseIntArray();
mUserAspectRatioMap = getUserMinAspectRatioMapping();
+ mIgnoreActivityOrientationRequest = getValueFromDeviceConfig(
+ "ignore_activity_orientation_request", false);
}
/**
@@ -113,6 +118,24 @@
? aspectRatio : USER_MIN_ASPECT_RATIO_UNSET;
}
+ // TODO b/374903057 reuse method from ActivityRecord
+ boolean isUniversalResizeable(@NonNull String packageName, int userId) {
+ try {
+ final ApplicationInfo info = mIPm.getApplicationInfo(
+ packageName, 0 /* flags */, userId);
+ if (info == null || info.category == ApplicationInfo.CATEGORY_GAME) {
+ return false;
+ }
+ final boolean compatEnabled = Flags.universalResizableByDefault()
+ && info.isChangeEnabled(ActivityInfo.UNIVERSAL_RESIZABLE_BY_DEFAULT);
+ return compatEnabled || mIgnoreActivityOrientationRequest;
+ } catch (RemoteException e) {
+ Log.e("UserAspectRatioManager", "Could not access application info for "
+ + packageName + ":\n" + e);
+ return false;
+ }
+ }
+
/**
* @return corresponding string for {@link PackageManager.UserMinAspectRatio} value
*/
@@ -127,7 +150,7 @@
return appDefault;
}
- return isCurrentSelectionFromManufacturerOverride(packageName, userId, aspectRatio)
+ return isUnsetAndRequiresFullscreenOverride(packageName, userId, aspectRatio)
? getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN, packageName, userId)
: mUserAspectRatioMap.getOrDefault(aspectRatio, appDefault);
}
@@ -139,7 +162,7 @@
public CharSequence getAccessibleEntry(@PackageManager.UserMinAspectRatio int aspectRatio,
@NonNull String packageName) {
final int userId = mContext.getUserId();
- return isCurrentSelectionFromManufacturerOverride(packageName, userId, aspectRatio)
+ return isUnsetAndRequiresFullscreenOverride(packageName, userId, aspectRatio)
? getAccessibleEntry(USER_MIN_ASPECT_RATIO_FULLSCREEN, packageName)
: mUserAspectRatioA11yMap.getOrDefault(aspectRatio,
getUserMinAspectRatioEntry(aspectRatio, packageName, userId));
@@ -203,7 +226,7 @@
@PackageManager.UserMinAspectRatio int userOverride) {
return (userOverride != USER_MIN_ASPECT_RATIO_UNSET
&& userOverride != USER_MIN_ASPECT_RATIO_APP_DEFAULT)
- || isCurrentSelectionFromManufacturerOverride(app.packageName, getUserId(app.uid),
+ || isUnsetAndRequiresFullscreenOverride(app.packageName, getUserId(app.uid),
userOverride);
}
@@ -224,7 +247,7 @@
/**
* Whether the device manufacturer has overridden app's orientation to
* {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_USER} to force app to fullscreen
- * and app has not opted-out from the treatment
+ * or app is universal resizeable, and app has not opted-out from the treatment
*/
boolean isOverrideToFullscreenEnabled(String pkgName, int userId) {
Boolean appAllowsOrientationOverride = readComponentProperty(mContext.getPackageManager(),
@@ -232,7 +255,8 @@
return mIsUserMinAspectRatioAppDefaultFlagEnabled
&& hasAspectRatioOption(USER_MIN_ASPECT_RATIO_FULLSCREEN, pkgName)
&& !FALSE.equals(appAllowsOrientationOverride)
- && isFullscreenCompatChangeEnabled(pkgName, userId);
+ && (isFullscreenCompatChangeEnabled(pkgName, userId)
+ || isUniversalResizeable(pkgName, userId));
}
boolean isFullscreenCompatChangeEnabled(String pkgName, int userId) {
@@ -240,7 +264,11 @@
OVERRIDE_ANY_ORIENTATION_TO_USER, pkgName, UserHandle.of(userId));
}
- private boolean isCurrentSelectionFromManufacturerOverride(String pkgName, int userId,
+ /**
+ * Whether the aspect ratio is unset and we desire to interpret it as fullscreen rather than
+ * app default because of manufacturer override or because the app is universal resizeable
+ */
+ private boolean isUnsetAndRequiresFullscreenOverride(String pkgName, int userId,
@PackageManager.UserMinAspectRatio int aspectRatio) {
return aspectRatio == USER_MIN_ASPECT_RATIO_UNSET
&& isOverrideToFullscreenEnabled(pkgName, userId);
diff --git a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
index bc6931d..e4343e5 100644
--- a/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
+++ b/src/com/android/settings/applications/contacts/ContactsStoragePreferenceController.java
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) 2024 The Android Open Source Project
*
@@ -16,16 +15,17 @@
*/
package com.android.settings.applications.contacts;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount;
+
import android.accounts.Account;
import android.content.Context;
import android.os.UserHandle;
-import android.provider.ContactsContract;
-
-import androidx.preference.PreferenceScreen;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.provider.Flags;
+import android.util.Log;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
-import com.android.settings.flags.Flags;
import com.android.settingslib.accounts.AuthenticatorHelper;
/**
@@ -36,33 +36,58 @@
private final AuthenticatorHelper mAuthenticatorHelper;
+ private DefaultAccountAndState mCurrentDefaultAccountAndState;
+
public ContactsStoragePreferenceController(Context context, String preferenceKey) {
super(context, preferenceKey);
mAuthenticatorHelper = new AuthenticatorHelper(mContext,
new UserHandle(UserHandle.myUserId()), null);
+ try {
+ mCurrentDefaultAccountAndState =
+ DefaultAccount.getDefaultAccountForNewContacts(mContext.getContentResolver());
+ } catch (IllegalStateException e) {
+ Log.e(TAG, "The default account is in an invalid state: " + e);
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Failed to look up the default account: " + e);
+ }
}
@Override
public int getAvailabilityStatus() {
- return Flags.enableContactsDefaultAccountInSettings()
- ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
+ return (Flags.newDefaultAccountApiEnabled()
+ && mCurrentDefaultAccountAndState != null) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
}
@Override
public CharSequence getSummary() {
- Account currentDefaultAccount =
- ContactsContract.Settings.getDefaultAccount(mContext.getContentResolver());
- if (currentDefaultAccount == null) {
- return mContext.getResources().getString(
- R.string.contacts_storage_no_account_set);
+ if (mCurrentDefaultAccountAndState != null) {
+ int currentDefaultAccountState = mCurrentDefaultAccountAndState.getState();
+ Account currentDefaultAccount = mCurrentDefaultAccountAndState.getAccount();
+ if (currentDefaultAccountState
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET) {
+ return mContext.getResources().getString(
+ R.string.contacts_storage_no_account_set_summary);
+ } else if (currentDefaultAccountState
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
+ return mContext.getResources().getString(
+ R.string.contacts_storage_local_account_summary);
+ } else if (currentDefaultAccountState
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM) {
+ return mContext.getResources().getString(
+ R.string.sim_card_label);
+ } else if (currentDefaultAccountState
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
+ String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
+ currentDefaultAccount.type);
+ // If there's no account type, or the account type is the same as the
+ // current default account name, just return the account name.
+ if (accountTypeLabel == null || accountTypeLabel.equals(
+ currentDefaultAccount.name)) {
+ return currentDefaultAccount.name;
+ }
+ return accountTypeLabel + " | " + currentDefaultAccount.name;
+ }
}
- String accountTypeLabel = (String) mAuthenticatorHelper.getLabelForType(mContext,
- currentDefaultAccount.type);
- // If there's no account type, or the account type is the same as the
- // current default account name, just return the account name.
- if (accountTypeLabel == null || accountTypeLabel.equals(currentDefaultAccount.name)) {
- return currentDefaultAccount.name;
- }
- return accountTypeLabel + " | " + currentDefaultAccount.name;
+ return "";
}
}
diff --git a/src/com/android/settings/applications/contacts/ContactsStorageSettings.java b/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
index 90d593a..8e71d08 100644
--- a/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
+++ b/src/com/android/settings/applications/contacts/ContactsStorageSettings.java
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) 2020 The Android Open Source Project
*
@@ -17,25 +16,29 @@
package com.android.settings.applications.contacts;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount;
import static android.provider.Settings.ACTION_ADD_ACCOUNT;
import static android.provider.Settings.EXTRA_ACCOUNT_TYPES;
import android.accounts.Account;
-import android.accounts.AccountManager;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.UserHandle;
-import android.provider.ContactsContract.Settings;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.util.Log;
+import android.widget.Toast;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
import androidx.preference.Preference;
import androidx.preference.Preference.OnPreferenceClickListener;
import androidx.preference.PreferenceScreen;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.accounts.AddAccountSettings;
import com.android.settings.dashboard.DashboardFragment;
@@ -46,6 +49,7 @@
import com.android.settingslib.widget.SelectorWithWidgetPreference;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -59,7 +63,7 @@
private static final String TAG = "ContactsStorageSettings";
private static final String PREF_KEY_ADD_ACCOUNT = "add_account";
private static final String PREF_KEY_DEVICE_ONLY = "device_only_account_preference";
- private final Map<String, Account> mAccountMap = new HashMap<>();
+ private final Map<String, DefaultAccountAndState> mAccountMap = new HashMap<>();
private AuthenticatorHelper mAuthenticatorHelper;
@Override
@@ -73,13 +77,24 @@
@Override
public void onRadioButtonClicked(@NonNull SelectorWithWidgetPreference selectedPref) {
final String selectedPreferenceKey = selectedPref.getKey();
- // Check if current provider is different from the selected provider.
+ // Check if current account is different from the selected account.
for (String preferenceKey : mAccountMap.keySet()) {
if (selectedPreferenceKey.equals(preferenceKey)) {
- selectedPref.setChecked(true);
- //TODO: Call DefaultAccount.setDefaultAccountForNewContacts once
- // the implementation is ready.
- Settings.setDefaultAccount(getContentResolver(), mAccountMap.get(preferenceKey));
+ try {
+ DefaultAccountAndState currentDefaultAccount = mAccountMap.get(preferenceKey);
+ DefaultAccount.setDefaultAccountForNewContacts(getContentResolver(),
+ currentDefaultAccount);
+ selectedPref.setChecked(true);
+ if (currentDefaultAccount.getState()
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD) {
+ startMoveLocalAndSimContactsActivity();
+ }
+ } catch (RuntimeException e) {
+ Log.e(TAG, "Error setting the default account " + e);
+ Toast.makeText(getContext(),
+ R.string.contacts_storage_set_default_account_error_message,
+ Toast.LENGTH_SHORT).show();
+ }
} else {
SelectorWithWidgetPreference unSelectedPreference =
getPreferenceScreen().findPreference(preferenceKey);
@@ -92,10 +107,7 @@
public boolean onPreferenceClick(@NonNull Preference preference) {
if (PREF_KEY_ADD_ACCOUNT.equals(preference.getKey())) {
- Resources resources = Resources.getSystem();
- String[] accountTypesArray =
- resources.getStringArray(
- com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes);
+ String[] accountTypesArray = getEligibleAccountTypes();
Intent intent = new Intent(ACTION_ADD_ACCOUNT);
intent.setClass(getContext(), AddAccountSettings.class);
intent.putExtra(EXTRA_ACCOUNT_TYPES, accountTypesArray);
@@ -108,7 +120,7 @@
@Override
public void onCreatePreferences(@NonNull Bundle savedInstanceState,
- @NonNull String rootKey) {
+ @NonNull String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey);
refreshUI();
}
@@ -119,51 +131,88 @@
// when creating eligible account preferences.
mAccountMap.clear();
final PreferenceScreen screen = getPreferenceScreen();
- AccountManager accountManager = AccountManager.get(getPrefContext());
- //TODO: Call DefaultAccount.getDefaultAccountForNewContacts once
- // implementation is ready.
- Account[] accounts = accountManager.getAccounts();
-
- for (int i = 0; i < accounts.length; i++) {
- screen.addPreference(buildAccountPreference(accounts[i], i));
+ // If the default account is SIM, we should show in the page, otherwise don't show.
+ SelectorWithWidgetPreference simAccountPreference = buildSimAccountPreference();
+ if (simAccountPreference != null) {
+ getPreferenceScreen().addPreference(simAccountPreference);
}
- screen.addPreference(buildAddAccountPreference(accounts.length == 0));
+ List<Account> accounts = DefaultAccount.getEligibleCloudAccounts(getContentResolver());
+ for (int i = 0; i < accounts.size(); i++) {
+ screen.addPreference(buildCloudAccountPreference(accounts.get(i), /*order=*/i));
+ }
+ // If there's no eligible account types, the "Add Account" preference should
+ // not be shown to the users.
+ if (getEligibleAccountTypes().length > 0) {
+ screen.addPreference(buildAddAccountPreference(accounts.isEmpty()));
+ }
setupDeviceOnlyPreference();
-
- //TODO: Call DefaultAccount.ListEligibleCloudAccounts once the
- // implementation is ready. And differentiate device only account vs account not set case.
- Account currentDefaultAccount = Settings.getDefaultAccount(getContentResolver());
- String preferenceKey = currentDefaultAccount != null ?
- String.valueOf(currentDefaultAccount.hashCode()) : PREF_KEY_DEVICE_ONLY;
- SelectorWithWidgetPreference preference = getPreferenceScreen().findPreference(
- preferenceKey);
- if (preference != null) {
- preference.setChecked(true);
- }
+ setDefaultAccountPreference();
}
private void setupDeviceOnlyPreference() {
SelectorWithWidgetPreference preference = findPreference(PREF_KEY_DEVICE_ONLY);
if (preference != null) {
preference.setOnClickListener(this);
- mAccountMap.put(PREF_KEY_DEVICE_ONLY, null);
+ mAccountMap.put(PREF_KEY_DEVICE_ONLY, DefaultAccountAndState.ofLocal());
+ }
+ }
+
+ private void setDefaultAccountPreference() {
+ DefaultAccountAndState currentDefaultAccountAndState =
+ DefaultAccount.getDefaultAccountForNewContacts(getContentResolver());
+ String preferenceKey = getAccountHashCode(currentDefaultAccountAndState);
+ Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
+
+ // Set the current default account preference to be checked if found among existing
+ // preferences. If not, then create a new preference for default account.
+ SelectorWithWidgetPreference preference = null;
+ if (mAccountMap.containsKey(preferenceKey)) {
+ preference = getPreferenceScreen().findPreference(preferenceKey);
+ } else if (preferenceKey != null && currentDefaultAccount != null) {
+ preference = buildCloudAccountPreference(currentDefaultAccount, mAccountMap.size());
+ getPreferenceScreen().addPreference(preference);
+ }
+ if (preference != null) {
+ preference.setChecked(true);
}
}
//TODO: Add preference category on account preferences.
- private Preference buildAccountPreference(Account account, int order) {
+ private SelectorWithWidgetPreference buildCloudAccountPreference(Account account, int order) {
SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
getPrefContext());
+ DefaultAccountAndState accountAndState = DefaultAccountAndState.ofCloud(account);
+ String preferenceKey = getAccountHashCode(accountAndState);
preference.setTitle(mAuthenticatorHelper.getLabelForType(getPrefContext(), account.type));
preference.setIcon(mAuthenticatorHelper.getDrawableForType(getPrefContext(), account.type));
preference.setSummary(account.name);
- preference.setKey(String.valueOf(account.hashCode()));
+ preference.setKey(preferenceKey);
preference.setOnClickListener(this);
preference.setOrder(order);
- mAccountMap.put(String.valueOf(account.hashCode()), account);
+ mAccountMap.put(preferenceKey, accountAndState);
return preference;
}
+ @Nullable
+ private SelectorWithWidgetPreference buildSimAccountPreference() {
+ DefaultAccountAndState currentDefaultAccountAndState =
+ DefaultAccount.getDefaultAccountForNewContacts(getContentResolver());
+ if (currentDefaultAccountAndState.getState()
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM) {
+ String preferenceKey = getAccountHashCode(currentDefaultAccountAndState);
+ SelectorWithWidgetPreference preference = new SelectorWithWidgetPreference(
+ getPrefContext());
+ preference.setTitle(R.string.sim_card_label);
+ preference.setIcon(R.drawable.ic_sim_card);
+ preference.setSummary(R.string.sim_card_label);
+ preference.setKey(preferenceKey);
+ preference.setOnClickListener(this);
+ mAccountMap.put(preferenceKey, currentDefaultAccountAndState);
+ return preference;
+ }
+ return null;
+ }
+
private RestrictedPreference buildAddAccountPreference(boolean noAccountBeenAdded) {
RestrictedPreference preference = new RestrictedPreference(getPrefContext());
preference.setKey(PREF_KEY_ADD_ACCOUNT);
@@ -178,6 +227,39 @@
return preference;
}
+ private void startMoveLocalAndSimContactsActivity() {
+ Intent intent = new Intent()
+ .setAction(DefaultAccount.ACTION_MOVE_CONTACTS_TO_DEFAULT_ACCOUNT)
+ .setPackage("com.android.providers.contacts")
+ .addFlags(FLAG_ACTIVITY_NEW_TASK);
+ getContext().startActivity(intent);
+ }
+
+ @Nullable
+ private String getAccountHashCode(
+ DefaultAccountAndState currentDefaultAccountAndState) {
+ Account currentDefaultAccount = currentDefaultAccountAndState.getAccount();
+ if (currentDefaultAccount != null && (currentDefaultAccountAndState.getState()
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD
+ || currentDefaultAccountAndState.getState()
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM)) {
+ return String.valueOf(currentDefaultAccount.hashCode());
+ } else if (currentDefaultAccountAndState.getState()
+ == DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL) {
+ return PREF_KEY_DEVICE_ONLY;
+ } else {
+ // If the account is not set or in error state, it should just return null and won't
+ // set the checked status in radio button.
+ return null;
+ }
+ }
+
+ @VisibleForTesting
+ String[] getEligibleAccountTypes() {
+ return Resources.getSystem().getStringArray(
+ com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes);
+ }
+
@Override
protected int getPreferenceScreenResId() {
return R.xml.contacts_storage_settings;
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
index b32ab4f..03010bb 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrolling.java
@@ -207,10 +207,9 @@
@VisibleForTesting
protected boolean shouldShowLottie() {
DisplayDensityUtils displayDensity = new DisplayDensityUtils(getApplicationContext());
- int currentDensityIndex = displayDensity.getCurrentIndexForDefaultDisplay();
- final int currentDensity = displayDensity.getDefaultDisplayDensityValues()
- [currentDensityIndex];
- final int defaultDensity = displayDensity.getDefaultDensityForDefaultDisplay();
+ int currentDensityIndex = displayDensity.getCurrentIndex();
+ final int currentDensity = displayDensity.getValues()[currentDensityIndex];
+ final int defaultDensity = displayDensity.getDefaultDensity();
if (getResources().getConfiguration().fontScale > 1) {
return false;
diff --git a/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt b/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt
index 761a9c3..030aadb 100644
--- a/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/BiometricsEnvironment.kt
@@ -45,6 +45,8 @@
import com.android.settings.biometrics.fingerprint2.domain.interactor.EnrollStageInteractor
import com.android.settings.biometrics.fingerprint2.domain.interactor.EnrollStageInteractorImpl
import com.android.settings.biometrics.fingerprint2.domain.interactor.EnrolledFingerprintsInteractorImpl
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintEnrollStageCountInteractor
+import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintEnrollStageThresholdInteractor
import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintSensorInteractor
import com.android.settings.biometrics.fingerprint2.domain.interactor.FingerprintSensorInteractorImpl
import com.android.settings.biometrics.fingerprint2.domain.interactor.FoldStateInteractor
@@ -113,6 +115,12 @@
fun createCanEnrollFingerprintsInteractor(): CanEnrollFingerprintsInteractor =
CanEnrollFingerprintsInteractorImpl(fingerprintEnrollmentRepository)
+ fun createFingerprintEnrollStageCountInteractor(): FingerprintEnrollStageCountInteractor =
+ FingerprintEnrollStageCountInteractor(fingerprintEnrollmentRepository)
+
+ fun createFingerprintEnrollStageThresholdInteractor(): FingerprintEnrollStageThresholdInteractor =
+ FingerprintEnrollStageThresholdInteractor(fingerprintEnrollmentRepository)
+
fun createGenerateChallengeInteractor(): GenerateChallengeInteractor =
GenerateChallengeInteractorImpl(fingerprintManager, context.userId, gateKeeperPasswordProvider)
@@ -133,11 +141,8 @@
fun createRenameFingerprintInteractor(): RenameFingerprintInteractor =
RenameFingerprintsInteractorImpl(fingerprintManager, context.userId, backgroundDispatcher)
- val accessibilityInteractor: AccessibilityInteractor by lazy {
- AccessibilityInteractorImpl(
- context.getSystemService(AccessibilityManager::class.java)!!,
- applicationScope,
- )
+ fun createAccessibilityInteractor(): AccessibilityInteractor {
+ return AccessibilityInteractorImpl(context.getSystemService(AccessibilityManager::class.java)!!)
}
val foldStateInteractor: FoldStateInteractor by lazy { FoldStateInteractorImpl(context) }
@@ -157,7 +162,7 @@
val enrollStageInteractor: EnrollStageInteractor by lazy { EnrollStageInteractorImpl() }
val udfpsEnrollInteractor: UdfpsEnrollInteractor by lazy {
- UdfpsEnrollInteractorImpl(context, accessibilityInteractor)
+ UdfpsEnrollInteractorImpl(context, createAccessibilityInteractor())
}
val sensorInteractor: FingerprintSensorInteractor by lazy {
diff --git a/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt b/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt
index 0ef1d25..27465c2 100644
--- a/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/conversion/Util.kt
@@ -67,6 +67,7 @@
return FingerEnrollState.EnrollError(
errTitle,
errString,
+ this,
this == FINGERPRINT_ERROR_UNABLE_TO_PROCESS,
this == FINGERPRINT_ERROR_CANCELED,
)
diff --git a/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintEnrollmentRepo.kt b/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintEnrollmentRepo.kt
index 0bb4eea..d01a49c 100644
--- a/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintEnrollmentRepo.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintEnrollmentRepo.kt
@@ -46,6 +46,16 @@
/** Indicates if a user can enroll another fingerprint */
val canEnrollUser: Flow<Boolean>
+ val enrollStageCount: Int
+
+ /**
+ * Returns the threshold for the given stage of fingerprint enrollment.
+ *
+ * @param index The index of the enrollment stage.
+ * @return The threshold for the enrollment stage.
+ */
+ fun getEnrollStageThreshold(index: Int): Float
+
/**
* Indicates if we should use the default settings for maximum enrollments or the sensor props
* from the fingerprint sensor
@@ -115,4 +125,10 @@
?.map { (FingerprintData(it.name.toString(), it.biometricId, it.deviceId)) }
?.toList()
}
+
+ override val enrollStageCount: Int
+ get() = fingerprintManager.enrollStageCount
+
+ override fun getEnrollStageThreshold(index: Int): Float =
+ fingerprintManager.getEnrollStageThreshold(index)
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintSensorRepository.kt b/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintSensorRepository.kt
index 1cca532..8476f3b 100644
--- a/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintSensorRepository.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/data/repository/FingerprintSensorRepository.kt
@@ -16,6 +16,7 @@
package com.android.settings.biometrics.fingerprint2.data.repository
+import android.annotation.SuppressLint
import android.hardware.biometrics.ComponentInfoInternal
import android.hardware.biometrics.SensorLocationInternal
import android.hardware.biometrics.SensorProperties
@@ -23,18 +24,24 @@
import android.hardware.fingerprint.FingerprintSensorProperties
import android.hardware.fingerprint.FingerprintSensorPropertiesInternal
import android.hardware.fingerprint.IFingerprintAuthenticatorsRegisteredCallback
+import android.util.Log
import com.android.systemui.biometrics.shared.model.FingerprintSensor
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableSharedFlow
+import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.SharingStarted
+import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.shareIn
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.transform
+import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
/**
@@ -56,17 +63,24 @@
activityScope: CoroutineScope,
) : FingerprintSensorRepository {
- private val fingerprintPropsInternal: Flow<FingerprintSensorPropertiesInternal> =
- callbackFlow {
+ private val _fingerprintSensor = MutableSharedFlow<FingerprintSensor>(replay = 1)
+ override val fingerprintSensor: Flow<FingerprintSensor>
+ get() = _fingerprintSensor.asSharedFlow()
+
+ init {
+ activityScope.launch {
+ callbackFlow{
val callback =
object : IFingerprintAuthenticatorsRegisteredCallback.Stub() {
+ @SuppressLint("LongLogTag")
override fun onAllAuthenticatorsRegistered(
sensors: List<FingerprintSensorPropertiesInternal>
) {
if (sensors.isEmpty()) {
- trySend(DEFAULT_PROPS)
+ Log.e(TAG, "empty sensors from onAllAuthenticatorsRegistered")
} else {
trySend(sensors[0])
+ channel.close()
}
}
}
@@ -74,27 +88,16 @@
fingerprintManager.addAuthenticatorsRegisteredCallback(callback)
}
awaitClose {}
+ }.collect {
+ _fingerprintSensor.emit(it.toFingerprintSensor())
}
- .stateIn(activityScope, started = SharingStarted.Eagerly, initialValue = DEFAULT_PROPS)
-
- override val fingerprintSensor: Flow<FingerprintSensor> =
- fingerprintPropsInternal.transform { emit(it.toFingerprintSensor()) }
+ }
+ }
override val hasSideFps: Flow<Boolean> =
fingerprintSensor.flatMapLatest { flow { emit(fingerprintManager.isPowerbuttonFps()) } }
- companion object {
-
- private val DEFAULT_PROPS =
- FingerprintSensorPropertiesInternal(
- -1 /* sensorId */,
- SensorProperties.STRENGTH_CONVENIENCE,
- 0 /* maxEnrollmentsPerUser */,
- listOf<ComponentInfoInternal>(),
- FingerprintSensorProperties.TYPE_UNKNOWN,
- false /* halControlsIllumination */,
- true /* resetLockoutRequiresHardwareAuthToken */,
- listOf<SensorLocationInternal>(SensorLocationInternal.DEFAULT),
- )
+ private companion object {
+ const val TAG = "FingerprintSensorRepository"
}
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt
index e1a08e6..9f62ed0 100644
--- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/AccessibilityInteractor.kt
@@ -16,6 +16,8 @@
package com.android.settings.biometrics.fingerprint2.domain.interactor
+import android.view.accessibility.AccessibilityEvent
+import android.view.accessibility.AccessibilityEvent.TYPE_ANNOUNCEMENT
import android.view.accessibility.AccessibilityManager
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.channels.awaitClose
@@ -27,26 +29,38 @@
/** Represents all of the information on accessibility state. */
interface AccessibilityInteractor {
/** A flow that contains whether or not accessibility is enabled */
- val isAccessibilityEnabled: Flow<Boolean>
+ fun isEnabledFlow(scope: CoroutineScope): Flow<Boolean>
+ val isEnabled: Boolean
+ fun announce(clazz: Class<*>, announcement: CharSequence?)
}
class AccessibilityInteractorImpl(
- accessibilityManager: AccessibilityManager,
- applicationScope: CoroutineScope,
+ private val accessibilityManager: AccessibilityManager,
) : AccessibilityInteractor {
/** A flow that contains whether or not accessibility is enabled */
- override val isAccessibilityEnabled: Flow<Boolean> =
+ override fun isEnabledFlow(scope: CoroutineScope): Flow<Boolean> =
callbackFlow {
- val listener =
- AccessibilityManager.AccessibilityStateChangeListener { enabled -> trySend(enabled) }
- accessibilityManager.addAccessibilityStateChangeListener(listener)
+ val listener =
+ AccessibilityManager.AccessibilityStateChangeListener { enabled -> trySend(enabled) }
+ accessibilityManager.addAccessibilityStateChangeListener(listener)
- // This clause will be called when no one is listening to the flow
- awaitClose { accessibilityManager.removeAccessibilityStateChangeListener(listener) }
- }
+ // This clause will be called when no one is listening to the flow
+ awaitClose { accessibilityManager.removeAccessibilityStateChangeListener(listener) }
+ }
.stateIn(
- applicationScope, // This is going to tied to the activity scope
+ scope,
SharingStarted.WhileSubscribed(), // When no longer subscribed, we removeTheListener
false,
)
+
+ override val isEnabled: Boolean
+ get() = accessibilityManager.isEnabled
+
+ override fun announce(clazz: Class<*>, announcement: CharSequence?) {
+ val event = AccessibilityEvent(TYPE_ANNOUNCEMENT)
+ event.className = clazz.javaClass.name
+ event.packageName = clazz.packageName
+ event.text.add(announcement)
+ accessibilityManager.sendAccessibilityEvent(event)
+ }
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/DisplayDensityInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/DisplayDensityInteractor.kt
index 6dfb4c2..00e85b1 100644
--- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/DisplayDensityInteractor.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/DisplayDensityInteractor.kt
@@ -42,7 +42,7 @@
val fontScale: Flow<Float>
/** A flow that propagates displayDensity. */
- val displayDensity: Flow<Int>
+ val displayDensity: Flow<Int?>
/** A flow that propagates the default display density. */
val defaultDisplayDensity: Flow<Int>
@@ -67,16 +67,14 @@
private val _fontScale = MutableStateFlow(context.resources.configuration.fontScale)
private val _displayDensity =
- MutableStateFlow(
- displayDensityUtils.defaultDisplayDensityValues[
- displayDensityUtils.currentIndexForDefaultDisplay]
- )
+ MutableStateFlow(displayDensityUtils.values?.let{
+ it[displayDensityUtils.currentIndex]
+ })
override val fontScale: Flow<Float> = _fontScale.asStateFlow()
- override val displayDensity: Flow<Int> = _displayDensity.asStateFlow()
+ override val displayDensity: Flow<Int?> = _displayDensity.asStateFlow()
override val defaultDisplayDensity: Flow<Int> =
- flowOf(displayDensityUtils.defaultDensityForDefaultDisplay)
- .shareIn(scope, SharingStarted.Eagerly, 1)
+ flowOf(displayDensityUtils.defaultDensity).shareIn(scope, SharingStarted.Eagerly, 1)
}
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintEnrollStageCountInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintEnrollStageCountInteractor.kt
new file mode 100644
index 0000000..6148158
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintEnrollStageCountInteractor.kt
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.biometrics.fingerprint2.domain.interactor
+
+import com.android.settings.biometrics.fingerprint2.data.repository.FingerprintEnrollmentRepository
+
+/**
+ * Interactor class for retrieving the total number of enrollment stages.
+ *
+ * This class interacts with the `FingerprintsRepository` to obtain the count
+ * of stages involved in the fingerprint enrollment process.
+ */
+class FingerprintEnrollStageCountInteractor (
+ fingerprintEnrollmentRepository: FingerprintEnrollmentRepository
+) {
+ /** The total number of enrollment stages. */
+ val count: Int = fingerprintEnrollmentRepository.enrollStageCount
+}
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintEnrollStageThresholdInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintEnrollStageThresholdInteractor.kt
new file mode 100644
index 0000000..a96e4ef
--- /dev/null
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/FingerprintEnrollStageThresholdInteractor.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.biometrics.fingerprint2.domain.interactor
+
+import com.android.settings.biometrics.fingerprint2.data.repository.FingerprintEnrollmentRepository
+
+/**
+ * Interactor class for retrieving the enrollment stage threshold.
+ *
+ * This class interacts with the `fingerprintEnrollmentRepository` to fetch the threshold value
+ * for a specific enrollment stage.
+ */
+class FingerprintEnrollStageThresholdInteractor(
+ private val fingerprintEnrollmentRepository: FingerprintEnrollmentRepository,
+) {
+ /**
+ * Retrieves the enrollment stage threshold for the given index.
+ *
+ * @param index The index of the enrollment stage.
+ * @return The threshold value for the specified stage.
+ */
+ fun getThreshold(index: Int): Float = fingerprintEnrollmentRepository.getEnrollStageThreshold(index)
+}
\ No newline at end of file
diff --git a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/UdfpsEnrollInteractor.kt b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/UdfpsEnrollInteractor.kt
index 006060a..62c51ae 100644
--- a/src/com/android/settings/biometrics/fingerprint2/domain/interactor/UdfpsEnrollInteractor.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/domain/interactor/UdfpsEnrollInteractor.kt
@@ -19,6 +19,7 @@
import android.content.Context
import android.graphics.PointF
import android.util.TypedValue
+import kotlinx.coroutines.MainScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
@@ -87,7 +88,7 @@
override val guidedEnrollmentOffset: Flow<PointF> =
combine(
_guidedEnrollment,
- accessibilityInteractor.isAccessibilityEnabled,
+ accessibilityInteractor.isEnabledFlow(MainScope()),
isGuidedEnrollment,
) { point, accessibilityEnabled, guidedEnrollmentEnabled ->
if (accessibilityEnabled || !guidedEnrollmentEnabled) {
diff --git a/src/com/android/settings/biometrics/fingerprint2/lib/model/FingerEnrollState.kt b/src/com/android/settings/biometrics/fingerprint2/lib/model/FingerEnrollState.kt
index e087304..1d368c0 100644
--- a/src/com/android/settings/biometrics/fingerprint2/lib/model/FingerEnrollState.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/lib/model/FingerEnrollState.kt
@@ -35,10 +35,13 @@
data class EnrollHelp(@StringRes val helpMsgId: Int, val helpString: String) :
FingerEnrollState()
- /** Represents that an unrecoverable error has been encountered and the operation is complete. */
+ /** Represents that an unrecoverable error has been encountered and the operation is complete.
+ * Note that errorId is the raw error id from [FingerprintManager]
+ */
data class EnrollError(
@StringRes val errTitle: Int,
@StringRes val errString: Int,
+ val errorId: Int,
val shouldRetryEnrollment: Boolean,
val isCancelled: Boolean,
) : FingerEnrollState()
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt
index 77d070e..dc89c93 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/activity/FingerprintEnrollmentV2Activity.kt
@@ -149,11 +149,11 @@
super.onConfigurationChanged(newConfig)
foldStateInteractor.onConfigurationChange(newConfig)
val displayDensityUtils = DisplayDensityUtils(applicationContext)
- val currIndex = displayDensityUtils.currentIndexForDefaultDisplay
+ val currIndex = displayDensityUtils.currentIndex
displayDensityInteractor.updateFontScale(resources.configuration.fontScale)
- displayDensityInteractor.updateDisplayDensity(
- displayDensityUtils.defaultDisplayDensityValues[currIndex]
- )
+ displayDensityUtils.values?.let {
+ displayDensityInteractor.updateDisplayDensity(it[currIndex])
+ }
}
private fun onConfirmDevice(resultCode: Int, data: Intent?) {
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/modules/enrolling/udfps/ui/viewmodel/UdfpsViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/modules/enrolling/udfps/ui/viewmodel/UdfpsViewModel.kt
index 658c6c7..df46aa4 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/modules/enrolling/udfps/ui/viewmodel/UdfpsViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/modules/enrolling/udfps/ui/viewmodel/UdfpsViewModel.kt
@@ -179,7 +179,7 @@
/** Indicates if accessibility is enabled */
val accessibilityEnabled =
- accessibilityInteractor.isAccessibilityEnabled.shareIn(
+ accessibilityInteractor.isEnabledFlow(viewModelScope).shareIn(
this.viewModelScope,
SharingStarted.Eagerly,
replay = 1,
@@ -425,7 +425,7 @@
biometricEnvironment.enrollStageInteractor,
biometricEnvironment.orientationInteractor,
biometricEnvironment.udfpsEnrollInteractor,
- biometricEnvironment.accessibilityInteractor,
+ biometricEnvironment.createAccessibilityInteractor(),
biometricEnvironment.sensorInteractor,
biometricEnvironment.touchEventInteractor,
biometricEnvironment.createSensorPropertiesInteractor(),
diff --git a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt
index 9b2cdde..b27cfdd 100644
--- a/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt
+++ b/src/com/android/settings/biometrics/fingerprint2/ui/enrollment/viewmodel/FingerprintEnrollFindSensorViewModel.kt
@@ -84,7 +84,7 @@
/** Represents the stream of showing udfps lottie and whether accessibility is enabled. */
val udfpsLottieInfo: Flow<Boolean> =
- _showUdfpsLottie.combine(accessibilityInteractor.isAccessibilityEnabled) {
+ _showUdfpsLottie.combine(accessibilityInteractor.isEnabledFlow(viewModelScope)) {
_,
isAccessibilityEnabled ->
isAccessibilityEnabled
@@ -213,7 +213,7 @@
provider[FingerprintGatekeeperViewModel::class],
provider[BackgroundViewModel::class],
provider[FingerprintFlowViewModel::class],
- biometricEnvironment.accessibilityInteractor,
+ biometricEnvironment.createAccessibilityInteractor(),
biometricEnvironment.foldStateInteractor,
biometricEnvironment.orientationInteractor,
biometricEnvironment.createSensorPropertiesInteractor(),
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java b/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java
index d62543b..e7c4c19 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsAudioDeviceTypeController.java
@@ -38,6 +38,7 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.flags.Flags;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LeAudioProfile;
@@ -134,6 +135,9 @@
@Override
protected void init(PreferenceScreen screen) {
mProfilesContainer = screen.findPreference(getPreferenceKey());
+ if (Flags.enableBluetoothDeviceDetailsPolish()) {
+ mProfilesContainer.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
+ }
refresh();
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
index e42c654..d75e7da 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsProfilesController.java
@@ -96,6 +96,7 @@
new HashMap<String, List<CachedBluetoothDevice>>();
private boolean mIsLeAudioToggleEnabled = false;
private boolean mIsLeAudioOnlyDevice = false;
+ private boolean mHasExtraSpace;
@VisibleForTesting
PreferenceCategory mProfilesContainer;
@@ -106,7 +107,8 @@
LocalBluetoothManager manager,
CachedBluetoothDevice device,
Lifecycle lifecycle,
- @Nullable List<String> invisibleProfiles) {
+ @Nullable List<String> invisibleProfiles,
+ boolean hasExtraSpace) {
super(context, fragment, device, lifecycle);
mManager = manager;
mProfileManager = mManager.getProfileManager();
@@ -115,12 +117,17 @@
if (invisibleProfiles != null) {
mInvisibleProfiles = Set.copyOf(invisibleProfiles);
}
+ mHasExtraSpace = hasExtraSpace;
}
@Override
protected void init(PreferenceScreen screen) {
mProfilesContainer = (PreferenceCategory)screen.findPreference(getPreferenceKey());
- mProfilesContainer.setLayoutResource(R.layout.preference_bluetooth_profile_category);
+ if (mHasExtraSpace) {
+ mProfilesContainer.setLayoutResource(R.layout.preference_bluetooth_profile_category);
+ } else {
+ mProfilesContainer.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
+ }
// Call refresh here even though it will get called later in onResume, to avoid the
// list of switches appearing to "pop" into the page.
refresh();
@@ -609,7 +616,11 @@
Preference preference = mProfilesContainer.findPreference(KEY_BOTTOM_PREFERENCE);
if (preference == null) {
preference = new Preference(mContext);
- preference.setLayoutResource(R.layout.preference_bluetooth_profile_category);
+ if (mHasExtraSpace) {
+ preference.setLayoutResource(R.layout.preference_bluetooth_profile_category);
+ } else {
+ preference.setLayoutResource(R.layout.preference_category_bluetooth_no_padding);
+ }
preference.setEnabled(false);
preference.setKey(KEY_BOTTOM_PREFERENCE);
preference.setOrder(ORDINAL);
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
index 0e51d17..355fae9 100644
--- a/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragment.java
@@ -123,6 +123,14 @@
}
}
}
+
+ @Override
+ public void onDeviceBondStateChanged(
+ @NonNull CachedBluetoothDevice cachedDevice, int bondState) {
+ if (cachedDevice.equals(mCachedDevice)) {
+ finishFragmentIfNecessary();
+ }
+ }
};
private final BluetoothAdapter.OnMetadataChangedListener mExtraControlMetadataListener =
@@ -421,11 +429,13 @@
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
List<String> invisibleProfiles = List.of();
if (Flags.enableBluetoothDeviceDetailsPolish()) {
- mFormatter =
- FeatureFactory.getFeatureFactory()
- .getBluetoothFeatureProvider()
- .getDeviceDetailsFragmentFormatter(
- requireContext(), this, mBluetoothAdapter, mCachedDevice);
+ if (mFormatter == null) {
+ mFormatter =
+ FeatureFactory.getFeatureFactory()
+ .getBluetoothFeatureProvider()
+ .getDeviceDetailsFragmentFormatter(
+ requireContext(), this, mBluetoothAdapter, mCachedDevice);
+ }
invisibleProfiles =
mFormatter.getInvisibleBluetoothProfiles(
FragmentTypeModel.DeviceDetailsMainFragment.INSTANCE);
@@ -448,7 +458,7 @@
controllers.add(new BluetoothDetailsSpatialAudioController(context, this, mCachedDevice,
lifecycle));
controllers.add(new BluetoothDetailsProfilesController(context, this, mManager,
- mCachedDevice, lifecycle, invisibleProfiles));
+ mCachedDevice, lifecycle, invisibleProfiles, invisibleProfiles == null));
controllers.add(new BluetoothDetailsMacAddressController(context, this, mCachedDevice,
lifecycle));
controllers.add(new StylusDevicesController(context, mInputDevice, mCachedDevice,
diff --git a/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java b/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java
index be0f6f3..1bad5e5 100644
--- a/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java
+++ b/src/com/android/settings/bluetooth/BluetoothFeatureProvider.java
@@ -25,7 +25,6 @@
import android.net.Uri;
import androidx.annotation.NonNull;
-import androidx.lifecycle.LifecycleCoroutineScope;
import androidx.preference.Preference;
import com.android.settings.SettingsPreferenceFragment;
@@ -34,12 +33,12 @@
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.devicesettings.data.repository.DeviceSettingRepository;
+import kotlinx.coroutines.CoroutineScope;
+
import java.util.List;
import java.util.Set;
-/**
- * Provider for bluetooth related features.
- */
+/** Provider for bluetooth related features. */
public interface BluetoothFeatureProvider {
/**
@@ -86,26 +85,25 @@
/**
* Gets the bluetooth profile preference keys which should be hidden in the device details page.
*
- * @param context Context
+ * @param context Context
* @param bluetoothDevice the bluetooth device
* @return the profiles which should be hidden
*/
- Set<String> getInvisibleProfilePreferenceKeys(
- Context context, BluetoothDevice bluetoothDevice);
+ Set<String> getInvisibleProfilePreferenceKeys(Context context, BluetoothDevice bluetoothDevice);
/** Gets DeviceSettingRepository. */
@NonNull
DeviceSettingRepository getDeviceSettingRepository(
@NonNull Context context,
@NonNull BluetoothAdapter bluetoothAdapter,
- @NonNull LifecycleCoroutineScope scope);
+ @NonNull CoroutineScope scope);
/** Gets spatial audio interactor. */
@NonNull
SpatialAudioInteractor getSpatialAudioInteractor(
@NonNull Context context,
@NonNull AudioManager audioManager,
- @NonNull LifecycleCoroutineScope scope);
+ @NonNull CoroutineScope scope);
/** Gets device details fragment layout formatter. */
@NonNull
diff --git a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.kt b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.kt
index 25c586e..6f967a2 100644
--- a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.kt
+++ b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.kt
@@ -22,6 +22,7 @@
import android.media.AudioManager
import android.media.Spatializer
import android.net.Uri
+import android.util.Log
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.preference.Preference
import com.android.settings.SettingsPreferenceFragment
@@ -37,6 +38,7 @@
import com.android.settingslib.media.domain.interactor.SpatializerInteractor
import com.google.common.collect.ImmutableList
import com.google.common.collect.ImmutableSet
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
/** Impl of [BluetoothFeatureProvider] */
@@ -76,14 +78,14 @@
override fun getDeviceSettingRepository(
context: Context,
bluetoothAdapter: BluetoothAdapter,
- scope: LifecycleCoroutineScope
+ scope: CoroutineScope
): DeviceSettingRepository =
DeviceSettingRepositoryImpl(context, bluetoothAdapter, scope, Dispatchers.IO)
override fun getSpatialAudioInteractor(
context: Context,
audioManager: AudioManager,
- scope: LifecycleCoroutineScope
+ scope: CoroutineScope,
): SpatialAudioInteractor {
return SpatialAudioInteractorImpl(
context, audioManager,
diff --git a/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractor.kt b/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractor.kt
index 6b72b53..cade566 100644
--- a/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractor.kt
+++ b/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractor.kt
@@ -30,10 +30,13 @@
import com.android.settingslib.media.domain.interactor.SpatializerInteractor
import kotlin.coroutines.CoroutineContext
import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharingStarted
-import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.callbackFlow
+import kotlinx.coroutines.flow.combine
+import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.launch
@@ -41,9 +44,7 @@
/** Provides device setting for spatial audio. */
interface SpatialAudioInteractor {
/** Gets device setting for spatial audio */
- fun getDeviceSetting(
- cachedDevice: CachedBluetoothDevice,
- ): Flow<DeviceSettingModel?>
+ fun getDeviceSetting(cachedDevice: CachedBluetoothDevice): Flow<DeviceSettingModel?>
}
class SpatialAudioInteractorImpl(
@@ -56,33 +57,55 @@
private val spatialAudioOffToggle =
ToggleModel(
context.getString(R.string.spatial_audio_multi_toggle_off),
- DeviceSettingIcon.ResourceIcon(R.drawable.ic_spatial_audio_off))
+ DeviceSettingIcon.ResourceIcon(R.drawable.ic_spatial_audio_off),
+ )
private val spatialAudioOnToggle =
ToggleModel(
context.getString(R.string.spatial_audio_multi_toggle_on),
- DeviceSettingIcon.ResourceIcon(R.drawable.ic_spatial_audio))
+ DeviceSettingIcon.ResourceIcon(R.drawable.ic_spatial_audio),
+ )
private val headTrackingOnToggle =
ToggleModel(
context.getString(R.string.spatial_audio_multi_toggle_head_tracking_on),
- DeviceSettingIcon.ResourceIcon(R.drawable.ic_head_tracking))
+ DeviceSettingIcon.ResourceIcon(R.drawable.ic_head_tracking),
+ )
private val changes = MutableSharedFlow<Unit>()
- override fun getDeviceSetting(
- cachedDevice: CachedBluetoothDevice,
- ): Flow<DeviceSettingModel?> =
+ override fun getDeviceSetting(cachedDevice: CachedBluetoothDevice): Flow<DeviceSettingModel?> =
changes
.onStart { emit(Unit) }
- .map { getSpatialAudioDeviceSettingModel(cachedDevice) }
+ .combine(
+ isDeviceConnected(cachedDevice),
+ ) { _, connected ->
+ if (connected) {
+ getSpatialAudioDeviceSettingModel(cachedDevice)
+ } else {
+ null
+ }
+ }
+ .flowOn(backgroundCoroutineContext)
.stateIn(coroutineScope, SharingStarted.WhileSubscribed(), initialValue = null)
+ private fun isDeviceConnected(cachedDevice: CachedBluetoothDevice): Flow<Boolean> =
+ callbackFlow {
+ val listener =
+ CachedBluetoothDevice.Callback { launch { send(cachedDevice.isConnected) } }
+ cachedDevice.registerCallback(context.mainExecutor, listener)
+ awaitClose { cachedDevice.unregisterCallback(listener) }
+ }
+ .onStart { emit(cachedDevice.isConnected) }
+ .flowOn(backgroundCoroutineContext)
+
private suspend fun getSpatialAudioDeviceSettingModel(
- cachedDevice: CachedBluetoothDevice,
+ cachedDevice: CachedBluetoothDevice
): DeviceSettingModel? {
// TODO(b/343317785): use audio repository instead of calling AudioManager directly.
Log.i(TAG, "CachedDevice: $cachedDevice profiles: ${cachedDevice.profiles}")
val attributes =
BluetoothUtils.getAudioDeviceAttributesForSpatialAudio(
- cachedDevice, audioManager.getBluetoothAudioDeviceCategory(cachedDevice.address))
+ cachedDevice,
+ audioManager.getBluetoothAudioDeviceCategory(cachedDevice.address),
+ )
?: run {
Log.i(TAG, "No audio profiles in cachedDevice: ${cachedDevice.address}.")
return null
@@ -116,7 +139,8 @@
TAG,
"Head tracking available: $headTrackingAvailable, " +
"spatial audio enabled: $spatialAudioEnabled, " +
- "head tracking enabled: $headTrackingEnabled")
+ "head tracking enabled: $headTrackingEnabled",
+ )
return DeviceSettingModel.MultiTogglePreference(
cachedDevice = cachedDevice,
id = DeviceSettingId.DEVICE_SETTING_ID_SPATIAL_AUDIO_MULTI_TOGGLE,
@@ -143,11 +167,12 @@
}
changes.emit(Unit)
}
- })
+ },
+ )
}
companion object {
- private const val TAG = "SpatialAudioInteractorImpl"
+ private const val TAG = "SpatialAudioInteractor"
private const val INDEX_SPATIAL_AUDIO_OFF = 0
private const val INDEX_SPATIAL_AUDIO_ON = 1
private const val INDEX_HEAD_TRACKING_ENABLED = 2
diff --git a/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt b/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt
index ad4176f..13c3b50 100644
--- a/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt
+++ b/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt
@@ -19,11 +19,10 @@
import android.bluetooth.BluetoothAdapter
import android.content.Context
import android.content.Intent
-import android.media.AudioManager
import android.os.Bundle
import androidx.compose.animation.AnimatedVisibility
-import androidx.compose.animation.expandVertically
-import androidx.compose.animation.shrinkVertically
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
@@ -33,14 +32,12 @@
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
-import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import androidx.lifecycle.lifecycleScope
import androidx.preference.Preference
import com.android.settings.R
import com.android.settings.SettingsPreferenceFragment
@@ -52,7 +49,6 @@
import com.android.settings.bluetooth.ui.view.DeviceDetailsMoreSettingsFragment.Companion.KEY_DEVICE_ADDRESS
import com.android.settings.bluetooth.ui.viewmodel.BluetoothDeviceDetailsViewModel
import com.android.settings.core.SubSettingLauncher
-import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settings.spa.preference.ComposePreference
import com.android.settingslib.bluetooth.CachedBluetoothDevice
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingActionModel
@@ -97,29 +93,17 @@
class DeviceDetailsFragmentFormatterImpl(
private val context: Context,
private val fragment: SettingsPreferenceFragment,
- bluetoothAdapter: BluetoothAdapter,
+ private val bluetoothAdapter: BluetoothAdapter,
private val cachedDevice: CachedBluetoothDevice,
private val backgroundCoroutineContext: CoroutineContext,
) : DeviceDetailsFragmentFormatter {
- private val repository =
- featureFactory.bluetoothFeatureProvider.getDeviceSettingRepository(
- fragment.requireActivity().application,
- bluetoothAdapter,
- fragment.lifecycleScope,
- )
- private val spatialAudioInteractor =
- featureFactory.bluetoothFeatureProvider.getSpatialAudioInteractor(
- fragment.requireActivity().application,
- context.getSystemService(AudioManager::class.java),
- fragment.lifecycleScope,
- )
+
private val viewModel: BluetoothDeviceDetailsViewModel =
ViewModelProvider(
fragment,
BluetoothDeviceDetailsViewModel.Factory(
fragment.requireActivity().application,
- repository,
- spatialAudioInteractor,
+ bluetoothAdapter,
cachedDevice,
backgroundCoroutineContext,
),
@@ -224,8 +208,8 @@
val settings = contents
AnimatedVisibility(
visible = settings.isNotEmpty(),
- enter = expandVertically(expandFrom = Alignment.Top),
- exit = shrinkVertically(shrinkTowards = Alignment.Top),
+ enter = fadeIn(),
+ exit = fadeOut(),
) {
Box {
Box(
diff --git a/src/com/android/settings/bluetooth/ui/view/DeviceDetailsMoreSettingsFragment.kt b/src/com/android/settings/bluetooth/ui/view/DeviceDetailsMoreSettingsFragment.kt
index 7cb1c0d..47fda74 100644
--- a/src/com/android/settings/bluetooth/ui/view/DeviceDetailsMoreSettingsFragment.kt
+++ b/src/com/android/settings/bluetooth/ui/view/DeviceDetailsMoreSettingsFragment.kt
@@ -120,13 +120,15 @@
finish()
return emptyList()
}
- formatter =
- featureFactory.bluetoothFeatureProvider.getDeviceDetailsFragmentFormatter(
- requireContext(),
- this,
- bluetoothManager.adapter,
- cachedDevice,
- )
+ if (!this::formatter.isInitialized) {
+ formatter =
+ featureFactory.bluetoothFeatureProvider.getDeviceDetailsFragmentFormatter(
+ requireContext(),
+ this,
+ bluetoothManager.adapter,
+ cachedDevice,
+ )
+ }
helpItem =
formatter
.getMenuItem(FragmentTypeModel.DeviceDetailsMoreSettingsFragment)
@@ -141,6 +143,7 @@
formatter.getInvisibleBluetoothProfiles(
FragmentTypeModel.DeviceDetailsMoreSettingsFragment
),
+ false,
),
BluetoothDetailsAudioDeviceTypeController(
context,
diff --git a/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModel.kt b/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModel.kt
index dd0012e..1ea2da3 100644
--- a/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModel.kt
+++ b/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModel.kt
@@ -17,20 +17,22 @@
package com.android.settings.bluetooth.ui.viewmodel
import android.app.Application
+import android.bluetooth.BluetoothAdapter
+import android.media.AudioManager
+import android.util.Log
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
import com.android.settings.R
-import com.android.settings.bluetooth.domain.interactor.SpatialAudioInteractor
import com.android.settings.bluetooth.ui.layout.DeviceSettingLayout
import com.android.settings.bluetooth.ui.layout.DeviceSettingLayoutColumn
import com.android.settings.bluetooth.ui.layout.DeviceSettingLayoutRow
import com.android.settings.bluetooth.ui.model.DeviceSettingPreferenceModel
import com.android.settings.bluetooth.ui.model.FragmentTypeModel
+import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
import com.android.settingslib.bluetooth.CachedBluetoothDevice
import com.android.settingslib.bluetooth.devicesettings.DeviceSettingId
-import com.android.settingslib.bluetooth.devicesettings.data.repository.DeviceSettingRepository
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingConfigItemModel
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingIcon
import com.android.settingslib.bluetooth.devicesettings.shared.model.DeviceSettingModel
@@ -47,17 +49,31 @@
class BluetoothDeviceDetailsViewModel(
private val application: Application,
- private val deviceSettingRepository: DeviceSettingRepository,
- private val spatialAudioInteractor: SpatialAudioInteractor,
+ private val bluetoothAdapter: BluetoothAdapter,
private val cachedDevice: CachedBluetoothDevice,
backgroundCoroutineContext: CoroutineContext,
) : AndroidViewModel(application) {
+ private val deviceSettingRepository =
+ featureFactory.bluetoothFeatureProvider.getDeviceSettingRepository(
+ application,
+ bluetoothAdapter,
+ viewModelScope,
+ )
+ private val spatialAudioInteractor =
+ featureFactory.bluetoothFeatureProvider.getSpatialAudioInteractor(
+ application,
+ application.getSystemService(AudioManager::class.java),
+ viewModelScope,
+ )
+
private val items =
viewModelScope.async(backgroundCoroutineContext, start = CoroutineStart.LAZY) {
deviceSettingRepository.getDeviceSettingsConfig(cachedDevice)
}
+ private val spatialAudioModel by lazy { spatialAudioInteractor.getDeviceSetting(cachedDevice) }
+
suspend fun getItems(fragment: FragmentTypeModel): List<DeviceSettingConfigItemModel>? =
when (fragment) {
is FragmentTypeModel.DeviceDetailsMainFragment -> items.await()?.mainItems
@@ -81,7 +97,7 @@
}
return when (settingId) {
DeviceSettingId.DEVICE_SETTING_ID_SPATIAL_AUDIO_MULTI_TOGGLE ->
- spatialAudioInteractor.getDeviceSetting(cachedDevice)
+ spatialAudioModel
else -> deviceSettingRepository.getDeviceSetting(cachedDevice, settingId)
}.map { it?.toPreferenceModel() }
}
@@ -200,8 +216,7 @@
class Factory(
private val application: Application,
- private val deviceSettingRepository: DeviceSettingRepository,
- private val spatialAudioInteractor: SpatialAudioInteractor,
+ private val bluetoothAdapter: BluetoothAdapter,
private val cachedDevice: CachedBluetoothDevice,
private val backgroundCoroutineContext: CoroutineContext,
) : ViewModelProvider.Factory {
@@ -209,8 +224,7 @@
@Suppress("UNCHECKED_CAST")
return BluetoothDeviceDetailsViewModel(
application,
- deviceSettingRepository,
- spatialAudioInteractor,
+ bluetoothAdapter,
cachedDevice,
backgroundCoroutineContext,
)
diff --git a/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java b/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
index 66f2f1b..90ef5b9 100644
--- a/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/BluetoothDashboardFragment.java
@@ -21,6 +21,8 @@
import android.text.TextUtils;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
@@ -120,4 +122,9 @@
*/
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.bluetooth_screen);
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return BluetoothDashboardScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt b/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt
new file mode 100644
index 0000000..66fd8b1
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/BluetoothDashboardScreen.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.connecteddevice
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class BluetoothDashboardScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.bluetooth_settings_title
+
+ override val icon: Int
+ get() = R.drawable.ic_settings_bluetooth
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystBluetoothSwitchbarScreen()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = BluetoothDashboardFragment::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "bluetooth_switchbar_screen"
+ }
+}
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java
index 0b6b8c9..7ff7844 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDeviceAdapter.java
@@ -85,6 +85,10 @@
mButtonView.setText(btnText);
mButtonView.setOnClickListener(
v -> mOnClickListener.onClick(mDevices.get(position)));
+ if (position == 0) {
+ mButtonView.setBackgroundResource(
+ com.android.settingslib.R.drawable.audio_sharing_rounded_bg_ripple_top);
+ }
} else {
Log.w(TAG, "bind view skipped due to button view is null");
}
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreference.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreference.java
index e3bbfb7..17dcc7f 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreference.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreference.java
@@ -41,6 +41,7 @@
@Nullable private EditText mEditText;
@Nullable private CheckBox mCheckBox;
@Nullable private View mDialogMessage;
+ @Nullable private View mEditTextFormatAlert;
private boolean mEditable = true;
interface OnDialogEventListener {
@@ -77,6 +78,7 @@
mEditText = view.findViewById(android.R.id.edit);
mCheckBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
mDialogMessage = view.findViewById(android.R.id.message);
+ mEditTextFormatAlert = view.findViewById(R.id.edit_alert_message);
if (mEditText == null || mCheckBox == null || mDialogMessage == null) {
Log.w(TAG, "onBindDialogView() : Invalid layout");
@@ -123,6 +125,14 @@
mDialogMessage.setVisibility(editable ? GONE : VISIBLE);
}
+ void showEditTextFormatAlert(boolean show) {
+ if (mEditTextFormatAlert == null) {
+ Log.w(TAG, "showEditTextFormatAlert() : Invalid layout");
+ return;
+ }
+ mEditTextFormatAlert.setVisibility(show ? VISIBLE : GONE);
+ }
+
void setChecked(boolean checked) {
if (mCheckBox == null) {
Log.w(TAG, "setChecked() : Invalid layout");
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceController.java
index 9a27a93..7cc8058 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceController.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceController.java
@@ -136,7 +136,11 @@
@Override
public boolean isTextValid(String value) {
- return mAudioSharingPasswordValidator.isTextValid(value);
+ boolean isValid = mAudioSharingPasswordValidator.isTextValid(value);
+ if (mPreference != null) {
+ mPreference.showEditTextFormatAlert(!isValid);
+ }
+ return isValid;
}
@Override
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java
index 371613f..013b4d4 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiver.java
@@ -38,7 +38,7 @@
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
public class AudioSharingReceiver extends BroadcastReceiver {
- private static final String TAG = "AudioSharingNotification";
+ private static final String TAG = "AudioSharingReceiver";
private static final String ACTION_LE_AUDIO_SHARING_SETTINGS =
"com.android.settings.BLUETOOTH_AUDIO_SHARING_SETTINGS";
private static final String ACTION_LE_AUDIO_SHARING_STOP =
@@ -49,10 +49,6 @@
@Override
public void onReceive(Context context, Intent intent) {
- if (!BluetoothUtils.isAudioSharingEnabled()) {
- Log.w(TAG, "Skip handling received intent, flag is off.");
- return;
- }
String action = intent.getAction();
if (action == null) {
Log.w(TAG, "Received unexpected intent with null action.");
@@ -66,13 +62,22 @@
intent.getIntExtra(
LocalBluetoothLeBroadcast.EXTRA_LE_AUDIO_SHARING_STATE, -1);
if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_ON) {
+ if (!BluetoothUtils.isAudioSharingEnabled()) {
+ Log.w(TAG, "Skip showSharingNotification, feature disabled.");
+ return;
+ }
showSharingNotification(context);
metricsFeatureProvider.action(
context, SettingsEnums.ACTION_SHOW_AUDIO_SHARING_NOTIFICATION);
} else if (state == LocalBluetoothLeBroadcast.BROADCAST_STATE_OFF) {
+ // TODO: check BluetoothUtils#isAudioSharingEnabled() till BluetoothAdapter#
+ // isLeAudioBroadcastSourceSupported() and BluetoothAdapter#
+ // isLeAudioBroadcastAssistantSupported() always return FEATURE_SUPPORTED
+ // or FEATURE_NOT_SUPPORTED when BT and BLE off
cancelSharingNotification(context);
metricsFeatureProvider.action(
- context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
+ context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ LocalBluetoothLeBroadcast.ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
} else {
Log.w(
TAG,
@@ -80,16 +85,24 @@
}
break;
case ACTION_LE_AUDIO_SHARING_STOP:
- LocalBluetoothManager manager = Utils.getLocalBtManager(context);
- if (BluetoothUtils.isBroadcasting(manager)) {
- AudioSharingUtils.stopBroadcasting(manager);
- metricsFeatureProvider.action(
- context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
- } else {
- cancelSharingNotification(context);
- metricsFeatureProvider.action(
- context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
+ if (BluetoothUtils.isAudioSharingEnabled()) {
+ LocalBluetoothManager manager = Utils.getLocalBtManager(context);
+ if (BluetoothUtils.isBroadcasting(manager)) {
+ AudioSharingUtils.stopBroadcasting(manager);
+ metricsFeatureProvider.action(
+ context, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
+ return;
+ }
}
+ Log.w(TAG, "cancelSharingNotification, feature disabled or not in broadcast.");
+ // TODO: check BluetoothUtils#isAudioSharingEnabled() till BluetoothAdapter#
+ // isLeAudioBroadcastSourceSupported() and BluetoothAdapter#
+ // isLeAudioBroadcastAssistantSupported() always return FEATURE_SUPPORTED
+ // or FEATURE_NOT_SUPPORTED when BT and BLE off
+ cancelSharingNotification(context);
+ metricsFeatureProvider.action(
+ context, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
break;
default:
Log.w(TAG, "Received unexpected intent " + intent.getAction());
@@ -129,15 +142,15 @@
PendingIntent.FLAG_IMMUTABLE);
NotificationCompat.Action stopAction =
new NotificationCompat.Action.Builder(
- 0,
- context.getString(R.string.audio_sharing_stop_button_label),
- stopPendingIntent)
+ 0,
+ context.getString(R.string.audio_sharing_stop_button_label),
+ stopPendingIntent)
.build();
NotificationCompat.Action settingsAction =
new NotificationCompat.Action.Builder(
- 0,
- context.getString(R.string.audio_sharing_settings_button_label),
- settingsPendingIntent)
+ 0,
+ context.getString(R.string.audio_sharing_settings_button_label),
+ settingsPendingIntent)
.build();
final Bundle extras = new Bundle();
extras.putString(
diff --git a/src/com/android/settings/datausage/DataSaverScreen.kt b/src/com/android/settings/datausage/DataSaverScreen.kt
new file mode 100644
index 0000000..eafaa1e
--- /dev/null
+++ b/src/com/android/settings/datausage/DataSaverScreen.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.datausage
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class DataSaverScreen : PreferenceScreenCreator {
+ override val key
+ get() = KEY
+
+ override val title
+ get() = R.string.data_saver_title
+
+ override val icon: Int
+ get() = R.drawable.ic_settings_data_usage
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystRestrictBackgroundParentEntry()
+
+ override fun fragmentClass() = DataSaverSummary::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ override fun hasCompleteHierarchy() = false
+
+ companion object {
+ const val KEY = "restrict_background_parent_entry"
+ }
+}
diff --git a/src/com/android/settings/datausage/DataSaverSummary.kt b/src/com/android/settings/datausage/DataSaverSummary.kt
index e118bd6..8db6333 100644
--- a/src/com/android/settings/datausage/DataSaverSummary.kt
+++ b/src/com/android/settings/datausage/DataSaverSummary.kt
@@ -79,6 +79,8 @@
override fun getHelpResource() = R.string.help_url_data_saver
override fun getLogTag() = TAG
+ override fun getPreferenceScreenBindingKey(context: Context) = DataSaverScreen.KEY
+
private val dataSaverBackendListener = object : DataSaverBackend.Listener {
override fun onDataSaverChanged(isDataSaving: Boolean) {
synchronized(this) {
diff --git a/src/com/android/settings/development/BluetoothLeAudioModePreferenceController.java b/src/com/android/settings/development/BluetoothLeAudioModePreferenceController.java
index 739258d..bf5efa7 100644
--- a/src/com/android/settings/development/BluetoothLeAudioModePreferenceController.java
+++ b/src/com/android/settings/development/BluetoothLeAudioModePreferenceController.java
@@ -34,12 +34,10 @@
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import java.util.Objects;
-/**
- * Preference controller to control Bluetooth LE audio mode
- */
-public class BluetoothLeAudioModePreferenceController
- extends DeveloperOptionsPreferenceController
+/** Preference controller to control Bluetooth LE audio mode */
+public class BluetoothLeAudioModePreferenceController extends DeveloperOptionsPreferenceController
implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String PREFERENCE_KEY = "bluetooth_leaudio_mode";
@@ -51,15 +49,13 @@
private final String[] mListValues;
private final String[] mListSummaries;
- @VisibleForTesting
- @Nullable String mNewMode;
- @VisibleForTesting
- BluetoothAdapter mBluetoothAdapter;
+ @VisibleForTesting @Nullable String mNewMode;
+ @VisibleForTesting BluetoothAdapter mBluetoothAdapter;
boolean mChanged = false;
- public BluetoothLeAudioModePreferenceController(@NonNull Context context,
- @Nullable DevelopmentSettingsDashboardFragment fragment) {
+ public BluetoothLeAudioModePreferenceController(
+ @NonNull Context context, @Nullable DevelopmentSettingsDashboardFragment fragment) {
super(context);
mFragment = fragment;
mBluetoothAdapter = context.getSystemService(BluetoothManager.class).getAdapter();
@@ -69,7 +65,8 @@
}
@Override
- @NonNull public String getPreferenceKey() {
+ @NonNull
+ public String getPreferenceKey() {
return PREFERENCE_KEY;
}
@@ -125,20 +122,25 @@
}
}
- /**
- * Called when the RebootDialog confirm is clicked.
- */
+ /** Called when the RebootDialog confirm is clicked. */
public void onRebootDialogConfirmed() {
if (!mChanged) {
return;
}
SystemProperties.set(LE_AUDIO_DYNAMIC_SWITCHER_MODE_PROPERTY, mNewMode);
+ if (mFragment != null && !Objects.equals(mNewMode, "broadcast")) {
+ mFragment.onBroadcastDisabled();
+ }
}
- /**
- * Called when the RebootDialog cancel is clicked.
- */
+ /** Called when the RebootDialog cancel is clicked. */
public void onRebootDialogCanceled() {
mChanged = false;
}
+
+ public interface OnModeChangeListener {
+
+ /** Called when the broadcast mode is disabled. */
+ void onBroadcastDisabled();
+ }
}
diff --git a/src/com/android/settings/development/BluetoothLeAudioUiPreferenceController.java b/src/com/android/settings/development/BluetoothLeAudioUiPreferenceController.java
new file mode 100644
index 0000000..f2ae55f
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothLeAudioUiPreferenceController.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothStatusCodes;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.provider.Settings;
+import android.sysprop.BluetoothProperties;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.SwitchPreferenceCompat;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.flags.Flags;
+import com.android.settingslib.utils.ThreadUtils;
+
+/** Preference controller to enable / disable the Bluetooth LE audio sharing UI flow */
+public class BluetoothLeAudioUiPreferenceController extends DeveloperOptionsPreferenceController
+ implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin,
+ BluetoothLeAudioModePreferenceController.OnModeChangeListener {
+ private static final String TAG = "BluetoothLeAudioUiPreferenceController";
+ private static final String PREFERENCE_KEY = "bluetooth_leaudio_broadcast_ui";
+
+ @VisibleForTesting
+ static final String VALUE_KEY = "bluetooth_le_audio_sharing_ui_preview_enabled";
+
+ @VisibleForTesting static final int VALUE_OFF = 0;
+ @VisibleForTesting static final int VALUE_ON = 1;
+ @VisibleForTesting static final int VALUE_UNSET = -1;
+ @Nullable private final DevelopmentSettingsDashboardFragment mFragment;
+ private final BluetoothAdapter mBluetoothAdapter;
+ private boolean mCurrentSettingsValue = false;
+ private boolean mShouldToggleCurrentValue = false;
+
+ public BluetoothLeAudioUiPreferenceController(
+ @NonNull Context context, @Nullable DevelopmentSettingsDashboardFragment fragment) {
+ super(context);
+ mFragment = fragment;
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return Flags.audioSharingDeveloperOption()
+ && BluetoothProperties.isProfileBapBroadcastSourceEnabled().orElse(false)
+ && BluetoothProperties.isProfileBapBroadcastAssistEnabled().orElse(false);
+ }
+
+ @Override
+ public boolean onPreferenceChange(@NonNull Preference preference, @Nullable Object newValue) {
+ if (mFragment != null && newValue != null && (boolean) newValue != mCurrentSettingsValue) {
+ mShouldToggleCurrentValue = true;
+ BluetoothRebootDialog.show(mFragment);
+ }
+ return false;
+ }
+
+ @Override
+ public void updateState(@NonNull Preference preference) {
+ if (mBluetoothAdapter == null) {
+ return;
+ }
+ var unused = ThreadUtils.postOnBackgroundThread(
+ () -> {
+ boolean shouldEnable =
+ mBluetoothAdapter.isEnabled()
+ && mBluetoothAdapter.isLeAudioBroadcastSourceSupported()
+ == BluetoothStatusCodes.FEATURE_SUPPORTED
+ && mBluetoothAdapter.isLeAudioBroadcastAssistantSupported()
+ == BluetoothStatusCodes.FEATURE_SUPPORTED;
+ boolean valueOn =
+ Settings.Global.getInt(
+ mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET)
+ == VALUE_ON;
+ mContext.getMainExecutor()
+ .execute(
+ () -> {
+ if (!shouldEnable && valueOn) {
+ Log.e(
+ TAG,
+ "Error state: toggle disabled but current"
+ + " settings value is true.");
+ }
+ mCurrentSettingsValue = valueOn;
+ preference.setEnabled(shouldEnable);
+ ((SwitchPreferenceCompat) preference).setChecked(valueOn);
+ });
+ });
+ }
+
+ @Override
+ public @NonNull String getPreferenceKey() {
+ return PREFERENCE_KEY;
+ }
+
+ /** Called when the RebootDialog confirm is clicked. */
+ public void onRebootDialogConfirmed() {
+ if (isAvailable() && mShouldToggleCurrentValue) {
+ // Blocking, ensure reboot happens after value is saved.
+ Log.d(TAG, "onRebootDialogConfirmed(): setting value to " + !mCurrentSettingsValue);
+ toggleSetting(mContext.getContentResolver(), !mCurrentSettingsValue);
+ }
+ }
+
+ /** Called when the RebootDialog cancel is clicked. */
+ public void onRebootDialogCanceled() {
+ mShouldToggleCurrentValue = false;
+ }
+
+ @Override
+ public void onBroadcastDisabled() {
+ if (isAvailable() && mCurrentSettingsValue) {
+ Log.d(TAG, "onBroadcastDisabled(): setting value to false");
+ // Blocking, ensure reboot happens after value is saved.
+ toggleSetting(mContext.getContentResolver(), false);
+ }
+ }
+
+ private static void toggleSetting(ContentResolver contentResolver, boolean valueOn) {
+ Settings.Global.putInt(contentResolver, VALUE_KEY, valueOn ? VALUE_ON : VALUE_OFF);
+ }
+}
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 09b7503..b453de1 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -99,7 +99,9 @@
AdbClearKeysDialogHost, LogPersistDialogHost,
BluetoothRebootDialog.OnRebootDialogListener,
AbstractBluetoothPreferenceController.Callback,
- NfcRebootDialog.OnNfcRebootDialogConfirmedListener, BluetoothSnoopLogHost {
+ NfcRebootDialog.OnNfcRebootDialogConfirmedListener,
+ BluetoothSnoopLogHost,
+ BluetoothLeAudioModePreferenceController.OnModeChangeListener {
private static final String TAG = "DevSettingsDashboard";
@VisibleForTesting static final int REQUEST_BIOMETRIC_PROMPT = 100;
@@ -498,6 +500,10 @@
getDevelopmentOptionsController(
BluetoothLeAudioModePreferenceController.class);
leAudioModeController.onRebootDialogConfirmed();
+
+ final BluetoothLeAudioUiPreferenceController leAudioUiController =
+ getDevelopmentOptionsController(BluetoothLeAudioUiPreferenceController.class);
+ leAudioUiController.onRebootDialogConfirmed();
}
@Override
@@ -520,6 +526,10 @@
getDevelopmentOptionsController(
BluetoothLeAudioModePreferenceController.class);
leAudioModeController.onRebootDialogCanceled();
+
+ final BluetoothLeAudioUiPreferenceController leAudioUiController =
+ getDevelopmentOptionsController(BluetoothLeAudioUiPreferenceController.class);
+ leAudioUiController.onRebootDialogCanceled();
}
@Override
@@ -712,6 +722,7 @@
controllers.add(new WirelessDebuggingPreferenceController(context, lifecycle));
controllers.add(new AdbAuthorizationTimeoutPreferenceController(context));
controllers.add(new LocalTerminalPreferenceController(context));
+ controllers.add(new LinuxTerminalPreferenceController(context));
controllers.add(new BugReportInPowerPreferenceController(context));
controllers.add(new AutomaticSystemServerHeapDumpPreferenceController(context));
controllers.add(new MockLocationAppPreferenceController(context, fragment));
@@ -740,6 +751,7 @@
controllers.add(new BluetoothMapVersionPreferenceController(context));
controllers.add(new BluetoothLeAudioPreferenceController(context, fragment));
controllers.add(new BluetoothLeAudioModePreferenceController(context, fragment));
+ controllers.add(new BluetoothLeAudioUiPreferenceController(context, fragment));
controllers.add(new BluetoothLeAudioDeviceDetailsPreferenceController(context));
controllers.add(new BluetoothLeAudioAllowListPreferenceController(context));
controllers.add(new BluetoothA2dpHwOffloadPreferenceController(context, fragment));
@@ -857,6 +869,15 @@
}
}
+ @Override
+ public void onBroadcastDisabled() {
+ for (AbstractPreferenceController controller : mPreferenceControllers) {
+ if (controller instanceof BluetoothLeAudioUiPreferenceController) {
+ ((BluetoothLeAudioUiPreferenceController) controller).onBroadcastDisabled();
+ }
+ }
+ }
+
/**
* For Search.
*/
diff --git a/src/com/android/settings/development/LinuxTerminalPreferenceController.java b/src/com/android/settings/development/LinuxTerminalPreferenceController.java
new file mode 100644
index 0000000..3e419e4
--- /dev/null
+++ b/src/com/android/settings/development/LinuxTerminalPreferenceController.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+import androidx.preference.TwoStatePreference;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class LinuxTerminalPreferenceController extends DeveloperOptionsPreferenceController
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+ private static final String TAG = "LinuxTerminalPrefCtrl";
+
+ private static final String ENABLE_TERMINAL_KEY = "enable_linux_terminal";
+
+ @NonNull
+ private final PackageManager mPackageManager;
+
+ @Nullable
+ private final String mTerminalPackageName;
+
+ public LinuxTerminalPreferenceController(@NonNull Context context) {
+ super(context);
+ mPackageManager = mContext.getPackageManager();
+
+ String packageName = mContext.getString(R.string.config_linux_terminal_app_package_name);
+ mTerminalPackageName =
+ isPackageInstalled(mPackageManager, packageName) ? packageName : null;
+
+ Log.d(TAG, "Terminal app package name=" + packageName + ", isAvailable=" + isAvailable());
+ }
+
+ // Avoid lazy initialization because this may be called before displayPreference().
+ @Override
+ public boolean isAvailable() {
+ // Returns true only if the terminal app is installed which only happens when the build flag
+ // RELEASE_AVF_SUPPORT_CUSTOM_VM_WITH_PARAVIRTUALIZED_DEVICES is true.
+ // TODO(b/343795511): Add explicitly check for the flag when it's accessible from Java code.
+ return getTerminalPackageName() != null;
+ }
+
+ @Override
+ @NonNull
+ public String getPreferenceKey() {
+ return ENABLE_TERMINAL_KEY;
+ }
+
+ @Override
+ public void displayPreference(@NonNull PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference.setEnabled(isAvailable());
+ }
+
+ @Override
+ public boolean onPreferenceChange(
+ @NonNull Preference preference, @NonNull Object newValue) {
+ String packageName = getTerminalPackageName();
+ if (packageName == null) {
+ return false;
+ }
+
+ boolean terminalEnabled = (Boolean) newValue;
+ int state = terminalEnabled
+ ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+ : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
+ mPackageManager.setApplicationEnabledSetting(packageName, state, /* flags=*/ 0);
+ ((TwoStatePreference) mPreference).setChecked(terminalEnabled);
+ return true;
+ }
+
+ @Override
+ public void updateState(@NonNull Preference preference) {
+ String packageName = getTerminalPackageName();
+ if (packageName == null) {
+ return;
+ }
+
+ boolean isTerminalEnabled = mPackageManager.getApplicationEnabledSetting(packageName)
+ == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ ((TwoStatePreference) mPreference).setChecked(isTerminalEnabled);
+ }
+
+ // Can be mocked for testing
+ @VisibleForTesting
+ @Nullable
+ String getTerminalPackageName() {
+ return mTerminalPackageName;
+ }
+
+ private static boolean isPackageInstalled(PackageManager manager, String packageName) {
+ if (TextUtils.isEmpty(packageName)) {
+ return false;
+ }
+ try {
+ return manager.getPackageInfo(
+ packageName,
+ PackageManager.MATCH_ALL | PackageManager.MATCH_DISABLED_COMPONENTS) != null;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoFeatureProvider.kt b/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoFeatureProvider.kt
index e9866d7..4b2666f 100644
--- a/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoFeatureProvider.kt
+++ b/src/com/android/settings/deviceinfo/hardwareinfo/HardwareInfoFeatureProvider.kt
@@ -27,5 +27,5 @@
/**
* The country of origin label.
*/
- val countryIfOriginLabel: String
+ val countryOfOriginLabel: String
}
diff --git a/src/com/android/settings/display/DarkUIPreferenceController.java b/src/com/android/settings/display/DarkUIPreferenceController.java
index f1bbfcd..26b33da 100644
--- a/src/com/android/settings/display/DarkUIPreferenceController.java
+++ b/src/com/android/settings/display/DarkUIPreferenceController.java
@@ -34,6 +34,7 @@
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
+// LINT.IfChange
public class DarkUIPreferenceController extends TogglePreferenceController implements
LifecycleObserver, OnStart, OnStop {
@@ -123,3 +124,4 @@
return AVAILABLE;
}
}
+// LINT.ThenChange(darkmode/DarkModeScreen.kt)
diff --git a/src/com/android/settings/display/DisplayScreen.kt b/src/com/android/settings/display/DisplayScreen.kt
index 9886e4a..bd21e8e 100644
--- a/src/com/android/settings/display/DisplayScreen.kt
+++ b/src/com/android/settings/display/DisplayScreen.kt
@@ -18,27 +18,39 @@
import android.content.Context
import com.android.settings.DisplaySettings
import com.android.settings.R
+import com.android.settings.display.darkmode.DarkModeScreen
import com.android.settings.flags.Flags
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.PreferenceIconProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen
-class DisplayScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider {
+class DisplayScreen :
+ PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceIconProvider {
override val key: String
get() = KEY
override val title: Int
get() = R.string.display_settings
+ override fun getIcon(context: Context) =
+ when {
+ Flags.homepageRevamp() -> R.drawable.ic_settings_display_filled
+ else -> R.drawable.ic_settings_display_white
+ }
+
override fun isFlagEnabled(context: Context) = Flags.catalystDisplaySettingsScreen()
override fun hasCompleteHierarchy() = false
override fun fragmentClass() = DisplaySettings::class.java
- override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
+ +DarkModeScreen.KEY
+ +PeakRefreshRateSwitchPreference()
+ }
override fun isAvailable(context: Context) =
context.resources.getBoolean(R.bool.config_show_top_level_display)
diff --git a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java
index 261eaf1..740a726 100644
--- a/src/com/android/settings/display/PeakRefreshRatePreferenceController.java
+++ b/src/com/android/settings/display/PeakRefreshRatePreferenceController.java
@@ -40,6 +40,7 @@
import java.util.concurrent.Executor;
+// LINT.IfChange
public class PeakRefreshRatePreferenceController extends TogglePreferenceController
implements LifecycleObserver, OnStart, OnStop {
@@ -196,3 +197,4 @@
return defaultPeakRefreshRate;
}
}
+// LINT.ThenChange(PeakRefreshRateSwitchPreference.kt)
diff --git a/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt b/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt
new file mode 100644
index 0000000..793b0e2
--- /dev/null
+++ b/src/com/android/settings/display/PeakRefreshRateSwitchPreference.kt
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.display
+
+import android.content.Context
+import android.hardware.display.DisplayManager
+import android.provider.DeviceConfig
+import android.util.Log
+import com.android.internal.display.RefreshRateSettingsUtils.DEFAULT_REFRESH_RATE
+import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateAmongAllDisplays
+import com.android.internal.display.RefreshRateSettingsUtils.findHighestRefreshRateForDefaultDisplay
+import com.android.server.display.feature.flags.Flags
+import com.android.settings.R
+import com.android.settingslib.datastore.HandlerExecutor
+import com.android.settingslib.datastore.SettingsSystemStore
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.PreferenceLifecycleContext
+import com.android.settingslib.metadata.PreferenceLifecycleProvider
+import com.android.settingslib.metadata.PreferenceSummaryProvider
+import com.android.settingslib.metadata.SwitchPreference
+import com.android.settingslib.preference.SwitchPreferenceBinding
+import kotlin.math.roundToInt
+
+// LINT.IfChange
+class PeakRefreshRateSwitchPreference :
+ SwitchPreference("peak_refresh_rate", R.string.peak_refresh_rate_title),
+ SwitchPreferenceBinding,
+ PreferenceAvailabilityProvider,
+ PreferenceSummaryProvider,
+ PreferenceLifecycleProvider {
+
+ private var propertiesChangedListener: DeviceConfig.OnPropertiesChangedListener? = null
+
+ override fun storage(context: Context) = SettingsSystemStore.get(context)
+
+ override fun isAvailable(context: Context) =
+ context.resources.getBoolean(R.bool.config_show_smooth_display) &&
+ (getPeakRefreshRate(context) > DEFAULT_REFRESH_RATE)
+
+ override fun getSummary(context: Context) =
+ context.getString(
+ R.string.peak_refresh_rate_summary,
+ getPeakRefreshRate(context).roundToInt(),
+ )
+
+ override fun onStart(context: PreferenceLifecycleContext) {
+ val listener =
+ object : DeviceConfig.OnPropertiesChangedListener {
+ // Got notified if any property has been changed in NAMESPACE_DISPLAY_MANAGER. The
+ // KEY_PEAK_REFRESH_RATE_DEFAULT value could be added, changed, removed or
+ // unchanged.
+ // Just force a UI update for any case.
+ override fun onPropertiesChanged(properties: DeviceConfig.Properties) =
+ context.notifyPreferenceChange(this@PeakRefreshRateSwitchPreference)
+ }
+
+ propertiesChangedListener = listener
+
+ DeviceConfig.addOnPropertiesChangedListener(
+ DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
+ HandlerExecutor.main,
+ listener,
+ )
+ }
+
+ override fun onStop(context: PreferenceLifecycleContext) {
+ propertiesChangedListener?.let {
+ DeviceConfig.removeOnPropertiesChangedListener(it)
+ propertiesChangedListener = null
+ }
+ }
+
+ private fun getPeakRefreshRate(context: Context): Float =
+ Math.round(
+ when {
+ Flags.backUpSmoothDisplayAndForcePeakRefreshRate() ->
+ findHighestRefreshRateAmongAllDisplays(context)
+ else -> findHighestRefreshRateForDefaultDisplay(context)
+ }
+ )
+ .toFloat()
+
+ private fun getDefaultPeakRefreshRate(context: Context): Float {
+ var defaultPeakRefreshRate =
+ DeviceConfig.getFloat(
+ DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
+ DisplayManager.DeviceConfig.KEY_PEAK_REFRESH_RATE_DEFAULT,
+ INVALIDATE_REFRESH_RATE,
+ )
+
+ if (defaultPeakRefreshRate == INVALIDATE_REFRESH_RATE) {
+ defaultPeakRefreshRate =
+ context.resources
+ .getInteger(com.android.internal.R.integer.config_defaultPeakRefreshRate)
+ .toFloat()
+ }
+
+ Log.d(TAG, "DeviceConfig getDefaultPeakRefreshRate : $defaultPeakRefreshRate")
+ return defaultPeakRefreshRate
+ }
+
+ companion object {
+ private const val TAG: String = "PeakRefreshRateSwitchPreference"
+ private const val INVALIDATE_REFRESH_RATE: Float = -1f
+ }
+}
+// LINT.ThenChange(PeakRefreshRatePreferenceController.java)
diff --git a/src/com/android/settings/display/ScreenResolutionFragment.java b/src/com/android/settings/display/ScreenResolutionFragment.java
index a2ad25f..d9718f6 100644
--- a/src/com/android/settings/display/ScreenResolutionFragment.java
+++ b/src/com/android/settings/display/ScreenResolutionFragment.java
@@ -325,11 +325,10 @@
}
final DisplayDensityUtils density = new DisplayDensityUtils(mContext);
- final int currentIndex = density.getCurrentIndexForDefaultDisplay();
- final int defaultDensity = density.getDefaultDensityForDefaultDisplay();
+ final int currentIndex = density.getCurrentIndex();
+ final int defaultDensity = density.getDefaultDensity();
- if (density.getDefaultDisplayDensityValues()[mCurrentIndex]
- == density.getDefaultDensityForDefaultDisplay()) {
+ if (density.getValues()[mCurrentIndex] == density.getDefaultDensity()) {
return;
}
@@ -373,20 +372,19 @@
/* If current density is the same as a default density of other resolutions,
* then mCurrentIndex may be out of boundary.
*/
- if (density.getDefaultDisplayDensityValues().length <= mCurrentIndex) {
- mCurrentIndex = density.getCurrentIndexForDefaultDisplay();
+ if (density.getValues().length <= mCurrentIndex) {
+ mCurrentIndex = density.getCurrentIndex();
}
- if (density.getDefaultDisplayDensityValues()[mCurrentIndex]
- != density.getDefaultDensityForDefaultDisplay()) {
+ if (density.getValues()[mCurrentIndex] != density.getDefaultDensity()) {
density.setForcedDisplayDensity(mCurrentIndex);
}
- mDefaultDensity = density.getDefaultDensityForDefaultDisplay();
+ mDefaultDensity = density.getDefaultDensity();
}
private boolean isDensityChanged() {
final DisplayDensityUtils density = new DisplayDensityUtils(mContext);
- if (density.getDefaultDensityForDefaultDisplay() == mDefaultDensity) {
+ if (density.getDefaultDensity() == mDefaultDensity) {
return false;
}
diff --git a/src/com/android/settings/display/ScreenZoomPreference.java b/src/com/android/settings/display/ScreenZoomPreference.java
index af77a0e..f47d7da 100644
--- a/src/com/android/settings/display/ScreenZoomPreference.java
+++ b/src/com/android/settings/display/ScreenZoomPreference.java
@@ -36,13 +36,13 @@
android.R.attr.preferenceStyle));
final DisplayDensityUtils density = new DisplayDensityUtils(context);
- final int defaultIndex = density.getCurrentIndexForDefaultDisplay();
+ final int defaultIndex = density.getCurrentIndex();
if (defaultIndex < 0) {
setVisible(false);
setEnabled(false);
} else if (TextUtils.isEmpty(getSummary())) {
- final String[] entries = density.getDefaultDisplayDensityEntries();
- final int currentIndex = density.getCurrentIndexForDefaultDisplay();
+ final String[] entries = density.getEntries();
+ final int currentIndex = density.getCurrentIndex();
setSummary(entries[currentIndex]);
}
}
diff --git a/src/com/android/settings/display/darkmode/DarkModePreference.java b/src/com/android/settings/display/darkmode/DarkModePreference.java
index a1440ee..ff21131 100644
--- a/src/com/android/settings/display/darkmode/DarkModePreference.java
+++ b/src/com/android/settings/display/darkmode/DarkModePreference.java
@@ -14,7 +14,6 @@
package com.android.settings.display.darkmode;
-import android.app.UiModeManager;
import android.content.Context;
import android.content.res.Configuration;
import android.os.PowerManager;
@@ -28,39 +27,44 @@
*/
public class DarkModePreference extends PrimarySwitchPreference {
- private UiModeManager mUiModeManager;
private DarkModeObserver mDarkModeObserver;
- private PowerManager mPowerManager;
- private Runnable mCallback;
-
- private TimeFormatter mFormat;
+ private boolean isCatalystEnabled;
public DarkModePreference(Context context, AttributeSet attrs) {
super(context, attrs);
- mDarkModeObserver = new DarkModeObserver(context);
- mUiModeManager = context.getSystemService(UiModeManager.class);
- mPowerManager = context.getSystemService(PowerManager.class);
- mFormat = new TimeFormatter(context);
- mCallback = () -> {
- final boolean batterySaver = mPowerManager.isPowerSaveMode();
- final boolean active = (getContext().getResources().getConfiguration().uiMode
- & Configuration.UI_MODE_NIGHT_YES) != 0;
- setSwitchEnabled(!batterySaver);
- updateSummary(batterySaver, active);
- };
- mDarkModeObserver.subscribe(mCallback);
+ }
+
+ /**
+ * Sets if catalyst is enabled on the preference.
+ */
+ public void setCatalystEnabled(boolean catalystEnabled) {
+ isCatalystEnabled = catalystEnabled;
}
@Override
public void onAttached() {
super.onAttached();
- mDarkModeObserver.subscribe(mCallback);
+ if (!isCatalystEnabled) {
+ Context context = getContext();
+ mDarkModeObserver = new DarkModeObserver(context);
+ Runnable callback = () -> {
+ PowerManager powerManager = context.getSystemService(PowerManager.class);
+ final boolean batterySaver = powerManager.isPowerSaveMode();
+ final boolean active = (context.getResources().getConfiguration().uiMode
+ & Configuration.UI_MODE_NIGHT_YES) != 0;
+ setSwitchEnabled(!batterySaver);
+ updateSummary(batterySaver, active);
+ };
+ mDarkModeObserver.subscribe(callback);
+ }
}
@Override
public void onDetached() {
super.onDetached();
- mDarkModeObserver.unsubscribe();
+ if (!isCatalystEnabled) {
+ mDarkModeObserver.unsubscribe();
+ }
}
private void updateSummary(boolean batterySaver, boolean active) {
diff --git a/src/com/android/settings/display/darkmode/DarkModeScreen.kt b/src/com/android/settings/display/darkmode/DarkModeScreen.kt
new file mode 100644
index 0000000..263958c
--- /dev/null
+++ b/src/com/android/settings/display/darkmode/DarkModeScreen.kt
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.display.darkmode
+
+import android.app.UiModeManager
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.content.IntentFilter
+import android.content.res.Configuration
+import android.os.PowerManager
+import androidx.preference.Preference
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.PrimarySwitchPreference
+import com.android.settingslib.datastore.KeyValueStore
+import com.android.settingslib.datastore.NoOpKeyedObservable
+import com.android.settingslib.metadata.BooleanValue
+import com.android.settingslib.metadata.PersistentPreference
+import com.android.settingslib.metadata.PreferenceLifecycleContext
+import com.android.settingslib.metadata.PreferenceLifecycleProvider
+import com.android.settingslib.metadata.PreferenceMetadata
+import com.android.settingslib.metadata.PreferenceSummaryProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenBinding
+import com.android.settingslib.preference.PreferenceScreenCreator
+import java.util.WeakHashMap
+
+// LINT.IfChange
+@ProvidePreferenceScreen
+class DarkModeScreen :
+ PreferenceScreenCreator,
+ PreferenceScreenBinding,
+ PersistentPreference<Boolean>,
+ BooleanValue,
+ PreferenceSummaryProvider,
+ PreferenceLifecycleProvider {
+
+ /**
+ * States for different screens.
+ *
+ * The "Dark mode" appears in several screens. And in Android split-screen mode, more than one
+ * "Dark mode" settings could be displayed at the same time. As [PreferenceScreenCreator] works
+ * like singleton, we need to register different broadcast receivers for different screens.
+ */
+ private val fragmentStates = WeakHashMap<PreferenceLifecycleContext, FragmentState>()
+
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.dark_ui_mode
+
+ override val keywords: Int
+ get() = R.string.keywords_dark_ui_mode
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystDarkUiMode()
+
+ override fun fragmentClass() = DarkModeSettingsFragment::class.java
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ override fun storage(context: Context): KeyValueStore = DarkModeStorage(context)
+
+ override fun createWidget(context: Context) = PrimarySwitchPreference(context)
+
+ override fun bind(preference: Preference, metadata: PreferenceMetadata) {
+ super.bind(preference, metadata)
+ if (preference is DarkModePreference) preference.setCatalystEnabled(true)
+ val context = preference.context
+ val primarySwitchPreference = preference as PrimarySwitchPreference
+ primarySwitchPreference.isSwitchEnabled = !context.isPowerSaveMode()
+ primarySwitchPreference.isChecked = context.isDarkMode()
+ }
+
+ override fun isEnabled(context: Context) = !context.isPowerSaveMode()
+
+ override fun getSummary(context: Context): CharSequence? {
+ val active = context.isDarkMode()
+ return when {
+ !context.isPowerSaveMode() -> AutoDarkTheme.getStatus(context, active)
+ active -> context.getString(R.string.dark_ui_mode_disabled_summary_dark_theme_on)
+ else -> context.getString(R.string.dark_ui_mode_disabled_summary_dark_theme_off)
+ }
+ }
+
+ override fun onStart(context: PreferenceLifecycleContext) {
+ val broadcastReceiver =
+ object : BroadcastReceiver() {
+ override fun onReceive(receiverContext: Context, intent: Intent) {
+ context.notifyPreferenceChange(this@DarkModeScreen)
+ }
+ }
+ context.registerReceiver(
+ broadcastReceiver,
+ IntentFilter(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED),
+ )
+
+ val darkModeObserver = DarkModeObserver(context)
+ darkModeObserver.subscribe { context.notifyPreferenceChange(this@DarkModeScreen) }
+
+ fragmentStates[context] = FragmentState(broadcastReceiver, darkModeObserver)
+ }
+
+ override fun onStop(context: PreferenceLifecycleContext) {
+ fragmentStates.remove(context)?.run {
+ context.unregisterReceiver(broadcastReceiver)
+ darkModeObserver.unsubscribe()
+ }
+ }
+
+ private class FragmentState(
+ val broadcastReceiver: BroadcastReceiver,
+ val darkModeObserver: DarkModeObserver,
+ )
+
+ /**
+ * Abstract storage for dark mode settings.
+ *
+ * The underlying storage is manipulated by [UiModeManager] but we do not need to worry about
+ * the details. Additionally, the observer is for UI purpose only right now, so use
+ * [NoOpKeyedObservable].
+ */
+ @Suppress("UNCHECKED_CAST")
+ private class DarkModeStorage(private val context: Context) :
+ NoOpKeyedObservable<String>(), KeyValueStore {
+
+ override fun contains(key: String) = key == KEY
+
+ override fun <T : Any> getValue(key: String, valueType: Class<T>) =
+ when {
+ key == KEY && valueType == Boolean::class.javaObjectType ->
+ context.isDarkMode() as T
+ else -> null
+ }
+
+ override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) {
+ if (key == KEY && value is Boolean) {
+ context.getSystemService(UiModeManager::class.java)?.setNightModeActivated(value)
+ }
+ }
+ }
+
+ companion object {
+ const val KEY = "dark_ui_mode"
+
+ private fun Context.isPowerSaveMode() =
+ getSystemService(PowerManager::class.java)?.isPowerSaveMode == true
+
+ private fun Context.isDarkMode() =
+ (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_YES) != 0
+ }
+}
+// LINT.ThenChange(../DarkUIPreferenceController.java)
diff --git a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
index e922f70..28d7d58 100644
--- a/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetail.java
@@ -26,13 +26,10 @@
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.UserHandle;
-import android.text.TextUtils;
import android.util.Log;
import android.view.View;
-import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
@@ -48,7 +45,6 @@
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.EntityHeaderController;
-import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -67,9 +63,7 @@
* 2. Battery related controls for app(i.e uninstall, force stop)
*/
public class AdvancedPowerUsageDetail extends DashboardFragment
- implements ButtonActionDialogFragment.AppButtonsDialogListener,
- Preference.OnPreferenceClickListener,
- Preference.OnPreferenceChangeListener {
+ implements ButtonActionDialogFragment.AppButtonsDialogListener {
public static final String TAG = "AdvancedPowerDetail";
public static final String EXTRA_UID = "extra_uid";
public static final String EXTRA_PACKAGE_NAME = "extra_package_name";
@@ -86,7 +80,8 @@
public static final String EXTRA_POWER_USAGE_AMOUNT = "extra_power_usage_amount";
private static final String KEY_PREF_HEADER = "header_view";
- private static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage";
+ private static final String KEY_BACKGROUND_USAGE_ALLOWABILITY_CATEGORY =
+ "background_usage_allowability_category";
private static final int REQUEST_UNINSTALL = 0;
private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;
@@ -96,11 +91,9 @@
private AppButtonsPreferenceController mAppButtonsPreferenceController;
private PowerUsageTimeController mPowerUsageTimeController;
- @VisibleForTesting LayoutPreference mHeaderPreference;
@VisibleForTesting ApplicationsState mState;
@VisibleForTesting ApplicationsState.AppEntry mAppEntry;
@VisibleForTesting BatteryOptimizeUtils mBatteryOptimizeUtils;
- @VisibleForTesting PrimarySwitchPreference mAllowBackgroundUsagePreference;
@VisibleForTesting @BatteryOptimizeUtils.OptimizationMode
int mOptimizationMode = BatteryOptimizeUtils.MODE_UNKNOWN;
@@ -242,17 +235,11 @@
public void onAttach(Activity activity) {
super.onAttach(activity);
+ final Bundle bundle = getArguments();
+ final int uid = bundle.getInt(EXTRA_UID, 0);
+ final String packageName = bundle.getString(EXTRA_PACKAGE_NAME);
+ mBatteryOptimizeUtils = new BatteryOptimizeUtils(getContext(), uid, packageName);
mState = ApplicationsState.getInstance(getActivity().getApplication());
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
- onCreateBackgroundUsageState(packageName);
- mHeaderPreference = findPreference(KEY_PREF_HEADER);
-
if (packageName != null) {
mAppEntry = mState.getEntry(packageName, UserHandle.myUserId());
}
@@ -264,7 +251,6 @@
initHeader();
mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
- initFooter();
mLogStringBuilder = new StringBuilder("onResume mode = ").append(mOptimizationMode);
}
@@ -299,7 +285,8 @@
@VisibleForTesting
void initHeader() {
- final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
+ final LayoutPreference headerPreference = findPreference(KEY_PREF_HEADER);
+ final View appSnippet = headerPreference.findViewById(R.id.entity_header);
final Activity context = getActivity();
final Bundle bundle = getArguments();
EntityHeaderController controller =
@@ -340,31 +327,6 @@
controller.done(true /* rebindActions */);
}
- @VisibleForTesting
- void initFooter() {
- final String stateString;
- final String detailInfoString;
- final Context context = getContext();
-
- if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
- // Present optimized only string when the package name is invalid.
- stateString = context.getString(R.string.manager_battery_usage_optimized_only);
- detailInfoString =
- context.getString(R.string.manager_battery_usage_footer_limited, stateString);
- } else if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
- // Present unrestricted only string when the package is system or default active app.
- stateString = context.getString(R.string.manager_battery_usage_unrestricted_only);
- detailInfoString =
- context.getString(R.string.manager_battery_usage_footer_limited, stateString);
- } else {
- // Present default string to normal app.
- detailInfoString =
- context.getString(
- R.string.manager_battery_usage_allow_background_usage_summary);
- }
- mAllowBackgroundUsagePreference.setSummary(detailInfoString);
- }
-
@Override
public int getMetricsCategory() {
return SettingsEnums.FUELGAUGE_POWER_USAGE_DETAIL;
@@ -384,7 +346,6 @@
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final Bundle bundle = getArguments();
- final int uid = bundle.getInt(EXTRA_UID, 0);
final String packageName = bundle.getString(EXTRA_PACKAGE_NAME);
mAppButtonsPreferenceController =
@@ -401,7 +362,12 @@
controllers.add(mPowerUsageTimeController);
}
controllers.add(mAppButtonsPreferenceController);
- controllers.add(new AllowBackgroundPreferenceController(context, uid, packageName));
+ controllers.add(
+ new BackgroundUsageAllowabilityPreferenceController(
+ context,
+ /* dashboardFragment= */ this,
+ KEY_BACKGROUND_USAGE_ALLOWABILITY_CATEGORY,
+ mBatteryOptimizeUtils));
return controllers;
}
@@ -421,34 +387,6 @@
}
}
- @Override
- public boolean onPreferenceClick(Preference preference) {
- if (!(preference instanceof PrimarySwitchPreference)
- || !TextUtils.equals(preference.getKey(), KEY_ALLOW_BACKGROUND_USAGE)) {
- return false;
- }
- PowerBackgroundUsageDetail.startPowerBackgroundUsageDetailPage(
- getContext(), getArguments());
- return true;
- }
-
- @Override
- public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
- if (!(preference instanceof PrimarySwitchPreference)
- || !TextUtils.equals(preference.getKey(), KEY_ALLOW_BACKGROUND_USAGE)) {
- return false;
- }
- if (newValue instanceof Boolean) {
- final boolean isAllowBackgroundUsage = (boolean) newValue;
- mBatteryOptimizeUtils.setAppUsageState(
- isAllowBackgroundUsage
- ? BatteryOptimizeUtils.MODE_OPTIMIZED
- : BatteryOptimizeUtils.MODE_RESTRICTED,
- Action.APPLY);
- }
- return true;
- }
-
private void logMetricCategory(int currentOptimizeMode) {
if (currentOptimizeMode == mOptimizationMode) {
return;
@@ -482,16 +420,4 @@
getArguments().getInt(EXTRA_POWER_USAGE_AMOUNT));
});
}
-
- private void onCreateBackgroundUsageState(String packageName) {
- mAllowBackgroundUsagePreference = findPreference(KEY_ALLOW_BACKGROUND_USAGE);
- if (mAllowBackgroundUsagePreference != null) {
- mAllowBackgroundUsagePreference.setOnPreferenceClickListener(this);
- mAllowBackgroundUsagePreference.setOnPreferenceChangeListener(this);
- }
-
- mBatteryOptimizeUtils =
- new BatteryOptimizeUtils(
- getContext(), getArguments().getInt(EXTRA_UID), packageName);
- }
}
diff --git a/src/com/android/settings/fuelgauge/AllowBackgroundPreferenceController.java b/src/com/android/settings/fuelgauge/AllowBackgroundPreferenceController.java
deleted file mode 100644
index 52cec795..0000000
--- a/src/com/android/settings/fuelgauge/AllowBackgroundPreferenceController.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.PrimarySwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.widget.MainSwitchPreference;
-
-/** Controller to update the app background usage state */
-public class AllowBackgroundPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
-
- private static final String TAG = "AllowBackgroundPreferenceController";
-
- @VisibleForTesting static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage";
-
- @VisibleForTesting BatteryOptimizeUtils mBatteryOptimizeUtils;
-
- public AllowBackgroundPreferenceController(Context context, int uid, String packageName) {
- super(context);
- mBatteryOptimizeUtils = new BatteryOptimizeUtils(context, uid, packageName);
- }
-
- private void setChecked(Preference preference, boolean checked) {
- if (preference instanceof PrimarySwitchPreference) {
- ((PrimarySwitchPreference) preference).setChecked(checked);
- } else if (preference instanceof MainSwitchPreference) {
- ((MainSwitchPreference) preference).setChecked(checked);
- }
- }
-
- private void setEnabled(Preference preference, boolean enabled) {
- if (preference instanceof PrimarySwitchPreference) {
- ((PrimarySwitchPreference) preference).setEnabled(enabled);
- ((PrimarySwitchPreference) preference).setSwitchEnabled(enabled);
- } else if (preference instanceof MainSwitchPreference) {
- ((MainSwitchPreference) preference).setEnabled(enabled);
- }
- }
-
- @Override
- public void updateState(Preference preference) {
- setEnabled(preference, mBatteryOptimizeUtils.isOptimizeModeMutable());
-
- final boolean isAllowBackground =
- mBatteryOptimizeUtils.getAppOptimizationMode()
- != BatteryOptimizeUtils.MODE_RESTRICTED;
- setChecked(preference, isAllowBackground);
- }
-
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_ALLOW_BACKGROUND_USAGE;
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- return getPreferenceKey().equals(preference.getKey());
- }
-}
diff --git a/src/com/android/settings/fuelgauge/BackgroundUsageAllowabilityPreferenceController.java b/src/com/android/settings/fuelgauge/BackgroundUsageAllowabilityPreferenceController.java
new file mode 100644
index 0000000..bce439b
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BackgroundUsageAllowabilityPreferenceController.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.PrimarySwitchPreference;
+
+/** Controller to update the manage battery usage preference in App Battery Usage page */
+public class BackgroundUsageAllowabilityPreferenceController extends BasePreferenceController
+ implements PreferenceControllerMixin {
+
+ @VisibleForTesting
+ static final String KEY_BACKGROUND_USAGE_ALLOWABILITY_SWITCH =
+ "background_usage_allowability_switch";
+
+ private final BatteryOptimizeUtils mBatteryOptimizeUtils;
+ private final DashboardFragment mDashboardFragment;
+ @Nullable @VisibleForTesting PrimarySwitchPreference mBackgroundUsageAllowabilityPreference;
+
+ public BackgroundUsageAllowabilityPreferenceController(
+ @NonNull Context context,
+ @NonNull DashboardFragment dashboardFragment,
+ @NonNull String preferenceKey,
+ @NonNull BatteryOptimizeUtils batteryOptimizeUtils) {
+ super(context, preferenceKey);
+ mDashboardFragment = dashboardFragment;
+ mBatteryOptimizeUtils = batteryOptimizeUtils;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(@NonNull Preference preference) {
+ updatePreferences(mBatteryOptimizeUtils.getAppOptimizationMode());
+ }
+
+ @Override
+ public void displayPreference(@NonNull PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mBackgroundUsageAllowabilityPreference =
+ screen.findPreference(KEY_BACKGROUND_USAGE_ALLOWABILITY_SWITCH);
+ initPreferences();
+ }
+
+ @VisibleForTesting
+ void initPreferences() {
+ if (mBackgroundUsageAllowabilityPreference == null) {
+ return;
+ }
+ final String stateString;
+ final String detailInfoString;
+ boolean isPreferenceEnabled = true;
+ if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
+ // Present "Optimized" only string if the package name is invalid.
+ stateString = mContext.getString(R.string.manager_battery_usage_optimized_only);
+ detailInfoString =
+ mContext.getString(R.string.manager_battery_usage_footer_limited, stateString);
+ isPreferenceEnabled = false;
+ } else if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
+ // Present "Unrestricted" only string if the package is system important apps.
+ stateString = mContext.getString(R.string.manager_battery_usage_unrestricted_only);
+ detailInfoString =
+ mContext.getString(R.string.manager_battery_usage_footer_limited, stateString);
+ isPreferenceEnabled = false;
+ } else {
+ // Present default string to normal app.
+ detailInfoString =
+ mContext.getString(
+ R.string.manager_battery_usage_allow_background_usage_summary);
+ }
+ mBackgroundUsageAllowabilityPreference.setEnabled(isPreferenceEnabled);
+ mBackgroundUsageAllowabilityPreference.setSwitchEnabled(isPreferenceEnabled);
+ mBackgroundUsageAllowabilityPreference.setSummary(detailInfoString);
+ if (isPreferenceEnabled) {
+ mBackgroundUsageAllowabilityPreference.setOnPreferenceClickListener(
+ preference -> {
+ PowerBackgroundUsageDetail.startPowerBackgroundUsageDetailPage(
+ mContext, mDashboardFragment.getArguments());
+ return true;
+ });
+ mBackgroundUsageAllowabilityPreference.setOnPreferenceChangeListener(
+ (preference, isAllowBackground) -> {
+ handleBatteryOptimizeModeUpdated(
+ (boolean) isAllowBackground
+ ? BatteryOptimizeUtils.MODE_OPTIMIZED
+ : BatteryOptimizeUtils.MODE_RESTRICTED);
+ return true;
+ });
+ }
+ }
+
+ @VisibleForTesting
+ void handleBatteryOptimizeModeUpdated(int newBatteryOptimizeMode) {
+ if (mBatteryOptimizeUtils.getAppOptimizationMode() == newBatteryOptimizeMode) {
+ Log.w(TAG, "ignore same mode for: " + mBatteryOptimizeUtils.getPackageName());
+ return;
+ }
+ mBatteryOptimizeUtils.setAppUsageState(
+ newBatteryOptimizeMode, BatteryOptimizeHistoricalLogEntry.Action.APPLY);
+ updatePreferences(newBatteryOptimizeMode);
+ }
+
+ @VisibleForTesting
+ void updatePreferences(int optimizationMode) {
+ if (mBackgroundUsageAllowabilityPreference == null) {
+ return;
+ }
+ mBackgroundUsageAllowabilityPreference.setChecked(
+ optimizationMode != BatteryOptimizeUtils.MODE_RESTRICTED);
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
index 5822397..651a1b2 100644
--- a/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
+++ b/src/com/android/settings/fuelgauge/BatteryBackupHelper.java
@@ -196,7 +196,9 @@
appOptModeMap.containsKey(info.uid)
? (int) appOptModeMap.get(info.uid).getResetOptimizationMode()
: BatteryOptimizeUtils.getAppOptimizationMode(
- mode, allowlistedApps.contains(info.packageName));
+ mode,
+ allowlistedApps.contains(info.packageName),
+ /* ignoreUnknownMode= */ false);
// Ignores default optimized/unknown state or system/default apps.
if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
|| optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizationModePreferenceController.java b/src/com/android/settings/fuelgauge/BatteryOptimizationModePreferenceController.java
new file mode 100644
index 0000000..0a4cbac
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizationModePreferenceController.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+import android.content.Context;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.VisibleForTesting;
+import androidx.preference.Preference;
+import androidx.preference.PreferenceScreen;
+
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.widget.MainSwitchPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+/** Controller to update the app background usage mode state in Allow background usage page */
+public class BatteryOptimizationModePreferenceController extends BasePreferenceController
+ implements PreferenceControllerMixin {
+
+ @VisibleForTesting
+ static final String KEY_BACKGROUND_USAGE_ALLOWABILITY_SWITCH =
+ "background_usage_allowability_switch";
+
+ @VisibleForTesting static final String KEY_OPTIMIZED_PREF = "optimized_preference";
+ @VisibleForTesting static final String KEY_UNRESTRICTED_PREF = "unrestricted_preference";
+
+ private final BatteryOptimizeUtils mBatteryOptimizeUtils;
+ @Nullable @VisibleForTesting MainSwitchPreference mBackgroundUsageAllowabilityPreference;
+ @Nullable @VisibleForTesting SelectorWithWidgetPreference mOptimizedPreference;
+ @Nullable @VisibleForTesting SelectorWithWidgetPreference mUnrestrictedPreference;
+
+ public BatteryOptimizationModePreferenceController(
+ @NonNull Context context,
+ @NonNull String preferenceKey,
+ @NonNull BatteryOptimizeUtils batteryOptimizeUtils) {
+ super(context, preferenceKey);
+ mBatteryOptimizeUtils = batteryOptimizeUtils;
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return AVAILABLE;
+ }
+
+ @Override
+ public void updateState(@NonNull Preference preference) {
+ updatePreferences(mBatteryOptimizeUtils.getAppOptimizationMode());
+ }
+
+ @Override
+ public void displayPreference(@NonNull PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mBackgroundUsageAllowabilityPreference =
+ screen.findPreference(KEY_BACKGROUND_USAGE_ALLOWABILITY_SWITCH);
+ mOptimizedPreference = screen.findPreference(KEY_OPTIMIZED_PREF);
+ mUnrestrictedPreference = screen.findPreference(KEY_UNRESTRICTED_PREF);
+ initPreferences();
+ }
+
+ @VisibleForTesting
+ void initPreferences() {
+ if (mBackgroundUsageAllowabilityPreference == null
+ || mOptimizedPreference == null
+ || mUnrestrictedPreference == null) {
+ return;
+ }
+ final boolean isEnabled = mBatteryOptimizeUtils.isOptimizeModeMutable();
+ mBackgroundUsageAllowabilityPreference.setEnabled(isEnabled);
+ mOptimizedPreference.setEnabled(isEnabled);
+ mUnrestrictedPreference.setEnabled(isEnabled);
+ if (isEnabled) {
+ mBackgroundUsageAllowabilityPreference.setOnPreferenceChangeListener(
+ (preference, isAllowBackground) -> {
+ handleBatteryOptimizeModeUpdated(
+ (boolean) isAllowBackground
+ ? BatteryOptimizeUtils.MODE_OPTIMIZED
+ : BatteryOptimizeUtils.MODE_RESTRICTED);
+ return true;
+ });
+ mOptimizedPreference.setOnPreferenceClickListener(
+ preference -> {
+ handleBatteryOptimizeModeUpdated(BatteryOptimizeUtils.MODE_OPTIMIZED);
+ return true;
+ });
+ mUnrestrictedPreference.setOnPreferenceClickListener(
+ preference -> {
+ handleBatteryOptimizeModeUpdated(BatteryOptimizeUtils.MODE_UNRESTRICTED);
+ return true;
+ });
+ }
+ }
+
+ @VisibleForTesting
+ void updatePreferences(int optimizationMode) {
+ if (mBackgroundUsageAllowabilityPreference == null
+ || mOptimizedPreference == null
+ || mUnrestrictedPreference == null) {
+ return;
+ }
+ final boolean isAllowBackground = optimizationMode != BatteryOptimizeUtils.MODE_RESTRICTED;
+ mBackgroundUsageAllowabilityPreference.setChecked(isAllowBackground);
+ mOptimizedPreference.setEnabled(isAllowBackground);
+ mUnrestrictedPreference.setEnabled(isAllowBackground);
+ mOptimizedPreference.setChecked(optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED);
+ mUnrestrictedPreference.setChecked(
+ optimizationMode == BatteryOptimizeUtils.MODE_UNRESTRICTED);
+ }
+
+ @VisibleForTesting
+ void handleBatteryOptimizeModeUpdated(int newBatteryOptimizeMode) {
+ if (mBatteryOptimizeUtils.getAppOptimizationMode() == newBatteryOptimizeMode) {
+ Log.w(TAG, "ignore same mode for: " + mBatteryOptimizeUtils.getPackageName());
+ return;
+ }
+ mBatteryOptimizeUtils.setAppUsageState(
+ newBatteryOptimizeMode, BatteryOptimizeHistoricalLogEntry.Action.APPLY);
+ updatePreferences(newBatteryOptimizeMode);
+ }
+}
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
index 3233f0d..6c95823 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizeUtils.java
@@ -100,7 +100,8 @@
/** Gets the {@link OptimizationMode} based on mode and allowed list. */
@OptimizationMode
- public static int getAppOptimizationMode(int mode, boolean isAllowListed) {
+ public static int getAppOptimizationMode(
+ int mode, boolean isAllowListed, boolean ignoreUnknownMode) {
if (!isAllowListed && mode == AppOpsManager.MODE_IGNORED) {
return MODE_RESTRICTED;
} else if (isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
@@ -108,13 +109,15 @@
} else if (!isAllowListed && mode == AppOpsManager.MODE_ALLOWED) {
return MODE_OPTIMIZED;
} else {
- return MODE_UNKNOWN;
+ // MODE_UNKNOWN = isAllowListed + AppOpsManager.MODE_IGNORED
+ // Return Unrestricted mode for Unknown mode since it is in allowlist.
+ return ignoreUnknownMode ? MODE_UNRESTRICTED : MODE_UNKNOWN;
}
}
/** Gets the {@link OptimizationMode} for associated app. */
@OptimizationMode
- public int getAppOptimizationMode(boolean refreshList) {
+ public int getAppOptimizationMode(boolean refreshList, boolean ignoreUnknownMode) {
if (refreshList) {
mPowerAllowListBackend.refreshList();
}
@@ -127,13 +130,13 @@
String.format(
"refresh %s state, allowlisted = %s, mode = %d",
mPackageName, mAllowListed, mMode));
- return getAppOptimizationMode(mMode, mAllowListed);
+ return getAppOptimizationMode(mMode, mAllowListed, ignoreUnknownMode);
}
/** Gets the {@link OptimizationMode} for associated app. */
@OptimizationMode
public int getAppOptimizationMode() {
- return getAppOptimizationMode(true);
+ return getAppOptimizationMode(/* refreshList= */ true, /* ignoreUnknownMode= */ true);
}
/** Resets optimization mode for all applications. */
@@ -246,10 +249,11 @@
@OptimizationMode
final int optimizationMode =
getAppOptimizationMode(
- mode, allowlistBackend.isAllowlisted(info.packageName, info.uid));
- // Ignores default optimized/unknown state or system/default apps.
+ mode,
+ allowlistBackend.isAllowlisted(info.packageName, info.uid),
+ /* ignoreUnknownMode= */ false);
+ // Ignores default optimized state or system/default apps.
if (optimizationMode == MODE_OPTIMIZED
- || optimizationMode == MODE_UNKNOWN
|| isSystemOrDefaultApp(
context, allowlistBackend, info.packageName, info.uid)) {
continue;
@@ -374,7 +378,8 @@
"\tStandbyMode: %s, allowListed: %s, mode: %s",
appStandbyMode,
allowListed,
- getAppOptimizationMode(appStandbyMode, allowListed));
+ getAppOptimizationMode(
+ appStandbyMode, allowListed, /* ignoreUnknownMode= */ false));
}
private static @DataChangeReason int toChangeReason(Action action) {
diff --git a/src/com/android/settings/fuelgauge/BatterySettingsStorage.java b/src/com/android/settings/fuelgauge/BatterySettingsStorage.java
index 33a8025..eeebbec 100644
--- a/src/com/android/settings/fuelgauge/BatterySettingsStorage.java
+++ b/src/com/android/settings/fuelgauge/BatterySettingsStorage.java
@@ -347,7 +347,9 @@
appOptModeMap.containsKey(info.uid)
? (int) appOptModeMap.get(info.uid).getResetOptimizationMode()
: BatteryOptimizeUtils.getAppOptimizationMode(
- mode, mAllowlistedApps.contains(info.packageName));
+ mode,
+ mAllowlistedApps.contains(info.packageName),
+ /* ignoreUnknownMode= */ false);
// Ignores default optimized/unknown state or system/default apps.
if (optimizationMode == BatteryOptimizeUtils.MODE_OPTIMIZED
|| optimizationMode == BatteryOptimizeUtils.MODE_UNKNOWN
diff --git a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java b/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
deleted file mode 100644
index a26ab7a..0000000
--- a/src/com/android/settings/fuelgauge/OptimizedPreferenceController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.widget.SelectorWithWidgetPreference;
-
-public class OptimizedPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
-
- private static final String TAG = "OPTIMIZED_PREF";
-
- @VisibleForTesting static final String KEY_OPTIMIZED_PREF = "optimized_preference";
- @VisibleForTesting BatteryOptimizeUtils mBatteryOptimizeUtils;
-
- public OptimizedPreferenceController(Context context, int uid, String packageName) {
- super(context);
- mBatteryOptimizeUtils = new BatteryOptimizeUtils(context, uid, packageName);
- }
-
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- preference.setEnabled(mBatteryOptimizeUtils.isSelectorPreferenceEnabled());
-
- final boolean isOptimized =
- mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()
- || mBatteryOptimizeUtils.getAppOptimizationMode()
- == BatteryOptimizeUtils.MODE_OPTIMIZED;
- ((SelectorWithWidgetPreference) preference).setChecked(isOptimized);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_OPTIMIZED_PREF;
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- return getPreferenceKey().equals(preference.getKey());
- }
-}
diff --git a/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java b/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java
index e59cc4ad..dadf2e8 100644
--- a/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java
+++ b/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetail.java
@@ -24,11 +24,8 @@
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
-import android.text.TextUtils;
import android.util.Log;
import android.view.View;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
import androidx.annotation.VisibleForTesting;
@@ -44,8 +41,6 @@
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.LayoutPreference;
-import com.android.settingslib.widget.MainSwitchPreference;
-import com.android.settingslib.widget.SelectorWithWidgetPreference;
import java.util.ArrayList;
import java.util.List;
@@ -53,8 +48,7 @@
import java.util.concurrent.Executors;
/** Allow background usage fragment for each app */
-public class PowerBackgroundUsageDetail extends DashboardFragment
- implements SelectorWithWidgetPreference.OnClickListener, OnCheckedChangeListener {
+public class PowerBackgroundUsageDetail extends DashboardFragment {
private static final String TAG = "PowerBackgroundUsageDetail";
public static final String EXTRA_UID = "extra_uid";
@@ -63,21 +57,15 @@
public static final String EXTRA_POWER_USAGE_AMOUNT = "extra_power_usage_amount";
public static final String EXTRA_ICON_ID = "extra_icon_id";
private static final String KEY_PREF_HEADER = "header_view";
- private static final String KEY_PREF_UNRESTRICTED = "unrestricted_preference";
- private static final String KEY_PREF_OPTIMIZED = "optimized_preference";
- private static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage";
private static final String KEY_FOOTER_PREFERENCE = "app_usage_footer_preference";
+ private static final String KEY_BATTERY_OPTIMIZATION_MODE_CATEGORY =
+ "battery_optimization_mode_category";
private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
- @VisibleForTesting LayoutPreference mHeaderPreference;
@VisibleForTesting ApplicationsState mState;
@VisibleForTesting ApplicationsState.AppEntry mAppEntry;
@VisibleForTesting BatteryOptimizeUtils mBatteryOptimizeUtils;
- @VisibleForTesting SelectorWithWidgetPreference mOptimizePreference;
- @VisibleForTesting SelectorWithWidgetPreference mUnrestrictedPreference;
- @VisibleForTesting MainSwitchPreference mMainSwitchPreference;
- @VisibleForTesting FooterPreference mFooterPreference;
@VisibleForTesting StringBuilder mLogStringBuilder;
@VisibleForTesting @BatteryOptimizeUtils.OptimizationMode
@@ -87,17 +75,11 @@
public void onAttach(Activity activity) {
super.onAttach(activity);
+ final Bundle bundle = getArguments();
+ final int uid = bundle.getInt(EXTRA_UID, 0);
+ final String packageName = bundle.getString(EXTRA_PACKAGE_NAME);
+ mBatteryOptimizeUtils = new BatteryOptimizeUtils(getContext(), uid, packageName);
mState = ApplicationsState.getInstance(getActivity().getApplication());
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- final String packageName = getArguments().getString(EXTRA_PACKAGE_NAME);
- onCreateBackgroundUsageState(packageName);
- mHeaderPreference = findPreference(KEY_PREF_HEADER);
-
if (packageName != null) {
mAppEntry = mState.getEntry(packageName, UserHandle.myUserId());
}
@@ -107,8 +89,8 @@
public void onResume() {
super.onResume();
initHeader();
- mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
initFooter();
+ mOptimizationMode = mBatteryOptimizeUtils.getAppOptimizationMode();
mLogStringBuilder = new StringBuilder("onResume mode = ").append(mOptimizationMode);
}
@@ -137,34 +119,16 @@
}
@Override
- public void onRadioButtonClicked(SelectorWithWidgetPreference selected) {
- final String selectedKey = selected == null ? null : selected.getKey();
- updateSelectorPreferenceState(mUnrestrictedPreference, selectedKey);
- updateSelectorPreferenceState(mOptimizePreference, selectedKey);
- mBatteryOptimizeUtils.setAppUsageState(getSelectedPreference(), Action.APPLY);
- }
-
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- mMainSwitchPreference.setChecked(isChecked);
- updateSelectorPreference(isChecked);
- }
-
- @Override
public int getMetricsCategory() {
return SettingsEnums.FUELGAUGE_POWER_USAGE_MANAGE_BACKGROUND;
}
@Override
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
- final List<AbstractPreferenceController> controllers = new ArrayList<>();
- final Bundle bundle = getArguments();
- final int uid = bundle.getInt(EXTRA_UID, 0);
- final String packageName = bundle.getString(EXTRA_PACKAGE_NAME);
-
- controllers.add(new AllowBackgroundPreferenceController(context, uid, packageName));
- controllers.add(new OptimizedPreferenceController(context, uid, packageName));
- controllers.add(new UnrestrictedPreferenceController(context, uid, packageName));
+ final List<AbstractPreferenceController> controllers = new ArrayList<>(1);
+ controllers.add(
+ new BatteryOptimizationModePreferenceController(
+ context, KEY_BATTERY_OPTIMIZATION_MODE_CATEGORY, mBatteryOptimizeUtils));
return controllers;
}
@@ -179,26 +143,6 @@
return TAG;
}
- @VisibleForTesting
- void updateSelectorPreference(boolean isEnabled) {
- mOptimizePreference.setEnabled(isEnabled);
- mUnrestrictedPreference.setEnabled(isEnabled);
- onRadioButtonClicked(isEnabled ? mOptimizePreference : null);
- }
-
- @VisibleForTesting
- int getSelectedPreference() {
- if (!mMainSwitchPreference.isChecked()) {
- return BatteryOptimizeUtils.MODE_RESTRICTED;
- } else if (mUnrestrictedPreference.isChecked()) {
- return BatteryOptimizeUtils.MODE_UNRESTRICTED;
- } else if (mOptimizePreference.isChecked()) {
- return BatteryOptimizeUtils.MODE_OPTIMIZED;
- } else {
- return BatteryOptimizeUtils.MODE_UNKNOWN;
- }
- }
-
static void startPowerBackgroundUsageDetailPage(Context context, Bundle args) {
new SubSettingLauncher(context)
.setDestination(PowerBackgroundUsageDetail.class.getName())
@@ -209,7 +153,11 @@
@VisibleForTesting
void initHeader() {
- final View appSnippet = mHeaderPreference.findViewById(R.id.entity_header);
+ final LayoutPreference headerPreference = findPreference(KEY_PREF_HEADER);
+ if (headerPreference == null) {
+ return;
+ }
+ final View appSnippet = headerPreference.findViewById(R.id.entity_header);
final Activity context = getActivity();
final Bundle bundle = getArguments();
EntityHeaderController controller =
@@ -239,58 +187,25 @@
@VisibleForTesting
void initFooter() {
- final String stateString;
- final String footerString;
- final Context context = getContext();
-
- if (mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()) {
- // Present optimized only string when the package name is invalid.
- stateString = context.getString(R.string.manager_battery_usage_optimized_only);
- footerString =
- context.getString(R.string.manager_battery_usage_footer_limited, stateString);
- } else if (mBatteryOptimizeUtils.isSystemOrDefaultApp()) {
- // Present unrestricted only string when the package is system or default active app.
- stateString = context.getString(R.string.manager_battery_usage_unrestricted_only);
- footerString =
- context.getString(R.string.manager_battery_usage_footer_limited, stateString);
- } else {
- // Present default string to normal app.
- footerString = context.getString(R.string.manager_battery_usage_footer);
+ final FooterPreference footerPreference = findPreference(KEY_FOOTER_PREFERENCE);
+ if (footerPreference == null) {
+ return;
}
- mFooterPreference.setTitle(footerString);
+ final Context context = getContext();
+ footerPreference.setTitle(context.getString(R.string.manager_battery_usage_footer));
final Intent helpIntent =
HelpUtils.getHelpIntent(
context,
context.getString(R.string.help_url_app_usage_settings),
/* backupContext= */ "");
if (helpIntent != null) {
- mFooterPreference.setLearnMoreAction(
+ footerPreference.setLearnMoreAction(
v -> startActivityForResult(helpIntent, /* requestCode= */ 0));
- mFooterPreference.setLearnMoreText(
+ footerPreference.setLearnMoreText(
context.getString(R.string.manager_battery_usage_link_a11y));
}
}
- private void onCreateBackgroundUsageState(String packageName) {
- mOptimizePreference = findPreference(KEY_PREF_OPTIMIZED);
- mUnrestrictedPreference = findPreference(KEY_PREF_UNRESTRICTED);
- mMainSwitchPreference = findPreference(KEY_ALLOW_BACKGROUND_USAGE);
- mFooterPreference = findPreference(KEY_FOOTER_PREFERENCE);
-
- mOptimizePreference.setOnClickListener(this);
- mUnrestrictedPreference.setOnClickListener(this);
- mMainSwitchPreference.addOnSwitchChangeListener(this);
-
- mBatteryOptimizeUtils =
- new BatteryOptimizeUtils(
- getContext(), getArguments().getInt(EXTRA_UID), packageName);
- }
-
- private void updateSelectorPreferenceState(
- SelectorWithWidgetPreference preference, String selectedKey) {
- preference.setChecked(TextUtils.equals(selectedKey, preference.getKey()));
- }
-
private void logMetricCategory(int currentOptimizeMode) {
if (currentOptimizeMode == mOptimizationMode) {
return;
diff --git a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
index d948cc0..9b070f9 100644
--- a/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
+++ b/src/com/android/settings/fuelgauge/RequestIgnoreBatteryOptimizations.java
@@ -16,6 +16,8 @@
package com.android.settings.fuelgauge;
+import static com.android.settings.fuelgauge.BatteryOptimizeUtils.MODE_UNRESTRICTED;
+
import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.ApplicationInfo;
@@ -24,20 +26,20 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.PowerManager;
-import android.os.PowerWhitelistManager;
+import android.text.TextUtils;
import android.util.Log;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
import com.android.settings.R;
+import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
public class RequestIgnoreBatteryOptimizations extends AlertActivity
implements DialogInterface.OnClickListener {
private static final String TAG = "RequestIgnoreBatteryOptimizations";
private static final boolean DEBUG = false;
- private PowerWhitelistManager mPowerWhitelistManager;
- private String mPackageName;
+ private ApplicationInfo mApplicationInfo;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -47,8 +49,6 @@
android.view.WindowManager.LayoutParams
.SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
- mPowerWhitelistManager = getSystemService(PowerWhitelistManager.class);
-
Uri data = getIntent().getData();
if (data == null) {
debugLog(
@@ -56,17 +56,18 @@
finish();
return;
}
- mPackageName = data.getSchemeSpecificPart();
- if (mPackageName == null) {
+ final String packageName = data.getSchemeSpecificPart();
+ if (TextUtils.isEmpty(packageName)) {
debugLog(
"No data supplied for IGNORE_BATTERY_OPTIMIZATION_SETTINGS in: " + getIntent());
finish();
return;
}
+ // Package in Unrestricted mode already ignoring the battery optimizations.
PowerManager power = getSystemService(PowerManager.class);
- if (power.isIgnoringBatteryOptimizations(mPackageName)) {
- debugLog("Not should prompt, already ignoring optimizations: " + mPackageName);
+ if (power.isIgnoringBatteryOptimizations(packageName)) {
+ debugLog("Not should prompt, already ignoring optimizations: " + packageName);
finish();
return;
}
@@ -74,29 +75,28 @@
if (getPackageManager()
.checkPermission(
Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS,
- mPackageName)
+ packageName)
!= PackageManager.PERMISSION_GRANTED) {
debugLog(
"Requested package "
- + mPackageName
+ + packageName
+ " does not hold permission "
+ Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);
finish();
return;
}
- ApplicationInfo ai;
try {
- ai = getPackageManager().getApplicationInfo(mPackageName, 0);
+ mApplicationInfo = getPackageManager().getApplicationInfo(packageName, 0);
} catch (PackageManager.NameNotFoundException e) {
- debugLog("Requested package doesn't exist: " + mPackageName);
+ debugLog("Requested package doesn't exist: " + packageName);
finish();
return;
}
final AlertController.AlertParams p = mAlertParams;
final CharSequence appLabel =
- ai.loadSafeLabel(
+ mApplicationInfo.loadSafeLabel(
getPackageManager(),
PackageItemInfo.DEFAULT_MAX_LABEL_SIZE_PX,
PackageItemInfo.SAFE_LABEL_FLAG_TRIM
@@ -114,7 +114,12 @@
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
- mPowerWhitelistManager.addToWhitelist(mPackageName);
+ BatteryOptimizeUtils batteryOptimizeUtils =
+ new BatteryOptimizeUtils(
+ getApplicationContext(),
+ mApplicationInfo.uid,
+ mApplicationInfo.packageName);
+ batteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.APPLY);
break;
case BUTTON_NEGATIVE:
break;
diff --git a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java b/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
deleted file mode 100644
index 652941b..0000000
--- a/src/com/android/settings/fuelgauge/UnrestrictedPreferenceController.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import android.content.Context;
-
-import androidx.annotation.VisibleForTesting;
-import androidx.preference.Preference;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.widget.SelectorWithWidgetPreference;
-
-public class UnrestrictedPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
-
- private static final String TAG = "UNRESTRICTED_PREF";
-
- @VisibleForTesting static final String KEY_UNRESTRICTED_PREF = "unrestricted_preference";
-
- @VisibleForTesting BatteryOptimizeUtils mBatteryOptimizeUtils;
-
- public UnrestrictedPreferenceController(Context context, int uid, String packageName) {
- super(context);
- mBatteryOptimizeUtils = new BatteryOptimizeUtils(context, uid, packageName);
- }
-
- @Override
- public void updateState(Preference preference) {
- preference.setEnabled(mBatteryOptimizeUtils.isSelectorPreferenceEnabled());
-
- final boolean isUnrestricted =
- mBatteryOptimizeUtils.getAppOptimizationMode()
- == BatteryOptimizeUtils.MODE_UNRESTRICTED;
- ((SelectorWithWidgetPreference) preference).setChecked(isUnrestricted);
- }
-
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_UNRESTRICTED_PREF;
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- return getPreferenceKey().equals(preference.getKey());
- }
-}
diff --git a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
index 8373d03..df6c1d9 100644
--- a/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/batterysaver/BatterySaverSettings.java
@@ -97,9 +97,8 @@
}
}
- @Nullable
@Override
- public String getPreferenceScreenBindingKey(@NonNull Context context) {
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
return BatterySaverScreen.KEY;
}
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
index e6f622c..74c9c68 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipPreferenceController.java
@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge.batterytip;
+import android.app.Activity;
import android.content.Context;
import android.os.BadParcelableException;
import android.os.Bundle;
@@ -27,7 +28,6 @@
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
-import com.android.settings.SettingsActivity;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
@@ -52,7 +52,7 @@
private BatteryTipListener mBatteryTipListener;
private List<BatteryTip> mBatteryTips;
private Map<String, BatteryTip> mBatteryTipMap;
- private SettingsActivity mSettingsActivity;
+ private Activity mActivity;
private MetricsFeatureProvider mMetricsFeatureProvider;
private boolean mNeedUpdate;
@VisibleForTesting TipCardPreference mCardPreference;
@@ -66,8 +66,8 @@
mNeedUpdate = true;
}
- public void setActivity(SettingsActivity activity) {
- mSettingsActivity = activity;
+ public void setActivity(Activity activity) {
+ mActivity = activity;
}
public void setFragment(InstrumentedPreferenceFragment fragment) {
@@ -126,7 +126,7 @@
} else {
final BatteryTipAction action =
BatteryTipUtils.getActionForBatteryTip(
- batteryTip, mSettingsActivity, mFragment);
+ batteryTip, mActivity, mFragment);
if (action != null) {
action.handlePositiveAction(mFragment.getMetricsCategory());
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
index 7dc993c..c6603d7 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
@@ -16,16 +16,15 @@
package com.android.settings.fuelgauge.batterytip;
+import android.app.Activity;
import android.app.AppOpsManager;
import android.content.Context;
-import android.content.Intent;
import android.os.UserHandle;
import android.os.UserManager;
import androidx.annotation.NonNull;
import com.android.internal.util.CollectionUtils;
-import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.fuelgauge.batterytip.actions.BatteryTipAction;
import com.android.settings.fuelgauge.batterytip.actions.OpenBatterySaverAction;
@@ -33,8 +32,6 @@
import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction;
import com.android.settings.fuelgauge.batterytip.actions.UnrestrictAppAction;
-import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
-import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
@@ -52,7 +49,7 @@
AppOpsManager appOpsManager, UserManager userManager) {
final List<UserHandle> userHandles = userManager.getUserProfiles();
final List<AppOpsManager.PackageOps> packageOpsList =
- appOpsManager.getPackagesForOps(new int[] {AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
+ appOpsManager.getPackagesForOps(new int[]{AppOpsManager.OP_RUN_ANY_IN_BACKGROUND});
final List<AppInfo> appInfos = new ArrayList<>();
for (int i = 0, size = CollectionUtils.size(packageOpsList); i < size; i++) {
@@ -65,7 +62,7 @@
}
if (entry.getMode() != AppOpsManager.MODE_ALLOWED
&& userHandles.contains(
- new UserHandle(UserHandle.getUserId(packageOps.getUid())))) {
+ new UserHandle(UserHandle.getUserId(packageOps.getUid())))) {
appInfos.add(
new AppInfo.Builder()
.setPackageName(packageOps.getPackageName())
@@ -82,34 +79,34 @@
* Get a corresponding action based on {@code batteryTip}
*
* @param batteryTip used to detect which action to choose
- * @param settingsActivity used to populate {@link BatteryTipAction}
- * @param fragment used to populate {@link BatteryTipAction}
+ * @param activity used to populate {@link BatteryTipAction}
+ * @param fragment used to populate {@link BatteryTipAction}
* @return an action for {@code batteryTip}
*/
public static BatteryTipAction getActionForBatteryTip(
BatteryTip batteryTip,
- SettingsActivity settingsActivity,
+ Activity activity,
InstrumentedPreferenceFragment fragment) {
switch (batteryTip.getType()) {
case BatteryTip.TipType.SMART_BATTERY_MANAGER:
- return new SmartBatteryAction(settingsActivity, fragment);
+ return new SmartBatteryAction(activity, fragment);
case BatteryTip.TipType.BATTERY_SAVER:
case BatteryTip.TipType.LOW_BATTERY:
- return new OpenBatterySaverAction(settingsActivity);
+ return new OpenBatterySaverAction(activity);
case BatteryTip.TipType.APP_RESTRICTION:
if (batteryTip.getState() == BatteryTip.StateType.HANDLED) {
return new OpenRestrictAppFragmentAction(fragment, (RestrictAppTip) batteryTip);
} else {
- return new RestrictAppAction(settingsActivity, (RestrictAppTip) batteryTip);
+ return new RestrictAppAction(activity, (RestrictAppTip) batteryTip);
}
case BatteryTip.TipType.REMOVE_APP_RESTRICTION:
- return new UnrestrictAppAction(settingsActivity, (UnrestrictAppTip) batteryTip);
+ return new UnrestrictAppAction(activity, (UnrestrictAppTip) batteryTip);
default:
return null;
}
}
- /** Detect and return anomaly apps after {@code timeAfterMs} */
+ /** Detect and return anomaly apps after {@code timeAfterMs} */
public static List<AppInfo> detectAnomalies(Context context, long timeAfterMs) {
return new ArrayList<>();
}
diff --git a/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java b/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java
index 55c0031..b2d6647 100644
--- a/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java
+++ b/src/com/android/settings/fuelgauge/batterytip/actions/SmartBatteryAction.java
@@ -16,23 +16,23 @@
package com.android.settings.fuelgauge.batterytip.actions;
+import android.app.Activity;
import android.app.settings.SettingsEnums;
import androidx.fragment.app.Fragment;
import com.android.settings.R;
-import com.android.settings.SettingsActivity;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.fuelgauge.SmartBatterySettings;
import com.android.settingslib.core.instrumentation.Instrumentable;
public class SmartBatteryAction extends BatteryTipAction {
- private SettingsActivity mSettingsActivity;
+ private Activity mActivity;
private Fragment mFragment;
- public SmartBatteryAction(SettingsActivity settingsActivity, Fragment fragment) {
- super(settingsActivity.getApplicationContext());
- mSettingsActivity = settingsActivity;
+ public SmartBatteryAction(Activity activity, Fragment fragment) {
+ super(activity.getApplicationContext());
+ mActivity = activity;
mFragment = fragment;
}
@@ -41,7 +41,7 @@
public void handlePositiveAction(int metricsKey) {
mMetricsFeatureProvider.action(
mContext, SettingsEnums.ACTION_TIP_OPEN_SMART_BATTERY, metricsKey);
- new SubSettingLauncher(mSettingsActivity)
+ new SubSettingLauncher(mActivity)
.setSourceMetricsCategory(
mFragment instanceof Instrumentable
? ((Instrumentable) mFragment).getMetricsCategory()
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java
index 2084b66..076676d 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryOptimizationModeCache.java
@@ -51,7 +51,8 @@
Pair.create(
BatteryOptimizationMode.forNumber(
batteryOptimizeUtils.getAppOptimizationMode(
- /* refreshList= */ false)),
+ /* refreshList= */ false,
+ /* ignoreUnknownMode= */ false)),
batteryOptimizeUtils.isOptimizeModeMutable()));
}
final Pair<BatteryOptimizationMode, Boolean> batteryOptimizeModeInfo =
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
index 0836912..df84aba 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
@@ -20,8 +20,6 @@
import android.content.Context;
import android.os.AsyncTask;
import android.os.BatteryUsageStats;
-import android.os.Handler;
-import android.os.Looper;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -117,11 +115,9 @@
private static void preprocessBatteryUsageSlots(
final Context context, final UserIdsSeries userIdsSeries) {
final long start = System.currentTimeMillis();
- final Handler handler = new Handler(Looper.getMainLooper());
final BatteryLevelData batteryLevelData =
DataProcessManager.getBatteryLevelData(
context,
- handler,
userIdsSeries,
/* isFromPeriodJob= */ true,
batteryDiffDataMap -> {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
index 0a1a547..fd548ab 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
@@ -19,8 +19,6 @@
import android.app.usage.UsageEvents;
import android.content.Context;
import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.Looper;
import android.util.ArrayMap;
import android.util.Log;
@@ -82,7 +80,6 @@
private final long mLastFullChargeTimestamp;
private final boolean mIsFromPeriodJob;
private final Context mContext;
- private final Handler mHandler;
private final UserIdsSeries mUserIdsSeries;
private final OnBatteryDiffDataMapLoadedListener mCallbackFunction;
private final List<AppUsageEvent> mAppUsageEventList = new ArrayList<>();
@@ -123,7 +120,6 @@
/** Constructor when there exists battery level data. */
DataProcessManager(
Context context,
- Handler handler,
final UserIdsSeries userIdsSeries,
final boolean isFromPeriodJob,
final long rawStartTimestamp,
@@ -132,7 +128,6 @@
@NonNull final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
@NonNull final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
mContext = context.getApplicationContext();
- mHandler = handler;
mUserIdsSeries = userIdsSeries;
mIsFromPeriodJob = isFromPeriodJob;
mRawStartTimestamp = rawStartTimestamp;
@@ -145,11 +140,9 @@
/** Constructor when there is no battery level data. */
DataProcessManager(
Context context,
- Handler handler,
final UserIdsSeries userIdsSeries,
@NonNull final OnBatteryDiffDataMapLoadedListener callbackFunction) {
mContext = context.getApplicationContext();
- mHandler = handler;
mUserIdsSeries = userIdsSeries;
mCallbackFunction = callbackFunction;
mIsFromPeriodJob = false;
@@ -444,12 +437,8 @@
@Override
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
- // Post results back to main thread to refresh UI.
- if (mHandler != null && mCallbackFunction != null) {
- mHandler.post(
- () -> {
- mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
- });
+ if (mCallbackFunction != null) {
+ mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
}
}
}.execute();
@@ -534,12 +523,8 @@
@Override
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
- // Post results back to main thread to refresh UI.
- if (mHandler != null && mCallbackFunction != null) {
- mHandler.post(
- () -> {
- mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
- });
+ if (mCallbackFunction != null) {
+ mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
}
}
}.execute();
@@ -581,7 +566,6 @@
@Nullable
public static BatteryLevelData getBatteryLevelData(
Context context,
- @Nullable Handler handler,
final UserIdsSeries userIdsSeries,
final boolean isFromPeriodJob,
final OnBatteryDiffDataMapLoadedListener onBatteryUsageMapLoadedListener) {
@@ -601,7 +585,6 @@
final BatteryLevelData batteryLevelData =
getPeriodBatteryLevelData(
context,
- handler,
userIdsSeries,
startTimestamp,
lastFullChargeTime,
@@ -621,7 +604,6 @@
private static BatteryLevelData getPeriodBatteryLevelData(
Context context,
- @Nullable Handler handler,
final UserIdsSeries userIdsSeries,
final long startTimestamp,
final long lastFullChargeTime,
@@ -639,7 +621,6 @@
return null;
}
- handler = handler != null ? handler : new Handler(Looper.getMainLooper());
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
sFakeBatteryHistoryMap != null
? sFakeBatteryHistoryMap
@@ -650,8 +631,7 @@
lastFullChargeTime);
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
Log.d(TAG, "batteryHistoryMap is null in getPeriodBatteryLevelData()");
- new DataProcessManager(
- context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
+ new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
.start();
return null;
}
@@ -680,8 +660,7 @@
DataProcessor.getLevelDataThroughProcessedHistoryMap(
context, processedBatteryHistoryMap);
if (batteryLevelData == null) {
- new DataProcessManager(
- context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
+ new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
.start();
Log.d(TAG, "getBatteryLevelData() returns null");
return null;
@@ -690,7 +669,6 @@
// Start the async task to compute diff usage data and load labels and icons.
new DataProcessManager(
context,
- handler,
userIdsSeries,
isFromPeriodJob,
startTimestamp,
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
index ad487ef..0998e2d 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java
@@ -31,8 +31,6 @@
import android.os.AsyncTask;
import android.os.BatteryManager;
import android.os.BatteryUsageStats;
-import android.os.Handler;
-import android.os.Looper;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserManager;
@@ -66,12 +64,6 @@
public final class DatabaseUtils {
private static final String TAG = "DatabaseUtils";
private static final String SHARED_PREFS_FILE = "battery_usage_shared_prefs";
- private static final boolean EXPLICIT_CLEAR_MEMORY_ENABLED = false;
-
- /** Clear memory threshold for device booting phase. */
- private static final long CLEAR_MEMORY_THRESHOLD_MS = Duration.ofMinutes(5).toMillis();
-
- private static final long CLEAR_MEMORY_DELAYED_MS = Duration.ofSeconds(2).toMillis();
private static final long INVALID_TIMESTAMP = 0L;
static final int DATA_RETENTION_INTERVAL_DAY = 9;
@@ -593,7 +585,6 @@
String.format(
"sendAppUsageEventData() size=%d in %d/ms",
size, (System.currentTimeMillis() - startTime)));
- clearMemory();
return valuesList;
}
@@ -613,7 +604,6 @@
String.format(
"sendBatteryEventData() in %d/ms",
(System.currentTimeMillis() - startTime)));
- clearMemory();
return contentValues;
}
@@ -647,7 +637,6 @@
String.format(
"sendBatteryEventData() size=%d in %d/ms",
size, (System.currentTimeMillis() - startTime)));
- clearMemory();
return valuesList;
}
@@ -681,7 +670,6 @@
String.format(
"sendBatteryUsageSlotData() size=%d in %d/ms",
size, (System.currentTimeMillis() - startTime)));
- clearMemory();
return valuesList;
}
@@ -695,7 +683,6 @@
final Intent intent = BatteryUtils.getBatteryIntent(context);
if (intent == null) {
Log.e(TAG, "sendBatteryEntryData(): cannot fetch battery intent");
- clearMemory();
return null;
}
final int batteryLevel = BatteryStatus.getBatteryLevel(intent);
@@ -796,7 +783,6 @@
if (isFullChargeStart) {
recordDateTime(context, KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
}
- clearMemory();
return valuesList;
}
@@ -992,20 +978,4 @@
writer.println(String.format("\t\t%s: %s", prefix, results.toString()));
}
}
-
- private static void clearMemory() {
- if (!EXPLICIT_CLEAR_MEMORY_ENABLED
- || SystemClock.uptimeMillis() > CLEAR_MEMORY_THRESHOLD_MS) {
- return;
- }
- final Handler mainHandler = new Handler(Looper.getMainLooper());
- mainHandler.postDelayed(
- () -> {
- System.gc();
- System.runFinalization();
- System.gc();
- Log.w(TAG, "invoke clearMemory()");
- },
- CLEAR_MEMORY_DELAYED_MS);
- }
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
index a9c2332..1ed6a74 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
@@ -214,20 +214,22 @@
if (!isResumed() || mBatteryLevelData == null) {
return;
}
- mBatteryUsageMap =
- DataProcessor.generateBatteryUsageMap(
- getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
- Log.d(TAG, "onBatteryDiffDataMapUpdate: " + mBatteryUsageMap);
- DataProcessor.loadLabelAndIcon(mBatteryUsageMap);
- onSelectedSlotDataUpdated();
- detectAnomaly();
- logScreenUsageTime();
- if (mBatteryChartPreferenceController != null
- && mBatteryLevelData.isEmpty()
- && isBatteryUsageMapNullOrEmpty()) {
- // No available battery usage and battery level data.
- mBatteryChartPreferenceController.showEmptyChart();
- }
+ mHandler.post(() -> {
+ mBatteryUsageMap =
+ DataProcessor.generateBatteryUsageMap(
+ getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
+ Log.d(TAG, "onBatteryDiffDataMapUpdate: " + mBatteryUsageMap);
+ DataProcessor.loadLabelAndIcon(mBatteryUsageMap);
+ onSelectedSlotDataUpdated();
+ detectAnomaly();
+ logScreenUsageTime();
+ if (mBatteryChartPreferenceController != null
+ && mBatteryLevelData.isEmpty()
+ && isBatteryUsageMapNullOrEmpty()) {
+ // No available battery usage and battery level data.
+ mBatteryChartPreferenceController.showEmptyChart();
+ }
+ });
}
private void onSelectedSlotDataUpdated() {
@@ -503,7 +505,6 @@
public BatteryLevelData loadInBackground() {
return DataProcessManager.getBatteryLevelData(
getContext(),
- mHandler,
new UserIdsSeries(getContext(), /* isNonUIRequest= */ false),
/* isFromPeriodJob= */ false,
PowerUsageAdvanced.this::onBatteryDiffDataMapUpdate);
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
index 5ef820c..b5581d0 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummary.java
@@ -18,6 +18,7 @@
import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
+import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.database.ContentObserver;
@@ -26,13 +27,14 @@
import android.os.Handler;
import android.provider.Settings.Global;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.preference.Preference;
import com.android.settings.R;
-import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.fuelgauge.BatteryHeaderPreferenceController;
import com.android.settings.fuelgauge.BatteryInfo;
@@ -125,7 +127,7 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- final SettingsActivity activity = (SettingsActivity) getActivity();
+ final Activity activity = getActivity();
mBatteryHeaderPreferenceController = use(BatteryHeaderPreferenceController.class);
@@ -270,4 +272,9 @@
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.power_usage_summary);
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return PowerUsageSummaryScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt
new file mode 100644
index 0000000..229e308
--- /dev/null
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreen.kt
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.fuelgauge.batteryusage
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.PreferenceIconProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class PowerUsageSummaryScreen : PreferenceScreenCreator,
+ PreferenceAvailabilityProvider,
+ PreferenceIconProvider {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.power_usage_summary_title
+
+ override val keywords: Int
+ get() = R.string.keywords_battery
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystPowerUsageSummaryScreen()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = PowerUsageSummary::class.java
+
+ override fun isAvailable(context: Context) =
+ context.resources.getBoolean(R.bool.config_show_top_level_battery)
+
+ override fun getIcon(context: Context): Int =
+ if (Flags.homepageRevamp()) {
+ R.drawable.ic_settings_battery_filled
+ } else {
+ R.drawable.ic_settings_battery_white
+ }
+
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "power_usage_summary_screen"
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
index cfaee00..9b4da46 100644
--- a/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
+++ b/src/com/android/settings/gestures/SystemNavigationGestureSettings.java
@@ -243,7 +243,9 @@
protected boolean setDefaultKey(String key) {
setCurrentSystemNavigationMode(mOverlayManager, key);
setIllustrationVideo(mVideoPreference, key);
- setGestureNavigationTutorialDialog(key);
+ if (!android.provider.Flags.a11yStandaloneGestureEnabled()) {
+ setGestureNavigationTutorialDialog(key);
+ }
setIllustrationClickListener(mVideoPreference, key);
return true;
}
diff --git a/src/com/android/settings/inputmethod/InputSettingPreferenceController.java b/src/com/android/settings/inputmethod/InputSettingPreferenceController.java
index 6d462c2..8dda8c5 100644
--- a/src/com/android/settings/inputmethod/InputSettingPreferenceController.java
+++ b/src/com/android/settings/inputmethod/InputSettingPreferenceController.java
@@ -25,20 +25,31 @@
import android.net.Uri;
import android.os.Handler;
import android.os.UserHandle;
+import android.view.View;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+import android.widget.SeekBar;
+import android.widget.TextView;
import androidx.annotation.NonNull;
+import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.Preference;
+import com.android.settings.R;
import com.android.settings.core.TogglePreferenceController;
import com.android.settings.keyboard.Flags;
+import java.util.concurrent.TimeUnit;
+
/**
* Abstract class for toggle controllers of Keyboard input setting related function.
*/
public abstract class InputSettingPreferenceController extends TogglePreferenceController implements
LifecycleObserver {
+ private static final int CUSTOM_PROGRESS_INTERVAL = 100;
+ private static final long MILLISECOND_IN_SECONDS = TimeUnit.SECONDS.toMillis(1);
private final ContentResolver mContentResolver;
private final ContentObserver mContentObserver = new ContentObserver(new Handler(true)) {
@Override
@@ -48,11 +59,19 @@
}
}
};
+ protected AlertDialog mAlertDialog;
protected abstract void onInputSettingUpdated();
protected abstract Uri getSettingUri();
+ protected void updateInputSettingKeysValue(int thresholdTimeMillis) {
+ }
+
+ protected int getInputSettingKeysValue() {
+ return 0;
+ }
+
public InputSettingPreferenceController(@NonNull Context context,
@NonNull String preferenceKey) {
super(context, preferenceKey);
@@ -100,4 +119,112 @@
private void unregisterSettingsObserver() {
mContentResolver.unregisterContentObserver(mContentObserver);
}
+
+ protected void constructDialog(Context context, int titleRes, int subtitleRes) {
+ mAlertDialog = new AlertDialog.Builder(context)
+ .setView(R.layout.dialog_keyboard_a11y_input_setting_keys)
+ .setPositiveButton(android.R.string.ok,
+ (dialog, which) -> {
+ RadioGroup radioGroup =
+ mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_group);
+ SeekBar seekbar = mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_custom_slider);
+ RadioButton customRadioButton = mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_custom);
+ int threshold;
+ if (customRadioButton.isChecked()) {
+ threshold = seekbar.getProgress() * CUSTOM_PROGRESS_INTERVAL;
+ } else {
+ int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
+ if (checkedRadioButtonId == R.id.input_setting_keys_value_600) {
+ threshold = 600;
+ } else if (checkedRadioButtonId
+ == R.id.input_setting_keys_value_400) {
+ threshold = 400;
+ } else if (checkedRadioButtonId
+ == R.id.input_setting_keys_value_200) {
+ threshold = 200;
+ } else {
+ threshold = 0;
+ }
+ }
+ updateInputSettingKeysValue(threshold);
+ })
+ .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())
+ .create();
+ mAlertDialog.setOnShowListener(dialog -> {
+ RadioGroup cannedValueRadioGroup = mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_group);
+ RadioButton customRadioButton = mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_custom);
+ TextView customValueTextView = mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_custom_value);
+ SeekBar customProgressBar = mAlertDialog.findViewById(
+ R.id.input_setting_keys_value_custom_slider);
+ TextView titleTextView = mAlertDialog.findViewById(
+ R.id.input_setting_keys_dialog_title);
+ TextView subTitleTextView = mAlertDialog.findViewById(
+ R.id.input_setting_keys_dialog_subtitle);
+ titleTextView.setText(titleRes);
+ subTitleTextView.setText(subtitleRes);
+
+ customProgressBar.incrementProgressBy(CUSTOM_PROGRESS_INTERVAL);
+ customProgressBar.setProgress(1);
+ View customValueView = mAlertDialog.findViewById(
+ R.id.input_setting_keys_custom_value_option);
+ customValueView.setOnClickListener(l -> customRadioButton.performClick());
+ customRadioButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ if (isChecked) {
+ cannedValueRadioGroup.clearCheck();
+ }
+ customValueTextView.setVisibility(isChecked ? View.VISIBLE : View.GONE);
+ customValueTextView.setText(
+ progressToThresholdInSecond(customProgressBar.getProgress()));
+ customProgressBar.setVisibility(isChecked ? View.VISIBLE : View.GONE);
+ buttonView.setChecked(isChecked);
+ });
+ cannedValueRadioGroup.setOnCheckedChangeListener(
+ (group, checkedId) -> customRadioButton.setChecked(false));
+ customProgressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
+ @Override
+ public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+ customValueTextView.setText(progressToThresholdInSecond(progress));
+ }
+
+ @Override
+ public void onStartTrackingTouch(SeekBar seekBar) {
+ }
+
+ @Override
+ public void onStopTrackingTouch(SeekBar seekBar) {
+ }
+ });
+ initStateBasedOnThreshold(cannedValueRadioGroup, customRadioButton, customValueTextView,
+ customProgressBar);
+ });
+ }
+
+ private static String progressToThresholdInSecond(int progress) {
+ return String.valueOf((double) progress * CUSTOM_PROGRESS_INTERVAL
+ / MILLISECOND_IN_SECONDS);
+ }
+
+ private void initStateBasedOnThreshold(RadioGroup cannedValueRadioGroup,
+ RadioButton customRadioButton, TextView customValueTextView,
+ SeekBar customProgressBar) {
+ int inputSettingKeysThreshold = getInputSettingKeysValue();
+ switch (inputSettingKeysThreshold) {
+ case 600 -> cannedValueRadioGroup.check(R.id.input_setting_keys_value_600);
+ case 400 -> cannedValueRadioGroup.check(R.id.input_setting_keys_value_400);
+ case 0, 200 -> cannedValueRadioGroup.check(R.id.input_setting_keys_value_200);
+ default -> {
+ customValueTextView.setText(
+ String.valueOf(
+ (double) inputSettingKeysThreshold / MILLISECOND_IN_SECONDS));
+ customProgressBar.setProgress(inputSettingKeysThreshold / CUSTOM_PROGRESS_INTERVAL);
+ customRadioButton.setChecked(true);
+ }
+ }
+ }
}
diff --git a/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysController.java b/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysController.java
index 1652f00..6bd836f 100644
--- a/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysController.java
+++ b/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysController.java
@@ -21,15 +21,9 @@
import android.net.Uri;
import android.provider.Settings;
import android.text.TextUtils;
-import android.view.View;
-import android.widget.RadioButton;
-import android.widget.RadioGroup;
-import android.widget.SeekBar;
-import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
import androidx.lifecycle.LifecycleObserver;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
@@ -37,23 +31,19 @@
import com.android.settings.R;
import com.android.settingslib.PrimarySwitchPreference;
-import java.util.concurrent.TimeUnit;
-
public class KeyboardAccessibilityBounceKeysController extends
InputSettingPreferenceController implements
LifecycleObserver {
- private static final int CUSTOM_PROGRESS_INTERVAL = 100;
- private static final long MILLISECOND_IN_SECONDS = TimeUnit.SECONDS.toMillis(1);
public static final int BOUNCE_KEYS_THRESHOLD = 500;
- private AlertDialog mAlertDialog;
@Nullable
private PrimarySwitchPreference mPrimaryPreference;
public KeyboardAccessibilityBounceKeysController(@NonNull Context context,
@NonNull String key) {
super(context, key);
- constructDialog(context);
+ constructDialog(context, R.string.bounce_keys_dialog_title,
+ R.string.bounce_keys_dialog_subtitle);
}
@Override
@@ -87,8 +77,7 @@
@Override
public boolean setChecked(boolean isChecked) {
- InputSettings.setAccessibilityBounceKeysThreshold(mContext,
- isChecked ? BOUNCE_KEYS_THRESHOLD : 0);
+ updateInputSettingKeysValue(isChecked ? BOUNCE_KEYS_THRESHOLD : 0);
return true;
}
@@ -106,94 +95,13 @@
Settings.Secure.ACCESSIBILITY_BOUNCE_KEYS);
}
- private void constructDialog(Context context) {
- mAlertDialog = new AlertDialog.Builder(context)
- .setView(R.layout.dialog_a11y_bounce_key)
- .setPositiveButton(android.R.string.ok,
- (dialog, which) -> {
- RadioGroup radioGroup =
- mAlertDialog.findViewById(R.id.bounce_key_value_group);
- SeekBar seekbar = mAlertDialog.findViewById(
- R.id.bounce_key_value_custom_slider);
- RadioButton customRadioButton = mAlertDialog.findViewById(
- R.id.bounce_key_value_custom);
- int threshold;
- if (customRadioButton.isChecked()) {
- threshold = seekbar.getProgress() * CUSTOM_PROGRESS_INTERVAL;
- } else {
- int checkedRadioButtonId = radioGroup.getCheckedRadioButtonId();
- threshold = checkedRadioButtonId == R.id.bounce_key_value_600 ? 600
- : checkedRadioButtonId == R.id.bounce_key_value_400 ? 400
- : checkedRadioButtonId == R.id.bounce_key_value_200
- ? 200 : 0;
- }
- InputSettings.setAccessibilityBounceKeysThreshold(context, threshold);
- })
- .setNegativeButton(android.R.string.cancel, (dialog, which) -> dialog.dismiss())
- .create();
- mAlertDialog.setOnShowListener(dialog -> {
- RadioGroup cannedValueRadioGroup = mAlertDialog.findViewById(
- R.id.bounce_key_value_group);
- RadioButton customRadioButton = mAlertDialog.findViewById(R.id.bounce_key_value_custom);
- TextView customValueTextView = mAlertDialog.findViewById(
- R.id.bounce_key_value_custom_value);
- SeekBar customProgressBar = mAlertDialog.findViewById(
- R.id.bounce_key_value_custom_slider);
- customProgressBar.incrementProgressBy(CUSTOM_PROGRESS_INTERVAL);
- customProgressBar.setProgress(1);
- View customValueView = mAlertDialog.findViewById(R.id.custom_value_option);
- customValueView.setOnClickListener(l -> customRadioButton.performClick());
- customRadioButton.setOnCheckedChangeListener((buttonView, isChecked) -> {
- if (isChecked) {
- cannedValueRadioGroup.clearCheck();
- }
- customValueTextView.setVisibility(isChecked ? View.VISIBLE : View.GONE);
- customValueTextView.setText(
- progressToThresholdInSecond(customProgressBar.getProgress()));
- customProgressBar.setVisibility(isChecked ? View.VISIBLE : View.GONE);
- buttonView.setChecked(isChecked);
- });
- cannedValueRadioGroup.setOnCheckedChangeListener(
- (group, checkedId) -> customRadioButton.setChecked(false));
- customProgressBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- customValueTextView.setText(progressToThresholdInSecond(progress));
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
- });
- initStateBasedOnThreshold(cannedValueRadioGroup, customRadioButton, customValueTextView,
- customProgressBar);
- });
+ @Override
+ protected void updateInputSettingKeysValue(int thresholdTimeMillis) {
+ InputSettings.setAccessibilityBounceKeysThreshold(mContext, thresholdTimeMillis);
}
- private static String progressToThresholdInSecond(int progress) {
- return String.valueOf((double) progress * CUSTOM_PROGRESS_INTERVAL
- / MILLISECOND_IN_SECONDS);
- }
-
- private void initStateBasedOnThreshold(RadioGroup cannedValueRadioGroup,
- RadioButton customRadioButton, TextView customValueTextView,
- SeekBar customProgressBar) {
- int bounceKeysThreshold = InputSettings.getAccessibilityBounceKeysThreshold(mContext);
- switch (bounceKeysThreshold) {
- case 600 -> cannedValueRadioGroup.check(R.id.bounce_key_value_600);
- case 400 -> cannedValueRadioGroup.check(R.id.bounce_key_value_400);
- case 0, 200 -> cannedValueRadioGroup.check(R.id.bounce_key_value_200);
- default -> {
- customValueTextView.setText(
- String.valueOf(
- (double) bounceKeysThreshold / MILLISECOND_IN_SECONDS));
- customProgressBar.setProgress(bounceKeysThreshold / CUSTOM_PROGRESS_INTERVAL);
- customRadioButton.setChecked(true);
- }
- }
+ @Override
+ protected int getInputSettingKeysValue() {
+ return InputSettings.getAccessibilityBounceKeysThreshold(mContext);
}
}
diff --git a/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java b/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java
index 57ae88a..34f53c4 100644
--- a/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java
+++ b/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysController.java
@@ -22,15 +22,23 @@
import android.provider.Settings;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleObserver;
import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
+
+import com.android.settingslib.PrimarySwitchPreference;
+import com.android.settingslib.widget.MainSwitchPreference;
public class KeyboardAccessibilityMouseKeysController extends
InputSettingPreferenceController implements
LifecycleObserver {
+ private static final String KEY_MOUSE_KEY = "accessibility_mouse_keys";
+ private static final String KEY_MOUSE_KEY_MAIN_PAGE = "mouse_keys_main_switch";
- private TwoStatePreference mTwoStatePreference;
+ @Nullable
+ private PrimarySwitchPreference mPrimaryPreference;
+ @Nullable
+ private MainSwitchPreference mMainSwitchPreference;
public KeyboardAccessibilityMouseKeysController(@NonNull Context context, @NonNull String key) {
super(context, key);
@@ -39,7 +47,11 @@
@Override
public void displayPreference(@NonNull PreferenceScreen screen) {
super.displayPreference(screen);
- mTwoStatePreference = screen.findPreference(getPreferenceKey());
+ if (KEY_MOUSE_KEY.equals(getPreferenceKey())) {
+ mPrimaryPreference = screen.findPreference(getPreferenceKey());
+ } else if (KEY_MOUSE_KEY_MAIN_PAGE.equals(getPreferenceKey())) {
+ mMainSwitchPreference = screen.findPreference(getPreferenceKey());
+ }
}
@Override
@@ -63,8 +75,11 @@
@Override
protected void onInputSettingUpdated() {
- if (mTwoStatePreference != null) {
- mTwoStatePreference.setChecked(
+ if (mPrimaryPreference != null) {
+ mPrimaryPreference.setChecked(
+ InputSettings.isAccessibilityMouseKeysEnabled(mContext));
+ } else if (mMainSwitchPreference != null) {
+ mMainSwitchPreference.setChecked(
InputSettings.isAccessibilityMouseKeysEnabled(mContext));
}
}
diff --git a/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysController.java b/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysController.java
index d8602df..857623a 100644
--- a/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysController.java
+++ b/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysController.java
@@ -20,27 +20,34 @@
import android.hardware.input.InputSettings;
import android.net.Uri;
import android.provider.Settings;
+import android.text.TextUtils;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.lifecycle.LifecycleObserver;
+import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
-import androidx.preference.TwoStatePreference;
+
+import com.android.settings.R;
+import com.android.settingslib.PrimarySwitchPreference;
public class KeyboardAccessibilitySlowKeysController extends
InputSettingPreferenceController implements
LifecycleObserver {
public static final int SLOW_KEYS_THRESHOLD = 500;
- private TwoStatePreference mTwoStatePreference;
+ @Nullable
+ private PrimarySwitchPreference mPrimarySwitchPreference;
public KeyboardAccessibilitySlowKeysController(@NonNull Context context, @NonNull String key) {
super(context, key);
+ constructDialog(context, R.string.slow_keys, R.string.slow_keys_summary);
}
@Override
public void displayPreference(@NonNull PreferenceScreen screen) {
super.displayPreference(screen);
- mTwoStatePreference = screen.findPreference(getPreferenceKey());
+ mPrimarySwitchPreference = screen.findPreference(getPreferenceKey());
}
@Override
@@ -50,8 +57,7 @@
@Override
public boolean setChecked(boolean isChecked) {
- InputSettings.setAccessibilitySlowKeysThreshold(mContext,
- isChecked ? SLOW_KEYS_THRESHOLD : 0);
+ updateInputSettingKeysValue(isChecked ? SLOW_KEYS_THRESHOLD : 0);
return true;
}
@@ -64,8 +70,8 @@
@Override
protected void onInputSettingUpdated() {
- if (mTwoStatePreference != null) {
- mTwoStatePreference.setChecked(
+ if (mPrimarySwitchPreference != null) {
+ mPrimarySwitchPreference.setChecked(
InputSettings.isAccessibilitySlowKeysEnabled(mContext));
}
}
@@ -75,4 +81,25 @@
return Settings.Secure.getUriFor(
Settings.Secure.ACCESSIBILITY_SLOW_KEYS);
}
+
+ @Override
+ public boolean handlePreferenceTreeClick(@NonNull Preference preference) {
+ if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
+ return false;
+ }
+ if (mAlertDialog != null) {
+ mAlertDialog.show();
+ }
+ return true;
+ }
+
+ @Override
+ protected void updateInputSettingKeysValue(int thresholdTimeMillis) {
+ InputSettings.setAccessibilitySlowKeysThreshold(mContext, thresholdTimeMillis);
+ }
+
+ @Override
+ protected int getInputSettingKeysValue() {
+ return InputSettings.getAccessibilitySlowKeysThreshold(mContext);
+ }
}
diff --git a/src/com/android/settings/inputmethod/MouseKeysImageListAdapter.java b/src/com/android/settings/inputmethod/MouseKeysImageListAdapter.java
new file mode 100644
index 0000000..65024b1
--- /dev/null
+++ b/src/com/android/settings/inputmethod/MouseKeysImageListAdapter.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.inputmethod;
+
+import android.content.Context;
+import android.view.InputDevice;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.settings.R;
+
+import com.google.common.collect.ImmutableList;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+public class MouseKeysImageListAdapter extends
+ RecyclerView.Adapter<MouseKeysImageListAdapter.MouseKeyImageViewHolder> {
+ private static final ImmutableList<Integer> DRAWABLE_LIST = ImmutableList.of(
+ R.drawable.mouse_keys_directional, R.drawable.mouse_keys_click,
+ R.drawable.mouse_keys_press_hold, R.drawable.mouse_keys_release,
+ R.drawable.mouse_keys_toggle_scroll, R.drawable.mouse_keys_release2);
+ private static final ImmutableList<Integer> DIRECTIONAL_CHAR_KEYCODE_LIST = ImmutableList.of(
+ KeyEvent.KEYCODE_7, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_9, KeyEvent.KEYCODE_U,
+ KeyEvent.KEYCODE_O, KeyEvent.KEYCODE_J, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_L
+ );
+ private static final int LEFT_CLICK_CHAR_KEYCODE =
+ KeyEvent.KEYCODE_I;
+ private static final int PRESS_HOLD_CHAR_KEYCODE =
+ KeyEvent.KEYCODE_M;
+ private static final int RELEASE_CHAR_KEYCODE =
+ KeyEvent.KEYCODE_COMMA;
+ private static final ImmutableList<Integer> TOGGLE_SCROLL_CHAR_KEYCODE_LIST = ImmutableList.of(
+ KeyEvent.KEYCODE_PERIOD, KeyEvent.KEYCODE_8, KeyEvent.KEYCODE_K, KeyEvent.KEYCODE_O,
+ KeyEvent.KEYCODE_U
+ );
+ private static final int RIGHT_CLICK_CHAR_KEYCODE =
+ KeyEvent.KEYCODE_SLASH;
+ private final List<String> mComposedSummaryList = new ArrayList<>();
+
+ public MouseKeysImageListAdapter(@NonNull Context context,
+ @Nullable InputDevice currentInputDevice) {
+ composeSummaryForImages(context, currentInputDevice);
+ }
+
+ @NonNull
+ @Override
+ public MouseKeyImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.mouse_keys_image_item, parent, false);
+ return new MouseKeyImageViewHolder(view, parent.getContext());
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull MouseKeyImageViewHolder holder, int position) {
+ ((MouseKeyImageViewHolder) holder).bindView(DRAWABLE_LIST.get(position),
+ mComposedSummaryList.get(position));
+ }
+
+ @Override
+ public int getItemCount() {
+ return DRAWABLE_LIST.size();
+ }
+
+ private void composeSummaryForImages(Context context,
+ @Nullable InputDevice currentInputDevice) {
+ if (currentInputDevice == null) {
+ return;
+ }
+ mComposedSummaryList.clear();
+ List<String> directionalLabelList = DIRECTIONAL_CHAR_KEYCODE_LIST.stream().map(
+ (key) -> getDisplayLabel(currentInputDevice, key)).toList();
+ mComposedSummaryList.add(context.getString(R.string.mouse_keys_directional_summary,
+ String.join(",", directionalLabelList)));
+ String leftClickLabel = getDisplayLabel(currentInputDevice, LEFT_CLICK_CHAR_KEYCODE);
+ mComposedSummaryList.add(
+ context.getString(R.string.mouse_keys_click_summary, leftClickLabel));
+ String pressHoldLabel = getDisplayLabel(currentInputDevice, PRESS_HOLD_CHAR_KEYCODE);
+ mComposedSummaryList.add(
+ context.getString(R.string.mouse_keys_press_hold_summary, pressHoldLabel));
+ String releaseLabel = getDisplayLabel(currentInputDevice, RELEASE_CHAR_KEYCODE);
+ mComposedSummaryList.add(
+ context.getString(R.string.mouse_keys_release_summary, releaseLabel));
+ List<String> toggleScrollLabelList = TOGGLE_SCROLL_CHAR_KEYCODE_LIST.stream().map(
+ (key) -> getDisplayLabel(currentInputDevice, key)).toList();
+ mComposedSummaryList.add(context.getString(R.string.mouse_keys_toggle_scroll_summary,
+ toggleScrollLabelList.getFirst(),
+ String.join(",", toggleScrollLabelList.subList(1, toggleScrollLabelList.size()))
+ ));
+ String rightClickLabel = getDisplayLabel(currentInputDevice, RIGHT_CLICK_CHAR_KEYCODE);
+ mComposedSummaryList.add(
+ context.getString(R.string.mouse_keys_release2_summary, rightClickLabel));
+ }
+
+ private String getDisplayLabel(InputDevice currentInputDevice, int keycode) {
+ return String.valueOf(currentInputDevice.getKeyCharacterMap().getDisplayLabel(
+ currentInputDevice.getKeyCodeForKeyLocation(keycode))).toLowerCase(Locale.ROOT);
+ }
+
+ public static class MouseKeyImageViewHolder extends RecyclerView.ViewHolder {
+ private final TextView mTextView;
+ private final Context mContext;
+
+ public MouseKeyImageViewHolder(View itemView, Context context) {
+ super(itemView);
+ mTextView = (TextView) itemView;
+ mContext = context;
+ }
+
+ void bindView(int drawableRes, String summary) {
+ mTextView.setText(summary);
+ mTextView.setCompoundDrawablesWithIntrinsicBounds(null,
+ mContext.getDrawable(drawableRes), null, null);
+ }
+ }
+}
diff --git a/src/com/android/settings/inputmethod/MouseKeysMainPageFragment.java b/src/com/android/settings/inputmethod/MouseKeysMainPageFragment.java
new file mode 100644
index 0000000..dd9c1dd
--- /dev/null
+++ b/src/com/android/settings/inputmethod/MouseKeysMainPageFragment.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.inputmethod;
+
+import static com.android.settings.inputmethod.PhysicalKeyboardFragment.getHardKeyboards;
+
+import android.app.settings.SettingsEnums;
+import android.content.Context;
+import android.hardware.input.InputManager;
+import android.os.Bundle;
+import android.view.InputDevice;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.preference.PreferenceScreen;
+import androidx.recyclerview.widget.GridLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.android.internal.util.Preconditions;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.keyboard.Flags;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.search.SearchIndexable;
+import com.android.settingslib.utils.ThreadUtils;
+import com.android.settingslib.widget.LayoutPreference;
+
+import java.util.List;
+
+@SearchIndexable
+public class MouseKeysMainPageFragment extends DashboardFragment
+ implements InputManager.InputDeviceListener {
+
+ private static final String TAG = "MouseKeysMainPageFragment";
+ private static final String KEY_MOUSE_KEY_LIST = "mouse_keys_list";
+
+ private InputManager mInputManager;
+ private LayoutPreference mMouseKeyImagesPreference;
+ @Nullable
+ private InputDevice mCurrentInputDevice;
+
+ @Override
+ public void onCreate(@NonNull Bundle bundle) {
+ super.onCreate(bundle);
+ mCurrentInputDevice = getInputDevice();
+ final PreferenceScreen screen = getPreferenceScreen();
+ mMouseKeyImagesPreference = screen.findPreference(KEY_MOUSE_KEY_LIST);
+ mInputManager = Preconditions.checkNotNull(getActivity()
+ .getSystemService(InputManager.class));
+ String title = mCurrentInputDevice == null ? getActivity().getString(R.string.mouse_keys)
+ : getActivity().getString(R.string.mouse_key_main_page_title,
+ mCurrentInputDevice.getName());
+ getActivity().setTitle(title);
+ configureImagesPreference();
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ finishEarlyIfNeeded();
+ mInputManager.registerInputDeviceListener(this, null);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ mInputManager.unregisterInputDeviceListener(this);
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return SettingsEnums.PHYSICAL_KEYBOARD_A11Y;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.mouse_keys_main_page;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ public void onInputDeviceAdded(int deviceId) {
+ finishEarlyIfNeeded();
+ }
+
+ @Override
+ public void onInputDeviceRemoved(int deviceId) {
+ finishEarlyIfNeeded();
+ }
+
+ @Override
+ public void onInputDeviceChanged(int deviceId) {
+ finishEarlyIfNeeded();
+ }
+
+ private void finishEarlyIfNeeded() {
+ final Context context = getContext();
+ ThreadUtils.postOnBackgroundThread(() -> {
+ final List<PhysicalKeyboardFragment.HardKeyboardDeviceInfo> newHardKeyboards =
+ getHardKeyboards(context);
+ if (newHardKeyboards.isEmpty()) {
+ getActivity().finish();
+ }
+ });
+ }
+
+ private void configureImagesPreference() {
+ final RecyclerView recyclerView = mMouseKeyImagesPreference.findViewById(
+ R.id.mouse_keys_image_recycler_list);
+ recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
+ recyclerView.setAdapter(new MouseKeysImageListAdapter(getActivity(), mCurrentInputDevice));
+ }
+
+ /**
+ * Priority of picking input device:
+ * 1. internal keyboard(built-in keyboard)
+ * 2. first keyboard in the list
+ */
+ @Nullable
+ private InputDevice getInputDevice() {
+ InputDevice inputDevice = null;
+ for (int deviceId : InputDevice.getDeviceIds()) {
+ final InputDevice device = InputDevice.getDevice(deviceId);
+ if (device == null || device.isVirtual() || !device.isFullKeyboard()) {
+ continue;
+ }
+ if (inputDevice == null) {
+ inputDevice = device;
+ } else if (!device.isExternal()) {
+ inputDevice = device;
+ break;
+ }
+ }
+ return inputDevice;
+ }
+
+ public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider(R.xml.mouse_keys_main_page) {
+ @Override
+ protected boolean isPageSearchEnabled(Context context) {
+ return Flags.keyboardAndTouchpadA11yNewPageEnabled()
+ && !getHardKeyboards(context).isEmpty();
+ }
+ };
+}
diff --git a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
index 48100a3..edc9989 100644
--- a/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
+++ b/src/com/android/settings/inputmethod/PhysicalKeyboardFragment.java
@@ -289,11 +289,12 @@
getActivity().finish();
return;
}
- ThreadUtils.postOnMainThread(() -> updateHardKeyboards(newHardKeyboards));
+ ThreadUtils.postOnMainThread(() -> updateHardKeyboards(context, newHardKeyboards));
});
}
- private void updateHardKeyboards(@NonNull List<HardKeyboardDeviceInfo> newHardKeyboards) {
+ private void updateHardKeyboards(@NonNull Context context,
+ @NonNull List<HardKeyboardDeviceInfo> newHardKeyboards) {
if (Objects.equals(mLastHardKeyboards, newHardKeyboards)) {
// Nothing has changed. Ignore.
return;
@@ -316,7 +317,7 @@
final Preference pref = new Preference(getPrefContext());
pref.setTitle(hardKeyboardDeviceInfo.mDeviceName);
String currentLayout =
- NewKeyboardSettingsUtils.getSelectedKeyboardLayoutLabelForUser(getContext(),
+ NewKeyboardSettingsUtils.getSelectedKeyboardLayoutLabelForUser(context,
UserHandle.myUserId(), hardKeyboardDeviceInfo.mDeviceIdentifier);
if (currentLayout != null) {
pref.setSummary(currentLayout);
@@ -336,7 +337,7 @@
vendorAndProductId.append("-");
vendorAndProductId.append(productId);
mMetricsFeatureProvider.action(
- getContext(),
+ context,
SettingsEnums.ACTION_USE_SPECIFIC_KEYBOARD,
vendorAndProductId.toString());
}
@@ -352,10 +353,10 @@
|| InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
Objects.requireNonNull(mKeyboardA11yCategory).setOrder(2);
preferenceScreen.addPreference(mKeyboardA11yCategory);
- updateAccessibilityBounceKeysSwitch();
- updateAccessibilitySlowKeysSwitch();
- updateAccessibilityStickyKeysSwitch();
- updateAccessibilityMouseKeysSwitch();
+ updateAccessibilityBounceKeysSwitch(context);
+ updateAccessibilitySlowKeysSwitch(context);
+ updateAccessibilityStickyKeysSwitch(context);
+ updateAccessibilityMouseKeysSwitch(context);
}
}
@@ -413,46 +414,47 @@
mContentObserver,
UserHandle.myUserId());
}
- updateAccessibilityBounceKeysSwitch();
- updateAccessibilitySlowKeysSwitch();
- updateAccessibilityStickyKeysSwitch();
- updateAccessibilityMouseKeysSwitch();
+ final Context context = getContext();
+ updateAccessibilityBounceKeysSwitch(context);
+ updateAccessibilitySlowKeysSwitch(context);
+ updateAccessibilityStickyKeysSwitch(context);
+ updateAccessibilityMouseKeysSwitch(context);
}
private void unregisterSettingsObserver() {
getActivity().getContentResolver().unregisterContentObserver(mContentObserver);
}
- private void updateAccessibilityBounceKeysSwitch() {
+ private void updateAccessibilityBounceKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilityBounceKeysFeatureEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilityBounceKeys).setChecked(
- InputSettings.isAccessibilityBounceKeysEnabled(getContext()));
+ InputSettings.isAccessibilityBounceKeysEnabled(context));
}
- private void updateAccessibilitySlowKeysSwitch() {
+ private void updateAccessibilitySlowKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilitySlowKeysFeatureFlagEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilitySlowKeys).setChecked(
- InputSettings.isAccessibilitySlowKeysEnabled(getContext()));
+ InputSettings.isAccessibilitySlowKeysEnabled(context));
}
- private void updateAccessibilityStickyKeysSwitch() {
+ private void updateAccessibilityStickyKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilityStickyKeysFeatureEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilityStickyKeys).setChecked(
- InputSettings.isAccessibilityStickyKeysEnabled(getContext()));
+ InputSettings.isAccessibilityStickyKeysEnabled(context));
}
- private void updateAccessibilityMouseKeysSwitch() {
+ private void updateAccessibilityMouseKeysSwitch(@NonNull Context context) {
if (!InputSettings.isAccessibilityMouseKeysFeatureFlagEnabled()) {
return;
}
Objects.requireNonNull(mAccessibilityMouseKeys).setChecked(
- InputSettings.isAccessibilityMouseKeysEnabled(getContext()));
+ InputSettings.isAccessibilityMouseKeysEnabled(context));
}
private void toggleKeyboardShortcutsMenu() {
@@ -489,13 +491,13 @@
@Override
public void onChange(boolean selfChange, Uri uri) {
if (sAccessibilityBounceKeysUri.equals(uri)) {
- updateAccessibilityBounceKeysSwitch();
+ updateAccessibilityBounceKeysSwitch(getContext());
} else if (sAccessibilitySlowKeysUri.equals(uri)) {
- updateAccessibilitySlowKeysSwitch();
+ updateAccessibilitySlowKeysSwitch(getContext());
} else if (sAccessibilityStickyKeysUri.equals(uri)) {
- updateAccessibilityStickyKeysSwitch();
+ updateAccessibilityStickyKeysSwitch(getContext());
} else if (sAccessibilityMouseKeysUri.equals(uri)) {
- updateAccessibilityMouseKeysSwitch();
+ updateAccessibilityMouseKeysSwitch(getContext());
}
}
};
diff --git a/src/com/android/settings/language/LanguageSettingScreen.kt b/src/com/android/settings/language/LanguageSettingScreen.kt
new file mode 100644
index 0000000..09ca11b
--- /dev/null
+++ b/src/com/android/settings/language/LanguageSettingScreen.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.language
+
+import android.content.ComponentName
+import android.content.Context
+import android.content.pm.PackageManager
+import com.android.settings.R
+import com.android.settings.Settings.LanguageSettingsActivity
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class LanguageSettingScreen: PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.languages_settings
+
+ override val summary: Int
+ get() = R.string.languages_setting_summary
+
+ override val icon: Int
+ get() = R.drawable.ic_settings_languages
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystLanguageSetting()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = LanguageSettings::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "language_setting"
+ }
+}
diff --git a/src/com/android/settings/language/LanguageSettings.java b/src/com/android/settings/language/LanguageSettings.java
index a5adb02..d992ff2 100644
--- a/src/com/android/settings/language/LanguageSettings.java
+++ b/src/com/android/settings/language/LanguageSettings.java
@@ -67,6 +67,11 @@
}
@Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return LanguageSettingScreen.KEY;
+ }
+
+ @Override
protected int getPreferenceScreenResId() {
return R.xml.language_settings;
}
diff --git a/src/com/android/settings/localepicker/TermsOfAddressBaseController.java b/src/com/android/settings/localepicker/TermsOfAddressBaseController.java
index 86b139e..889acf0 100644
--- a/src/com/android/settings/localepicker/TermsOfAddressBaseController.java
+++ b/src/com/android/settings/localepicker/TermsOfAddressBaseController.java
@@ -23,8 +23,8 @@
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -32,9 +32,9 @@
public abstract class TermsOfAddressBaseController extends BasePreferenceController {
private static final Executor sExecutor = Executors.newSingleThreadExecutor();
- private PreferenceScreen mPreferenceScreen;
private MetricsFeatureProvider mMetricsFeatureProvider;
- private TickButtonPreference mPreference;
+ private SelectorWithWidgetPreference mPreference;
+
private TermsOfAddressHelper mTermsOfAddressHelper;
public TermsOfAddressBaseController(Context context, String preferenceKey) {
@@ -49,34 +49,17 @@
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- mPreferenceScreen = screen;
mPreference = screen.findPreference(getPreferenceKey());
- mPreference.setOnPreferenceClickListener(clickedPref -> {
+ mPreference.setChecked(
+ mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType());
+ mPreference.setOnClickListener(v -> {
sExecutor.execute(
() -> {
mTermsOfAddressHelper.setSystemGrammaticalGender(
getGrammaticalGenderType());
});
- setSelected(mPreference);
mMetricsFeatureProvider.action(mContext, getMetricsActionKey());
- return true;
});
- updatePreferences();
- }
-
- private void setSelected(TickButtonPreference preference) {
- for (int i = 1; i < mPreferenceScreen.getPreferenceCount(); i++) {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceScreen.getPreference(i);
- pref.setSelected(pref.getKey().equals(preference.getKey()));
- }
- }
-
- private void updatePreferences() {
- if (mPreference == null) {
- return;
- }
- mPreference.setSelected(
- mTermsOfAddressHelper.getSystemGrammaticalGender() == getGrammaticalGenderType());
}
@Override
diff --git a/src/com/android/settings/location/LocationScreen.kt b/src/com/android/settings/location/LocationScreen.kt
new file mode 100644
index 0000000..d45b762
--- /dev/null
+++ b/src/com/android/settings/location/LocationScreen.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.location
+
+import android.content.Context
+import android.location.LocationManager
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceIconProvider
+import com.android.settingslib.metadata.PreferenceSummaryProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class LocationScreen : PreferenceScreenCreator, PreferenceSummaryProvider, PreferenceIconProvider {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.location_settings_title
+
+ override val keywords: Int
+ get() = R.string.keywords_location
+
+ override fun getSummary(context: Context): CharSequence? {
+ var locationManager = context.getSystemService(Context.LOCATION_SERVICE) as LocationManager
+ return if (locationManager.isLocationEnabled) {
+ context.getString(R.string.location_settings_loading_app_permission_stats)
+ } else {
+ context.getString(R.string.location_settings_summary_location_off)
+ }
+ }
+
+ override fun getIcon(context: Context) =
+ when {
+ Flags.homepageRevamp() -> R.drawable.ic_settings_location_filled
+ else -> R.drawable.ic_settings_location
+ }
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystLocationSettings()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = LocationSettings::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "location_settings"
+ }
+}
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index 87e8817..6a1d3d2 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -29,6 +29,8 @@
import android.provider.Settings;
import android.util.Log;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
@@ -185,4 +187,9 @@
R.string.location_settings_tooltip_text_for_chrome));
}
}
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return LocationScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/network/AdaptiveConnectivityScreen.kt b/src/com/android/settings/network/AdaptiveConnectivityScreen.kt
new file mode 100644
index 0000000..0604236
--- /dev/null
+++ b/src/com/android/settings/network/AdaptiveConnectivityScreen.kt
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class AdaptiveConnectivityScreen : PreferenceScreenCreator {
+ override val key
+ get() = KEY
+
+ override val title
+ get() = R.string.adaptive_connectivity_title
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystAdaptiveConnectivity()
+
+ override fun fragmentClass() = AdaptiveConnectivitySettings::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
+ +AdaptiveConnectivityTogglePreference()
+ }
+
+ override fun hasCompleteHierarchy() = false
+
+ companion object {
+ const val KEY = "adaptive_connectivity"
+ }
+}
diff --git a/src/com/android/settings/network/AdaptiveConnectivitySettings.java b/src/com/android/settings/network/AdaptiveConnectivitySettings.java
index 5e1dc12..a4e872c 100644
--- a/src/com/android/settings/network/AdaptiveConnectivitySettings.java
+++ b/src/com/android/settings/network/AdaptiveConnectivitySettings.java
@@ -16,6 +16,10 @@
package com.android.settings.network;
import android.app.settings.SettingsEnums;
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
@@ -30,8 +34,6 @@
private static final String TAG = "AdaptiveConnectivitySettings";
- private static final String KEY_ADAPTIVE_CONNECTIVITY_PREFERENCE = "adaptive_connectivity";
-
@Override
public int getMetricsCategory() {
return SettingsEnums.ADAPTIVE_CONNECTIVITY_CATEGORY;
@@ -49,4 +51,9 @@
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.adaptive_connectivity_settings);
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return AdaptiveConnectivityScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt b/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt
new file mode 100644
index 0000000..e1aea85
--- /dev/null
+++ b/src/com/android/settings/network/AdaptiveConnectivityTogglePreference.kt
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network
+
+import android.content.Context
+import android.net.wifi.WifiManager
+import android.provider.Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED
+import androidx.preference.Preference
+import com.android.settings.R
+import com.android.settingslib.datastore.SettingsSecureStore
+import com.android.settingslib.metadata.MainSwitchPreference
+import com.android.settingslib.metadata.PreferenceMetadata
+import com.android.settingslib.preference.MainSwitchPreferenceBinding
+
+// LINT.IfChange
+class AdaptiveConnectivityTogglePreference :
+ MainSwitchPreference(
+ ADAPTIVE_CONNECTIVITY_ENABLED,
+ R.string.adaptive_connectivity_main_switch_title,
+ ),
+ MainSwitchPreferenceBinding,
+ Preference.OnPreferenceChangeListener {
+
+ override fun storage(context: Context) = SettingsSecureStore.get(context)
+
+ override fun bind(preference: Preference, metadata: PreferenceMetadata) {
+ super.bind(preference, metadata)
+ preference.onPreferenceChangeListener = this
+ }
+
+ override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
+ val isChecked = newValue as Boolean
+ preference.context
+ .getSystemService(WifiManager::class.java)
+ ?.setWifiScoringEnabled(isChecked)
+ return true
+ }
+}
+// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceController.java)
diff --git a/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java b/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java
index ea849f6..e1a3fb4 100644
--- a/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java
+++ b/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceController.java
@@ -29,6 +29,7 @@
* {@link SettingsMainSwitchPreferenceController}
* that controls whether Adaptive connectivity option is enabled.
*/
+// LINT.IfChange
public class AdaptiveConnectivityTogglePreferenceController extends
SettingsMainSwitchPreferenceController {
@@ -69,3 +70,4 @@
return R.string.menu_key_network;
}
}
+// LINT.ThenChange(AdaptiveConnectivityTogglePreference.kt)
diff --git a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
index b8e18b3..ad02ddb 100644
--- a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
+++ b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
@@ -16,7 +16,6 @@
package com.android.settings.network;
-import android.app.AlertDialog;
import android.app.Dialog;
import android.app.settings.SettingsEnums;
import android.content.Context;
@@ -27,13 +26,14 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settings.system.ResetDashboardFragment;
import com.android.settings.network.telephony.MobileNetworkUtils;
+import com.android.settings.system.ResetDashboardFragment;
public class EraseEuiccDataDialogFragment extends InstrumentedDialogFragment implements
DialogInterface.OnClickListener {
diff --git a/src/com/android/settings/network/MobileNetworkListFragment.kt b/src/com/android/settings/network/MobileNetworkListFragment.kt
index 3118088..a0da636 100644
--- a/src/com/android/settings/network/MobileNetworkListFragment.kt
+++ b/src/com/android/settings/network/MobileNetworkListFragment.kt
@@ -92,4 +92,6 @@
simRepositoryFactory(context).canEnterMobileNetworkPage()
}
}
+
+ override fun getPreferenceScreenBindingKey(context: Context) = MobileNetworkListScreen.KEY
}
diff --git a/src/com/android/settings/network/MobileNetworkListScreen.kt b/src/com/android/settings/network/MobileNetworkListScreen.kt
new file mode 100644
index 0000000..93d8ee6
--- /dev/null
+++ b/src/com/android/settings/network/MobileNetworkListScreen.kt
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.network
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class MobileNetworkListScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.provider_network_settings_title
+
+ override val icon: Int
+ get() = R.drawable.ic_sim_card
+
+ override val keywords: Int
+ get() = R.string.keywords_more_mobile_networks
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystMobileNetworkList()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = MobileNetworkListFragment::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "mobile_network_list"
+ }
+}
diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java
index ee7d440..2585d04 100644
--- a/src/com/android/settings/network/NetworkDashboardFragment.java
+++ b/src/com/android/settings/network/NetworkDashboardFragment.java
@@ -19,6 +19,7 @@
import android.content.Context;
import android.content.Intent;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.settings.R;
@@ -115,4 +116,9 @@
return buildPreferenceControllers(context, null /* lifecycle */);
}
};
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return NetworkDashboardScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/network/NetworkDashboardScreen.kt b/src/com/android/settings/network/NetworkDashboardScreen.kt
new file mode 100644
index 0000000..ad4ca41
--- /dev/null
+++ b/src/com/android/settings/network/NetworkDashboardScreen.kt
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.network
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceIconProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class NetworkDashboardScreen : PreferenceScreenCreator, PreferenceIconProvider {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.network_dashboard_title
+
+ override fun getIcon(context: Context) =
+ when {
+ Flags.homepageRevamp() -> R.drawable.ic_settings_wireless_filled
+ else -> R.drawable.ic_settings_wireless
+ }
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystNetworkProviderAndInternetScreen()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = NetworkDashboardFragment::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "network_provider_and_internet_screen"
+ }
+}
diff --git a/src/com/android/settings/network/NetworkProviderScreen.kt b/src/com/android/settings/network/NetworkProviderScreen.kt
new file mode 100644
index 0000000..fa3ed78
--- /dev/null
+++ b/src/com/android/settings/network/NetworkProviderScreen.kt
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.network
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class NetworkProviderScreen : PreferenceScreenCreator, PreferenceAvailabilityProvider {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.provider_internet_settings
+
+ override val icon: Int
+ get() = R.drawable.ic_settings_wireless
+
+ override val keywords: Int
+ get() = R.string.keywords_internet
+
+ override fun isAvailable(context: Context) =
+ context.resources.getBoolean(R.bool.config_show_internet_settings)
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystInternetSettings()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = NetworkProviderSettings::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "internet_settings"
+ }
+}
diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java
index 69183ff..455201a 100644
--- a/src/com/android/settings/network/NetworkProviderSettings.java
+++ b/src/com/android/settings/network/NetworkProviderSettings.java
@@ -64,8 +64,8 @@
import com.android.settings.AirplaneModeEnabler;
import com.android.settings.R;
-import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.datausage.DataUsagePreference;
import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.location.WifiScanningFragment;
@@ -104,7 +104,7 @@
* UI for Mobile network and Wi-Fi network settings.
*/
@SearchIndexable
-public class NetworkProviderSettings extends RestrictedSettingsFragment
+public class NetworkProviderSettings extends RestrictedDashboardFragment
implements Indexable, WifiPickerTracker.WifiPickerTrackerCallback,
WifiDialog2.WifiDialog2Listener, DialogInterface.OnDismissListener,
AirplaneModeEnabler.OnAirplaneModeChangedListener, InternetUpdater.InternetChangeListener {
@@ -356,9 +356,17 @@
mIsGuest = userManager.isGuestUser();
}
- private void addPreferences() {
- addPreferencesFromResource(R.xml.network_provider_settings);
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.network_provider_settings;
+ }
+
+ private void addPreferences() {
mAirplaneModeMsgPreference = findPreference(PREF_KEY_AIRPLANE_MODE_MSG);
updateAirplaneModeMsgPreference(mAirplaneModeEnabler.isAirplaneModeOn() /* visible */);
mConnectedWifiEntryPreferenceCategory = findPreference(PREF_KEY_CONNECTED_ACCESS_POINTS);
@@ -1500,4 +1508,9 @@
return android.R.attr.colorControlNormal;
}
}
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return NetworkProviderScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt
index 7fab9c9..8f9cc8f 100644
--- a/src/com/android/settings/network/SimOnboardingActivity.kt
+++ b/src/com/android/settings/network/SimOnboardingActivity.kt
@@ -19,6 +19,7 @@
import android.content.Context
import android.content.Intent
import android.os.Bundle
+import android.os.UserHandle;
import android.provider.Settings
import android.telephony.SubscriptionManager
import android.util.Log
@@ -588,7 +589,7 @@
setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
}
- context.startActivity(intent)
+ context.startActivityAsUser(intent, UserHandle.CURRENT)
}
var onboardingService:SimOnboardingService = SimOnboardingService()
diff --git a/src/com/android/settings/network/SimOnboardingService.kt b/src/com/android/settings/network/SimOnboardingService.kt
index e4f17e2..0882b81 100644
--- a/src/com/android/settings/network/SimOnboardingService.kt
+++ b/src/com/android/settings/network/SimOnboardingService.kt
@@ -74,8 +74,11 @@
}
var isEsimProfileEnabled: Boolean = false
get() {
- activeSubInfoList.stream().anyMatch { it.isEmbedded }
- return false
+ return activeSubInfoList.stream().anyMatch { it.isEmbedded }
+ }
+ var isRemovableSimProfileEnabled: Boolean = false
+ get() {
+ return activeSubInfoList.stream().anyMatch { !it.isEmbedded }
}
var doesTargetSimActive = false
get() {
@@ -288,8 +291,8 @@
Log.d(TAG, "Hardware does not support DSDS.")
return false
}
- val isActiveSim = activeSubInfoList.isNotEmpty()
- if (isMultipleEnabledProfilesSupported && isActiveSim) {
+ val anyActiveSim = activeSubInfoList.isNotEmpty()
+ if (isMultipleEnabledProfilesSupported && anyActiveSim) {
Log.d(TAG,
"Device supports MEP and eSIM operation and eSIM profile is enabled."
+ " DSDS condition satisfied."
@@ -297,15 +300,13 @@
return true
}
- if (doesTargetSimHaveEsimOperation) {
- if (UiccSlotRepository(telephonyManager).anyRemovablePhysicalSimEnabled()) {
- Log.d(
- TAG,
- "eSIM operation and removable PSIM is enabled. DSDS condition satisfied."
- )
- return true
- }
- } else if (isEsimProfileEnabled) {
+ if (doesTargetSimHaveEsimOperation && isRemovableSimProfileEnabled) {
+ Log.d(TAG,
+ "eSIM operation and removable PSIM is enabled. DSDS condition satisfied."
+ )
+ return true
+ }
+ if (!doesTargetSimHaveEsimOperation && isEsimProfileEnabled) {
Log.d(TAG,
"Removable SIM operation and eSIM profile is enabled. DSDS condition"
+ " satisfied."
diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java
index dc9741d..533fd29 100644
--- a/src/com/android/settings/network/apn/ApnEditor.java
+++ b/src/com/android/settings/network/apn/ApnEditor.java
@@ -16,153 +16,33 @@
package com.android.settings.network.apn;
-import android.app.Dialog;
+import static com.android.settings.network.apn.ApnEditPageProviderKt.EDIT_URL;
+import static com.android.settings.network.apn.ApnEditPageProviderKt.INSERT_URL;
+
import android.app.settings.SettingsEnums;
-import android.content.ContentValues;
-import android.content.Context;
import android.content.Intent;
-import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.UserManager;
import android.provider.Telephony;
import android.telephony.CarrierConfigManager;
-import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
import android.util.Log;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.View.OnKeyListener;
-import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
-import androidx.appcompat.app.AlertDialog;
-import androidx.preference.EditTextPreference;
-import androidx.preference.ListPreference;
-import androidx.preference.MultiSelectListPreference;
-import androidx.preference.Preference;
-import androidx.preference.Preference.OnPreferenceChangeListener;
-import androidx.preference.TwoStatePreference;
import com.android.internal.util.ArrayUtils;
-import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
-import com.android.settings.network.ProxySubscriptionManager;
-import com.android.settingslib.utils.ThreadUtils;
+import com.android.settings.spa.SpaActivity;
import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
-import java.util.Objects;
-import java.util.Set;
/** Use to edit apn settings. */
-public class ApnEditor extends SettingsPreferenceFragment
- implements OnPreferenceChangeListener, OnKeyListener {
+public class ApnEditor extends SettingsPreferenceFragment {
private static final String TAG = ApnEditor.class.getSimpleName();
- private static final boolean VDBG = false; // STOPSHIP if true
-
- private static final String KEY_AUTH_TYPE = "auth_type";
- private static final String KEY_APN_TYPE = "apn_type";
- private static final String KEY_PROTOCOL = "apn_protocol";
- private static final String KEY_ROAMING_PROTOCOL = "apn_roaming_protocol";
- private static final String KEY_CARRIER_ENABLED = "carrier_enabled";
- private static final String KEY_BEARER_MULTI = "bearer_multi";
- private static final String KEY_MVNO_TYPE = "mvno_type";
- private static final String KEY_PASSWORD = "apn_password";
-
- @VisibleForTesting
- static final int MENU_DELETE = Menu.FIRST;
- private static final int MENU_SAVE = Menu.FIRST + 1;
- private static final int MENU_CANCEL = Menu.FIRST + 2;
-
- @VisibleForTesting
- static String sNotSet;
- @VisibleForTesting
- EditTextPreference mName;
- @VisibleForTesting
- EditTextPreference mApn;
- @VisibleForTesting
- EditTextPreference mProxy;
- @VisibleForTesting
- EditTextPreference mPort;
- @VisibleForTesting
- EditTextPreference mUser;
- @VisibleForTesting
- EditTextPreference mServer;
- @VisibleForTesting
- EditTextPreference mPassword;
- @VisibleForTesting
- EditTextPreference mMmsc;
- @VisibleForTesting
- EditTextPreference mMcc;
- @VisibleForTesting
- EditTextPreference mMnc;
- @VisibleForTesting
- EditTextPreference mMmsProxy;
- @VisibleForTesting
- EditTextPreference mMmsPort;
- @VisibleForTesting
- ListPreference mAuthType;
- @VisibleForTesting
- EditTextPreference mApnType;
- @VisibleForTesting
- ListPreference mProtocol;
- @VisibleForTesting
- ListPreference mRoamingProtocol;
- @VisibleForTesting
- TwoStatePreference mCarrierEnabled;
- @VisibleForTesting
- MultiSelectListPreference mBearerMulti;
- @VisibleForTesting
- ListPreference mMvnoType;
- @VisibleForTesting
- EditTextPreference mMvnoMatchData;
-
- @VisibleForTesting
- ApnData mApnData;
-
- private String mCurMnc;
- private String mCurMcc;
-
- private boolean mNewApn;
- private int mSubId;
- @VisibleForTesting
- ProxySubscriptionManager mProxySubscriptionMgr;
- private int mBearerInitialVal = 0;
- private String mMvnoTypeStr;
- private String mMvnoMatchDataStr;
- @VisibleForTesting
- String[] mReadOnlyApnTypes;
- @VisibleForTesting
- String[] mDefaultApnTypes;
- @VisibleForTesting
- String mDefaultApnProtocol;
- @VisibleForTesting
- String mDefaultApnRoamingProtocol;
- private String[] mReadOnlyApnFields;
- private boolean mReadOnlyApn;
- /**
- * The APN deletion feature within menu is aligned with the APN adding feature.
- * Having only one of them could lead to a UX which not that make sense from user's
- * perspective.
- *
- * mIsAddApnAllowed stores the configuration value reading from
- * CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL to support the presentation
- * control of the menu options. When false, delete option would be invisible to
- * the end user.
- */
- private boolean mIsAddApnAllowed;
- private Uri mCarrierUri;
- private boolean mIsCarrierIdApn;
/**
* APN types for data connections. These are usage categories for an APN
@@ -225,150 +105,41 @@
APN_TYPE_OEM_PRIVATE,
};
- /**
- * Standard projection for the interesting columns of a normal note.
- */
- private static final String[] sProjection = new String[] {
- Telephony.Carriers._ID, // 0
- Telephony.Carriers.NAME, // 1
- Telephony.Carriers.APN, // 2
- Telephony.Carriers.PROXY, // 3
- Telephony.Carriers.PORT, // 4
- Telephony.Carriers.USER, // 5
- Telephony.Carriers.SERVER, // 6
- Telephony.Carriers.PASSWORD, // 7
- Telephony.Carriers.MMSC, // 8
- Telephony.Carriers.MCC, // 9
- Telephony.Carriers.MNC, // 10
- Telephony.Carriers.NUMERIC, // 11
- Telephony.Carriers.MMSPROXY, // 12
- Telephony.Carriers.MMSPORT, // 13
- Telephony.Carriers.AUTH_TYPE, // 14
- Telephony.Carriers.TYPE, // 15
- Telephony.Carriers.PROTOCOL, // 16
- Telephony.Carriers.CARRIER_ENABLED, // 17
- Telephony.Carriers.BEARER, // 18
- Telephony.Carriers.BEARER_BITMASK, // 19
- Telephony.Carriers.ROAMING_PROTOCOL, // 20
- Telephony.Carriers.MVNO_TYPE, // 21
- Telephony.Carriers.MVNO_MATCH_DATA, // 22
- Telephony.Carriers.EDITED_STATUS, // 23
- Telephony.Carriers.USER_EDITABLE, // 24
- Telephony.Carriers.CARRIER_ID // 25
- };
-
- private static final int ID_INDEX = 0;
- @VisibleForTesting
- static final int NAME_INDEX = 1;
- @VisibleForTesting
- static final int APN_INDEX = 2;
- private static final int PROXY_INDEX = 3;
- private static final int PORT_INDEX = 4;
- private static final int USER_INDEX = 5;
- private static final int SERVER_INDEX = 6;
- private static final int PASSWORD_INDEX = 7;
- private static final int MMSC_INDEX = 8;
- @VisibleForTesting
- static final int MCC_INDEX = 9;
- @VisibleForTesting
- static final int MNC_INDEX = 10;
- private static final int MMSPROXY_INDEX = 12;
- private static final int MMSPORT_INDEX = 13;
- private static final int AUTH_TYPE_INDEX = 14;
- @VisibleForTesting
- static final int TYPE_INDEX = 15;
- @VisibleForTesting
- static final int PROTOCOL_INDEX = 16;
- @VisibleForTesting
- static final int CARRIER_ENABLED_INDEX = 17;
- private static final int BEARER_INDEX = 18;
- private static final int BEARER_BITMASK_INDEX = 19;
- @VisibleForTesting
- static final int ROAMING_PROTOCOL_INDEX = 20;
- private static final int MVNO_TYPE_INDEX = 21;
- private static final int MVNO_MATCH_DATA_INDEX = 22;
- private static final int EDITED_INDEX = 23;
- private static final int USER_EDITABLE_INDEX = 24;
- private static final int CARRIER_ID_INDEX = 25;
-
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
+ maybeRedirectToNewPage();
+ finish();
+ }
+
+ private void maybeRedirectToNewPage() {
if (isUserRestricted()) {
Log.e(TAG, "This setting isn't available due to user restriction.");
- finish();
return;
}
- setLifecycleForAllControllers();
-
final Intent intent = getIntent();
final String action = intent.getAction();
- if (TextUtils.isEmpty(action)) {
- finish();
- return;
- }
- mSubId = intent.getIntExtra(ApnSettings.SUB_ID,
- SubscriptionManager.INVALID_SUBSCRIPTION_ID);
- initApnEditorUi();
- getCarrierCustomizedConfig(getContext());
+ int subId =
+ intent.getIntExtra(ApnSettings.SUB_ID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
- Uri uri = null;
- if (action.equals(Intent.ACTION_EDIT)) {
- uri = intent.getData();
+ Uri uri = intent.getData();
+ if (Intent.ACTION_EDIT.equals(action)) {
if (!uri.isPathPrefixMatch(Telephony.Carriers.CONTENT_URI)) {
Log.e(TAG, "Edit request not for carrier table. Uri: " + uri);
- finish();
- return;
+ } else {
+ String route = ApnEditPageProvider.INSTANCE.getRoute(EDIT_URL, uri, subId);
+ SpaActivity.startSpaActivity(requireContext(), route);
}
- } else if (action.equals(Intent.ACTION_INSERT)) {
- mCarrierUri = intent.getData();
- if (!mCarrierUri.isPathPrefixMatch(Telephony.Carriers.CONTENT_URI)) {
- Log.e(TAG, "Insert request not for carrier table. Uri: " + mCarrierUri);
- finish();
- return;
+ } else if (Intent.ACTION_INSERT.equals(action)) {
+ if (!uri.isPathPrefixMatch(Telephony.Carriers.CONTENT_URI)) {
+ Log.e(TAG, "Insert request not for carrier table. Uri: " + uri);
+ } else {
+ String route = ApnEditPageProvider.INSTANCE.getRoute(
+ INSERT_URL, Telephony.Carriers.CONTENT_URI, subId);
+ SpaActivity.startSpaActivity(getContext(), route);
}
- mNewApn = true;
- mMvnoTypeStr = intent.getStringExtra(ApnSettings.MVNO_TYPE);
- mMvnoMatchDataStr = intent.getStringExtra(ApnSettings.MVNO_MATCH_DATA);
- } else {
- finish();
- return;
- }
-
- // Creates an ApnData to store the apn data temporary, so that we don't need the cursor to
- // get the apn data. The uri is null if the action is ACTION_INSERT, that mean there is no
- // record in the database, so create a empty ApnData to represent a empty row of database.
- if (uri != null) {
- mApnData = getApnDataFromUri(uri);
- } else {
- mApnData = new ApnData(sProjection.length);
- }
- final int carrierId = mApnData.getInteger(CARRIER_ID_INDEX,
- TelephonyManager.UNKNOWN_CARRIER_ID);
- mIsCarrierIdApn = (carrierId > TelephonyManager.UNKNOWN_CARRIER_ID);
-
- final boolean isUserEdited = mApnData.getInteger(EDITED_INDEX,
- Telephony.Carriers.USER_EDITED) == Telephony.Carriers.USER_EDITED;
-
- Log.d(TAG, "onCreate: EDITED " + isUserEdited);
- // if it's not a USER_EDITED apn, check if it's read-only
- if (!isUserEdited && (mApnData.getInteger(USER_EDITABLE_INDEX, 1) == 0
- || apnTypesMatch(mReadOnlyApnTypes, mApnData.getString(TYPE_INDEX)))) {
- Log.d(TAG, "onCreate: apnTypesMatch; read-only APN");
- mReadOnlyApn = true;
- disableAllFields();
- } else if (!ArrayUtils.isEmpty(mReadOnlyApnFields)) {
- disableFields(mReadOnlyApnFields);
- }
- // Make sure that a user cannot break carrier id APN matching
- if (mIsCarrierIdApn) {
- disableFieldsForCarrieridApn();
- }
-
- for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
- getPreferenceScreen().getPreference(i).setOnPreferenceChangeListener(this);
}
}
@@ -385,44 +156,6 @@
}
/**
- * Enable ProxySubscriptionMgr with Lifecycle support for all controllers
- * live within this fragment
- */
- private void setLifecycleForAllControllers() {
- if (mProxySubscriptionMgr == null) {
- mProxySubscriptionMgr = ProxySubscriptionManager.getInstance(getContext());
- }
- mProxySubscriptionMgr.setLifecycle(getLifecycle());
- }
-
- @Override
- public void onViewStateRestored(@Nullable Bundle savedInstanceState) {
- super.onViewStateRestored(savedInstanceState);
- fillUI(savedInstanceState == null);
- setCarrierCustomizedConfigToUi();
- }
-
- @VisibleForTesting
- static String formatInteger(String value) {
- try {
- final int intValue = Integer.parseInt(value);
- return String.format(getCorrectDigitsFormat(value), intValue);
- } catch (NumberFormatException e) {
- return value;
- }
- }
-
- /**
- * Get the digits format so we preserve leading 0's.
- * MCCs are 3 digits and MNCs are either 2 or 3.
- */
- static String getCorrectDigitsFormat(String value) {
- if (value.length() == 2) return "%02d";
- else return "%03d";
- }
-
-
- /**
* Check if passed in array of APN types indicates all APN types
* @param apnTypes array of APN types. "*" indicates all types.
* @return true if all apn types are included in the array, false otherwise
@@ -447,1046 +180,12 @@
return true;
}
- /**
- * Check if APN types overlap.
- * @param apnTypesArray1 array of APNs. Empty array indicates no APN type; "*" indicates all
- * types
- * @param apnTypes2 comma separated string of APN types. Empty string represents all types.
- * @return if any apn type matches return true, otherwise return false
- */
- private boolean apnTypesMatch(String[] apnTypesArray1, String apnTypes2) {
- if (ArrayUtils.isEmpty(apnTypesArray1)) {
- return false;
- }
-
- final String[] apnTypesArray1LowerCase = new String[apnTypesArray1.length];
- for (int i = 0; i < apnTypesArray1.length; i++) {
- apnTypesArray1LowerCase[i] = apnTypesArray1[i].toLowerCase();
- }
-
- if (hasAllApns(apnTypesArray1LowerCase) || TextUtils.isEmpty(apnTypes2)) {
- return true;
- }
-
- final List apnTypesList1 = Arrays.asList(apnTypesArray1LowerCase);
- final String[] apnTypesArray2 = apnTypes2.split(",");
-
- for (String apn : apnTypesArray2) {
- if (apnTypesList1.contains(apn.trim().toLowerCase())) {
- Log.d(TAG, "apnTypesMatch: true because match found for " + apn.trim());
- return true;
- }
- }
-
- Log.d(TAG, "apnTypesMatch: false");
- return false;
- }
-
- /**
- * Function to get Preference obj corresponding to an apnField
- * @param apnField apn field name for which pref is needed
- * @return Preference obj corresponding to passed in apnField
- */
- private Preference getPreferenceFromFieldName(String apnField) {
- switch (apnField) {
- case Telephony.Carriers.NAME:
- return mName;
- case Telephony.Carriers.APN:
- return mApn;
- case Telephony.Carriers.PROXY:
- return mProxy;
- case Telephony.Carriers.PORT:
- return mPort;
- case Telephony.Carriers.USER:
- return mUser;
- case Telephony.Carriers.SERVER:
- return mServer;
- case Telephony.Carriers.PASSWORD:
- return mPassword;
- case Telephony.Carriers.MMSPROXY:
- return mMmsProxy;
- case Telephony.Carriers.MMSPORT:
- return mMmsPort;
- case Telephony.Carriers.MMSC:
- return mMmsc;
- case Telephony.Carriers.MCC:
- return mMcc;
- case Telephony.Carriers.MNC:
- return mMnc;
- case Telephony.Carriers.TYPE:
- return mApnType;
- case Telephony.Carriers.AUTH_TYPE:
- return mAuthType;
- case Telephony.Carriers.PROTOCOL:
- return mProtocol;
- case Telephony.Carriers.ROAMING_PROTOCOL:
- return mRoamingProtocol;
- case Telephony.Carriers.CARRIER_ENABLED:
- return mCarrierEnabled;
- case Telephony.Carriers.BEARER:
- case Telephony.Carriers.BEARER_BITMASK:
- return mBearerMulti;
- case Telephony.Carriers.MVNO_TYPE:
- return mMvnoType;
- case Telephony.Carriers.MVNO_MATCH_DATA:
- return mMvnoMatchData;
- }
- return null;
- }
-
- /**
- * Disables given fields so that user cannot modify them
- *
- * @param apnFields fields to be disabled
- */
- private void disableFields(String[] apnFields) {
- for (String apnField : apnFields) {
- final Preference preference = getPreferenceFromFieldName(apnField);
- if (preference != null) {
- preference.setEnabled(false);
- }
- }
- }
-
- /**
- * Disables all fields so that user cannot modify the APN
- */
- private void disableAllFields() {
- mName.setEnabled(false);
- mApn.setEnabled(false);
- mProxy.setEnabled(false);
- mPort.setEnabled(false);
- mUser.setEnabled(false);
- mServer.setEnabled(false);
- mPassword.setEnabled(false);
- mMmsProxy.setEnabled(false);
- mMmsPort.setEnabled(false);
- mMmsc.setEnabled(false);
- mMcc.setEnabled(false);
- mMnc.setEnabled(false);
- mApnType.setEnabled(false);
- mAuthType.setEnabled(false);
- mProtocol.setEnabled(false);
- mRoamingProtocol.setEnabled(false);
- mCarrierEnabled.setEnabled(false);
- mBearerMulti.setEnabled(false);
- mMvnoType.setEnabled(false);
- mMvnoMatchData.setEnabled(false);
- }
-
- /**
- * Disables fields for a carrier id APN to avoid breaking the match criteria
- */
- private void disableFieldsForCarrieridApn() {
- mMcc.setEnabled(false);
- mMnc.setEnabled(false);
- mMvnoType.setEnabled(false);
- mMvnoMatchData.setEnabled(false);
- }
-
@Override
public int getMetricsCategory() {
return SettingsEnums.APN_EDITOR;
}
@VisibleForTesting
- void fillUI(boolean firstTime) {
- if (firstTime) {
- // Fill in all the values from the db in both text editor and summary
- mName.setText(mApnData.getString(NAME_INDEX));
- mApn.setText(mApnData.getString(APN_INDEX));
- mProxy.setText(mApnData.getString(PROXY_INDEX));
- mPort.setText(mApnData.getString(PORT_INDEX));
- mUser.setText(mApnData.getString(USER_INDEX));
- mServer.setText(mApnData.getString(SERVER_INDEX));
- mPassword.setText(mApnData.getString(PASSWORD_INDEX));
- mMmsProxy.setText(mApnData.getString(MMSPROXY_INDEX));
- mMmsPort.setText(mApnData.getString(MMSPORT_INDEX));
- mMmsc.setText(mApnData.getString(MMSC_INDEX));
- mMcc.setText(mApnData.getString(MCC_INDEX));
- mMnc.setText(mApnData.getString(MNC_INDEX));
- mApnType.setText(mApnData.getString(TYPE_INDEX));
- if (mNewApn) {
- final SubscriptionInfo subInfo =
- mProxySubscriptionMgr.getAccessibleSubscriptionInfo(mSubId);
-
- // Country code
- final String mcc = (subInfo == null) ? null : subInfo.getMccString();
- // Network code
- final String mnc = (subInfo == null) ? null : subInfo.getMncString();
-
- if (!TextUtils.isEmpty(mcc)) {
- // Auto populate MNC and MCC for new entries, based on what SIM reports
- mMcc.setText(mcc);
- mMnc.setText(mnc);
- mCurMnc = mnc;
- mCurMcc = mcc;
- }
- }
- final int authVal = mApnData.getInteger(AUTH_TYPE_INDEX, -1);
- if (authVal != -1) {
- mAuthType.setValueIndex(authVal);
- } else {
- mAuthType.setValue(null);
- }
-
- mProtocol.setValue(mApnData.getString(PROTOCOL_INDEX));
- mRoamingProtocol.setValue(mApnData.getString(ROAMING_PROTOCOL_INDEX));
- mCarrierEnabled.setChecked(mApnData.getInteger(CARRIER_ENABLED_INDEX, 1) == 1);
- mBearerInitialVal = mApnData.getInteger(BEARER_INDEX, 0);
-
- final HashSet<String> bearers = new HashSet<String>();
- int bearerBitmask = mApnData.getInteger(BEARER_BITMASK_INDEX, 0);
- if (bearerBitmask == 0) {
- if (mBearerInitialVal == 0) {
- bearers.add("" + 0);
- }
- } else {
- int i = 1;
- while (bearerBitmask != 0) {
- if ((bearerBitmask & 1) == 1) {
- bearers.add("" + i);
- }
- bearerBitmask >>= 1;
- i++;
- }
- }
-
- if (mBearerInitialVal != 0 && !bearers.contains("" + mBearerInitialVal)) {
- // add mBearerInitialVal to bearers
- bearers.add("" + mBearerInitialVal);
- }
- mBearerMulti.setValues(bearers);
-
- mMvnoType.setValue(mApnData.getString(MVNO_TYPE_INDEX));
- mMvnoMatchData.setEnabled(false);
- mMvnoMatchData.setText(mApnData.getString(MVNO_MATCH_DATA_INDEX));
- if (mNewApn && mMvnoTypeStr != null && mMvnoMatchDataStr != null) {
- mMvnoType.setValue(mMvnoTypeStr);
- mMvnoMatchData.setText(mMvnoMatchDataStr);
- }
- }
-
- mName.setSummary(checkNull(mName.getText()));
- mApn.setSummary(checkNull(mApn.getText()));
- mProxy.setSummary(checkNull(mProxy.getText()));
- mPort.setSummary(checkNull(mPort.getText()));
- mUser.setSummary(checkNull(mUser.getText()));
- mServer.setSummary(checkNull(mServer.getText()));
- mPassword.setSummary(starify(mPassword.getText()));
- mMmsProxy.setSummary(checkNull(mMmsProxy.getText()));
- mMmsPort.setSummary(checkNull(mMmsPort.getText()));
- mMmsc.setSummary(checkNull(mMmsc.getText()));
- mMcc.setSummary(formatInteger(checkNull(mMcc.getText())));
- mMnc.setSummary(formatInteger(checkNull(mMnc.getText())));
- mApnType.setSummary(checkNull(mApnType.getText()));
-
- final String authVal = mAuthType.getValue();
- if (authVal != null) {
- final int authValIndex = Integer.parseInt(authVal);
- mAuthType.setValueIndex(authValIndex);
-
- final String[] values = getResources().getStringArray(R.array.apn_auth_entries);
- mAuthType.setSummary(values[authValIndex]);
- } else {
- mAuthType.setSummary(sNotSet);
- }
-
- mProtocol.setSummary(checkNull(protocolDescription(mProtocol.getValue(), mProtocol)));
- mRoamingProtocol.setSummary(
- checkNull(protocolDescription(mRoamingProtocol.getValue(), mRoamingProtocol)));
- mBearerMulti.setSummary(
- checkNull(bearerMultiDescription(mBearerMulti.getValues())));
- mMvnoType.setSummary(
- checkNull(mvnoDescription(mMvnoType.getValue())));
- mMvnoMatchData.setSummary(checkNullforMvnoValue(mMvnoMatchData.getText()));
- // allow user to edit carrier_enabled for some APN
- final boolean ceEditable = getResources().getBoolean(
- R.bool.config_allow_edit_carrier_enabled);
- if (ceEditable) {
- mCarrierEnabled.setEnabled(true);
- } else {
- mCarrierEnabled.setEnabled(false);
- }
- }
-
- /**
- * Returns the UI choice (e.g., "IPv4/IPv6") corresponding to the given
- * raw value of the protocol preference (e.g., "IPV4V6"). If unknown,
- * return null.
- */
- private String protocolDescription(String raw, ListPreference protocol) {
- String uRaw = checkNull(raw).toUpperCase();
- uRaw = uRaw.equals("IPV4") ? "IP" : uRaw;
- final int protocolIndex = protocol.findIndexOfValue(uRaw);
- if (protocolIndex == -1) {
- return null;
- } else {
- final String[] values = getResources().getStringArray(R.array.apn_protocol_entries);
- try {
- return values[protocolIndex];
- } catch (ArrayIndexOutOfBoundsException e) {
- return null;
- }
- }
- }
-
- private String bearerMultiDescription(Set<String> raw) {
- final String[] values = getResources().getStringArray(R.array.bearer_entries);
- final StringBuilder retVal = new StringBuilder();
- boolean first = true;
- for (String bearer : raw) {
- int bearerIndex = mBearerMulti.findIndexOfValue(bearer);
- try {
- if (first) {
- retVal.append(values[bearerIndex]);
- first = false;
- } else {
- retVal.append(", " + values[bearerIndex]);
- }
- } catch (ArrayIndexOutOfBoundsException e) {
- // ignore
- }
- }
- final String val = retVal.toString();
- if (!TextUtils.isEmpty(val)) {
- return val;
- }
- return null;
- }
-
- private String mvnoDescription(String newValue) {
- final int mvnoIndex = mMvnoType.findIndexOfValue(newValue);
- final String oldValue = mMvnoType.getValue();
-
- if (mvnoIndex == -1) {
- return null;
- } else {
- final String[] values = getResources().getStringArray(R.array.mvno_type_entries);
- final boolean mvnoMatchDataUneditable =
- mReadOnlyApn || (mReadOnlyApnFields != null
- && Arrays.asList(mReadOnlyApnFields)
- .contains(Telephony.Carriers.MVNO_MATCH_DATA));
- mMvnoMatchData.setEnabled(!mvnoMatchDataUneditable && mvnoIndex != 0);
- if (newValue != null && !newValue.equals(oldValue)) {
- if (values[mvnoIndex].equals("SPN")) {
- TelephonyManager telephonyManager = (TelephonyManager)
- getContext().getSystemService(TelephonyManager.class);
- final TelephonyManager telephonyManagerForSubId =
- telephonyManager.createForSubscriptionId(mSubId);
- if (telephonyManagerForSubId != null) {
- telephonyManager = telephonyManagerForSubId;
- }
- mMvnoMatchData.setText(telephonyManager.getSimOperatorName());
- } else if (values[mvnoIndex].equals("IMSI")) {
- final SubscriptionInfo subInfo =
- mProxySubscriptionMgr.getAccessibleSubscriptionInfo(mSubId);
- final String mcc = (subInfo == null) ? "" :
- Objects.toString(subInfo.getMccString(), "");
- final String mnc = (subInfo == null) ? "" :
- Objects.toString(subInfo.getMncString(), "");
- mMvnoMatchData.setText(mcc + mnc + "x");
- } else if (values[mvnoIndex].equals("GID")) {
- TelephonyManager telephonyManager = (TelephonyManager)
- getContext().getSystemService(TelephonyManager.class);
- final TelephonyManager telephonyManagerForSubId =
- telephonyManager.createForSubscriptionId(mSubId);
- if (telephonyManagerForSubId != null) {
- telephonyManager = telephonyManagerForSubId;
- }
- mMvnoMatchData.setText(telephonyManager.getGroupIdLevel1());
- } else {
- // mvno type 'none' case. At this time, mvnoIndex should be 0.
- mMvnoMatchData.setText("");
- }
- }
-
- try {
- return values[mvnoIndex];
- } catch (ArrayIndexOutOfBoundsException e) {
- return null;
- }
- }
- }
- /**
- * Callback when preference status changed.
- */
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- String key = preference.getKey();
- if (KEY_AUTH_TYPE.equals(key)) {
- try {
- final int index = Integer.parseInt((String) newValue);
- mAuthType.setValueIndex(index);
-
- final String[] values = getResources().getStringArray(R.array.apn_auth_entries);
- mAuthType.setSummary(values[index]);
- } catch (NumberFormatException e) {
- return false;
- }
- } else if (KEY_APN_TYPE.equals(key)) {
- String data = (TextUtils.isEmpty((String) newValue)
- && !ArrayUtils.isEmpty(mDefaultApnTypes))
- ? getEditableApnType(mDefaultApnTypes) : (String) newValue;
- if (!TextUtils.isEmpty(data)) {
- mApnType.setSummary(data);
- }
- } else if (KEY_PROTOCOL.equals(key)) {
- final String protocol = protocolDescription((String) newValue, mProtocol);
- if (protocol == null) {
- return false;
- }
- mProtocol.setSummary(protocol);
- mProtocol.setValue((String) newValue);
- } else if (KEY_ROAMING_PROTOCOL.equals(key)) {
- final String protocol = protocolDescription((String) newValue, mRoamingProtocol);
- if (protocol == null) {
- return false;
- }
- mRoamingProtocol.setSummary(protocol);
- mRoamingProtocol.setValue((String) newValue);
- } else if (KEY_BEARER_MULTI.equals(key)) {
- final String bearer = bearerMultiDescription((Set<String>) newValue);
- if (bearer == null) {
- return false;
- }
- mBearerMulti.setValues((Set<String>) newValue);
- mBearerMulti.setSummary(bearer);
- } else if (KEY_MVNO_TYPE.equals(key)) {
- final String mvno = mvnoDescription((String) newValue);
- if (mvno == null) {
- return false;
- }
- mMvnoType.setValue((String) newValue);
- mMvnoType.setSummary(mvno);
- mMvnoMatchData.setSummary(checkNullforMvnoValue(mMvnoMatchData.getText()));
- } else if (KEY_PASSWORD.equals(key)) {
- mPassword.setSummary(starify(newValue != null ? String.valueOf(newValue) : ""));
- } else if (KEY_CARRIER_ENABLED.equals(key)) {
- // do nothing
- } else {
- preference.setSummary(checkNull(newValue != null ? String.valueOf(newValue) : null));
- }
- return true;
- }
-
- @Override
- public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- super.onCreateOptionsMenu(menu, inflater);
- // If it's a new APN, then cancel will delete the new entry in onPause
- // If APN add is not allowed, delete might lead to issue regarding recovery
- if (!mNewApn && !mReadOnlyApn && mIsAddApnAllowed) {
- menu.add(0, MENU_DELETE, 0, R.string.menu_delete)
- .setIcon(R.drawable.ic_delete);
- }
- if (!mReadOnlyApn) {
- menu.add(0, MENU_SAVE, 0, R.string.menu_save)
- .setIcon(android.R.drawable.ic_menu_save);
- }
- menu.add(0, MENU_CANCEL, 0, R.string.menu_cancel)
- .setIcon(android.R.drawable.ic_menu_close_clear_cancel);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case MENU_DELETE:
- deleteApn();
- finish();
- return true;
- case MENU_SAVE:
- if (validateAndSaveApnData()) {
- finish();
- }
- return true;
- case MENU_CANCEL:
- finish();
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
- }
-
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- view.setOnKeyListener(this);
- view.setFocusableInTouchMode(true);
- view.requestFocus();
- }
-
- /**
- * Try to save the apn data when pressed the back button. An error message will be displayed if
- * the apn data is invalid.
- *
- * TODO(b/77339593): Try to keep the same behavior between back button and up navigate button.
- * We will save the valid apn data to the database when pressed the back button, but discard all
- * user changed when pressed the up navigate button.
- */
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
- if (event.getAction() != KeyEvent.ACTION_DOWN) return false;
- switch (keyCode) {
- case KeyEvent.KEYCODE_BACK: {
- if (validateAndSaveApnData()) {
- finish();
- }
- return true;
- }
- }
- return false;
- }
-
- /**
- * Add key, value to {@code cv} and compare the value against the value at index in
- * {@link #mApnData}.
- *
- * <p>
- * The key, value will not add to {@code cv} if value is null.
- *
- * @return true if values are different. {@code assumeDiff} indicates if values can be assumed
- * different in which case no comparison is needed.
- */
- boolean setStringValueAndCheckIfDiff(
- ContentValues cv, String key, String value, boolean assumeDiff, int index) {
- final String valueFromLocalCache = mApnData.getString(index);
- if (VDBG) {
- Log.d(TAG, "setStringValueAndCheckIfDiff: assumeDiff: " + assumeDiff
- + " key: " + key
- + " value: '" + value
- + "' valueFromDb: '" + valueFromLocalCache + "'");
- }
- final boolean isDiff = assumeDiff
- || !((TextUtils.isEmpty(value) && TextUtils.isEmpty(valueFromLocalCache))
- || (value != null && value.equals(valueFromLocalCache)));
-
- if (isDiff && value != null) {
- cv.put(key, value);
- }
- return isDiff;
- }
-
- /**
- * Add key, value to {@code cv} and compare the value against the value at index in
- * {@link #mApnData}.
- *
- * @return true if values are different. {@code assumeDiff} indicates if values can be assumed
- * different in which case no comparison is needed.
- */
- boolean setIntValueAndCheckIfDiff(
- ContentValues cv, String key, int value, boolean assumeDiff, int index) {
- final Integer valueFromLocalCache = mApnData.getInteger(index);
- if (VDBG) {
- Log.d(TAG, "setIntValueAndCheckIfDiff: assumeDiff: " + assumeDiff
- + " key: " + key
- + " value: '" + value
- + "' valueFromDb: '" + valueFromLocalCache + "'");
- }
-
- final boolean isDiff = assumeDiff || value != valueFromLocalCache;
- if (isDiff) {
- cv.put(key, value);
- }
- return isDiff;
- }
-
- /**
- * Validates the apn data and save it to the database if it's valid.
- *
- * <p>
- * A dialog with error message will be displayed if the APN data is invalid.
- *
- * @return true if there is no error
- */
- @VisibleForTesting
- boolean validateAndSaveApnData() {
- // Nothing to do if it's a read only APN
- if (mReadOnlyApn) {
- return true;
- }
-
- final String name = checkNotSet(mName.getText());
- final String apn = checkNotSet(mApn.getText());
- final String mcc = checkNotSet(mMcc.getText());
- final String mnc = checkNotSet(mMnc.getText());
-
- final String errorMsg = validateApnData();
- if (errorMsg != null) {
- showError();
- return false;
- }
-
- final ContentValues values = new ContentValues();
- // call update() if it's a new APN. If not, check if any field differs from the db value;
- // if any diff is found update() should be called
- boolean callUpdate = mNewApn;
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.NAME,
- name,
- callUpdate,
- NAME_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.APN,
- apn,
- callUpdate,
- APN_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.PROXY,
- checkNotSet(mProxy.getText()),
- callUpdate,
- PROXY_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.PORT,
- checkNotSet(mPort.getText()),
- callUpdate,
- PORT_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MMSPROXY,
- checkNotSet(mMmsProxy.getText()),
- callUpdate,
- MMSPROXY_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MMSPORT,
- checkNotSet(mMmsPort.getText()),
- callUpdate,
- MMSPORT_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.USER,
- checkNotSet(mUser.getText()),
- callUpdate,
- USER_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.SERVER,
- checkNotSet(mServer.getText()),
- callUpdate,
- SERVER_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.PASSWORD,
- checkNotSet(mPassword.getText()),
- callUpdate,
- PASSWORD_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MMSC,
- checkNotSet(mMmsc.getText()),
- callUpdate,
- MMSC_INDEX);
-
- final String authVal = mAuthType.getValue();
- if (authVal != null) {
- callUpdate = setIntValueAndCheckIfDiff(values,
- Telephony.Carriers.AUTH_TYPE,
- Integer.parseInt(authVal),
- callUpdate,
- AUTH_TYPE_INDEX);
- }
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.PROTOCOL,
- checkNotSet(mProtocol.getValue()),
- callUpdate,
- PROTOCOL_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.ROAMING_PROTOCOL,
- checkNotSet(mRoamingProtocol.getValue()),
- callUpdate,
- ROAMING_PROTOCOL_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.TYPE,
- checkNotSet(getUserEnteredApnType()),
- callUpdate,
- TYPE_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MCC,
- mcc,
- callUpdate,
- MCC_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MNC,
- mnc,
- callUpdate,
- MNC_INDEX);
-
- values.put(Telephony.Carriers.NUMERIC, mcc + mnc);
-
- if (mCurMnc != null && mCurMcc != null) {
- if (mCurMnc.equals(mnc) && mCurMcc.equals(mcc)) {
- values.put(Telephony.Carriers.CURRENT, 1);
- }
- }
-
- final Set<String> bearerSet = mBearerMulti.getValues();
- int bearerBitmask = 0;
- for (String bearer : bearerSet) {
- if (Integer.parseInt(bearer) == 0) {
- bearerBitmask = 0;
- break;
- } else {
- bearerBitmask |= getBitmaskForTech(Integer.parseInt(bearer));
- }
- }
- callUpdate = setIntValueAndCheckIfDiff(values,
- Telephony.Carriers.BEARER_BITMASK,
- bearerBitmask,
- callUpdate,
- BEARER_BITMASK_INDEX);
-
- int bearerVal;
- if (bearerBitmask == 0 || mBearerInitialVal == 0) {
- bearerVal = 0;
- } else if (bitmaskHasTech(bearerBitmask, mBearerInitialVal)) {
- bearerVal = mBearerInitialVal;
- } else {
- // bearer field was being used but bitmask has changed now and does not include the
- // initial bearer value -- setting bearer to 0 but maybe better behavior is to choose a
- // random tech from the new bitmask??
- bearerVal = 0;
- }
- callUpdate = setIntValueAndCheckIfDiff(values,
- Telephony.Carriers.BEARER,
- bearerVal,
- callUpdate,
- BEARER_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MVNO_TYPE,
- checkNotSet(mMvnoType.getValue()),
- callUpdate,
- MVNO_TYPE_INDEX);
-
- callUpdate = setStringValueAndCheckIfDiff(values,
- Telephony.Carriers.MVNO_MATCH_DATA,
- checkNotSet(mMvnoMatchData.getText()),
- callUpdate,
- MVNO_MATCH_DATA_INDEX);
-
- callUpdate = setIntValueAndCheckIfDiff(values,
- Telephony.Carriers.CARRIER_ENABLED,
- mCarrierEnabled.isChecked() ? 1 : 0,
- callUpdate,
- CARRIER_ENABLED_INDEX);
-
- values.put(Telephony.Carriers.EDITED_STATUS, Telephony.Carriers.USER_EDITED);
-
- if (callUpdate) {
- final Uri uri = mApnData.getUri() == null ? mCarrierUri : mApnData.getUri();
- updateApnDataToDatabase(uri, values);
- } else {
- if (VDBG) Log.d(TAG, "validateAndSaveApnData: not calling update()");
- }
-
- return true;
- }
-
- private void updateApnDataToDatabase(Uri uri, ContentValues values) {
- ThreadUtils.postOnBackgroundThread(() -> {
- if (uri.equals(mCarrierUri)) {
- // Add a new apn to the database
- final Uri newUri = getContentResolver().insert(mCarrierUri, values);
- if (newUri == null) {
- Log.e(TAG, "Can't add a new apn to database " + mCarrierUri);
- }
- } else {
- // Update the existing apn
- getContentResolver().update(
- uri, values, null /* where */, null /* selection Args */);
- }
- });
- }
-
- /**
- * Validates whether the apn data is valid.
- *
- * @return An error message if the apn data is invalid, otherwise return null.
- */
- @VisibleForTesting
- String validateApnData() {
- String errorMsg = null;
-
- final String name = checkNotSet(mName.getText());
- final String apn = checkNotSet(mApn.getText());
- final String mcc = checkNotSet(mMcc.getText());
- final String mnc = checkNotSet(mMnc.getText());
- boolean doNotCheckMccMnc = mIsCarrierIdApn && TextUtils.isEmpty(mcc)
- && TextUtils.isEmpty(mnc);
- if (TextUtils.isEmpty(name)) {
- errorMsg = getResources().getString(R.string.error_name_empty);
- } else if (TextUtils.isEmpty(apn)) {
- errorMsg = getResources().getString(R.string.error_apn_empty);
- } else if (doNotCheckMccMnc) {
- Log.d(TAG, "validateApnData: carrier id APN does not have mcc/mnc defined");
- // no op, skip mcc mnc null check
- } else if (mcc == null || mcc.length() != 3) {
- errorMsg = getResources().getString(R.string.error_mcc_not3);
- } else if ((mnc == null || (mnc.length() & 0xFFFE) != 2)) {
- errorMsg = getResources().getString(R.string.error_mnc_not23);
- }
-
- if (errorMsg == null) {
- // if carrier does not allow editing certain apn types, make sure type does not include
- // those
- if (!ArrayUtils.isEmpty(mReadOnlyApnTypes)
- && apnTypesMatch(mReadOnlyApnTypes, getUserEnteredApnType())) {
- final StringBuilder stringBuilder = new StringBuilder();
- for (String type : mReadOnlyApnTypes) {
- stringBuilder.append(type).append(", ");
- Log.d(TAG, "validateApnData: appending type: " + type);
- }
- // remove last ", "
- if (stringBuilder.length() >= 2) {
- stringBuilder.delete(stringBuilder.length() - 2, stringBuilder.length());
- }
- errorMsg = String.format(getResources().getString(R.string.error_adding_apn_type),
- stringBuilder);
- }
- }
-
- return errorMsg;
- }
-
- @VisibleForTesting
- void showError() {
- ErrorDialog.showError(this);
- }
-
- private void deleteApn() {
- if (mApnData.getUri() != null) {
- getContentResolver().delete(mApnData.getUri(), null, null);
- mApnData = new ApnData(sProjection.length);
- }
- }
-
- private String starify(String value) {
- if (value == null || value.length() == 0) {
- return sNotSet;
- } else {
- final char[] password = new char[value.length()];
- for (int i = 0; i < password.length; i++) {
- password[i] = '*';
- }
- return new String(password);
- }
- }
-
- /**
- * Returns {@link #sNotSet} if the given string {@code value} is null or empty. The string
- * {@link #sNotSet} typically used as the default display when an entry in the preference is
- * null or empty.
- */
- private String checkNull(String value) {
- return TextUtils.isEmpty(value) ? sNotSet : value;
- }
-
- /**
- * To make traslation be diversity, use another string id for MVNO value.
- */
- private String checkNullforMvnoValue(String value) {
- String notSetForMvnoValue = getResources().getString(R.string.apn_not_set_for_mvno);
- return TextUtils.isEmpty(value) ? notSetForMvnoValue : value;
- }
-
- /**
- * Returns null if the given string {@code value} equals to {@link #sNotSet}. This method
- * should be used when convert a string value from preference to database.
- */
- private String checkNotSet(String value) {
- return sNotSet.equals(value) ? null : value;
- }
-
- @VisibleForTesting
- String getUserEnteredApnType() {
- // if user has not specified a type, map it to "ALL APN TYPES THAT ARE NOT READ-ONLY"
- // but if user enter empty type, map it just for default
- String userEnteredApnType = mApnType.getText();
- if (userEnteredApnType != null) userEnteredApnType = userEnteredApnType.trim();
- if ((TextUtils.isEmpty(userEnteredApnType)
- || APN_TYPE_ALL.equals(userEnteredApnType))) {
- userEnteredApnType = getEditableApnType(APN_TYPES);
- }
- Log.d(TAG, "getUserEnteredApnType: changed apn type to editable apn types: "
- + userEnteredApnType);
- return userEnteredApnType;
- }
-
- private String getEditableApnType(String[] apnTypeList) {
- final StringBuilder editableApnTypes = new StringBuilder();
- final List<String> readOnlyApnTypes = Arrays.asList(mReadOnlyApnTypes);
- boolean first = true;
- for (String apnType : apnTypeList) {
- // add APN type if it is not read-only and is not wild-cardable
- if (!readOnlyApnTypes.contains(apnType)
- && !apnType.equals(APN_TYPE_IA)
- && !apnType.equals(APN_TYPE_EMERGENCY)
- && !apnType.equals(APN_TYPE_MCX)
- && !apnType.equals(APN_TYPE_IMS)) {
- if (first) {
- first = false;
- } else {
- editableApnTypes.append(",");
- }
- editableApnTypes.append(apnType);
- }
- }
- return editableApnTypes.toString();
- }
-
- private void initApnEditorUi() {
- addPreferencesFromResource(R.xml.apn_editor);
-
- sNotSet = getResources().getString(R.string.apn_not_set);
- mName = (EditTextPreference) findPreference("apn_name");
- mApn = (EditTextPreference) findPreference("apn_apn");
- mProxy = (EditTextPreference) findPreference("apn_http_proxy");
- mPort = (EditTextPreference) findPreference("apn_http_port");
- mUser = (EditTextPreference) findPreference("apn_user");
- mServer = (EditTextPreference) findPreference("apn_server");
- mPassword = (EditTextPreference) findPreference(KEY_PASSWORD);
- mMmsProxy = (EditTextPreference) findPreference("apn_mms_proxy");
- mMmsPort = (EditTextPreference) findPreference("apn_mms_port");
- mMmsc = (EditTextPreference) findPreference("apn_mmsc");
- mMcc = (EditTextPreference) findPreference("apn_mcc");
- mMnc = (EditTextPreference) findPreference("apn_mnc");
- mApnType = (EditTextPreference) findPreference("apn_type");
- mAuthType = (ListPreference) findPreference(KEY_AUTH_TYPE);
- mProtocol = (ListPreference) findPreference(KEY_PROTOCOL);
- mRoamingProtocol = (ListPreference) findPreference(KEY_ROAMING_PROTOCOL);
- mCarrierEnabled = (TwoStatePreference) findPreference(KEY_CARRIER_ENABLED);
- mBearerMulti = (MultiSelectListPreference) findPreference(KEY_BEARER_MULTI);
- mMvnoType = (ListPreference) findPreference(KEY_MVNO_TYPE);
- mMvnoMatchData = (EditTextPreference) findPreference("mvno_match_data");
- }
-
- @VisibleForTesting
- protected void getCarrierCustomizedConfig(Context context) {
- mReadOnlyApn = false;
- mReadOnlyApnTypes = null;
- mReadOnlyApnFields = null;
- mIsAddApnAllowed = true;
-
- final CarrierConfigManager configManager = (CarrierConfigManager)
- context.getSystemService(Context.CARRIER_CONFIG_SERVICE);
- if (configManager != null) {
- final PersistableBundle b = configManager.getConfigForSubId(mSubId);
- if (b != null) {
- mReadOnlyApnTypes = getReadOnlyApnTypes(b);
- if (!ArrayUtils.isEmpty(mReadOnlyApnTypes)) {
- Log.d(TAG,
- "onCreate: read only APN type: " + Arrays.toString(mReadOnlyApnTypes));
- }
- mReadOnlyApnFields = b.getStringArray(
- CarrierConfigManager.KEY_READ_ONLY_APN_FIELDS_STRING_ARRAY);
-
- mDefaultApnTypes = b.getStringArray(
- CarrierConfigManager.KEY_APN_SETTINGS_DEFAULT_APN_TYPES_STRING_ARRAY);
-
- if (!ArrayUtils.isEmpty(mDefaultApnTypes)) {
- Log.d(TAG, "onCreate: default apn types: " + Arrays.toString(mDefaultApnTypes));
- }
-
- mDefaultApnProtocol = b.getString(
- CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_PROTOCOL_STRING);
- if (!TextUtils.isEmpty(mDefaultApnProtocol)) {
- Log.d(TAG, "onCreate: default apn protocol: " + mDefaultApnProtocol);
- }
-
- mDefaultApnRoamingProtocol = b.getString(
- CarrierConfigManager.Apn.KEY_SETTINGS_DEFAULT_ROAMING_PROTOCOL_STRING);
- if (!TextUtils.isEmpty(mDefaultApnRoamingProtocol)) {
- Log.d(TAG, "onCreate: default apn roaming protocol: "
- + mDefaultApnRoamingProtocol);
- }
-
- mIsAddApnAllowed = b.getBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL);
- if (!mIsAddApnAllowed) {
- Log.d(TAG, "onCreate: not allow to add new APN");
- }
- }
- }
- }
-
- private void setCarrierCustomizedConfigToUi() {
- if (TextUtils.isEmpty(mApnType.getText()) && !ArrayUtils.isEmpty(mDefaultApnTypes)) {
- String value = getEditableApnType(mDefaultApnTypes);
- mApnType.setText(value);
- mApnType.setSummary(value);
- }
-
- String protocol = protocolDescription(mDefaultApnProtocol, mProtocol);
- if (TextUtils.isEmpty(mProtocol.getValue()) && !TextUtils.isEmpty(protocol)) {
- mProtocol.setValue(mDefaultApnProtocol);
- mProtocol.setSummary(protocol);
- }
-
- String roamingProtocol = protocolDescription(mDefaultApnRoamingProtocol, mRoamingProtocol);
- if (TextUtils.isEmpty(mRoamingProtocol.getValue()) && !TextUtils.isEmpty(roamingProtocol)) {
- mRoamingProtocol.setValue(mDefaultApnRoamingProtocol);
- mRoamingProtocol.setSummary(roamingProtocol);
- }
- }
-
- /**
- * Dialog of error message.
- */
- public static class ErrorDialog extends InstrumentedDialogFragment {
- /**
- * Show error dialog.
- */
- public static void showError(ApnEditor editor) {
- final ErrorDialog dialog = new ErrorDialog();
- dialog.setTargetFragment(editor, 0);
- dialog.show(editor.getFragmentManager(), "error");
- }
-
- @Override
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- final String msg = ((ApnEditor) getTargetFragment()).validateApnData();
-
- return new AlertDialog.Builder(getContext())
- .setTitle(R.string.error_title)
- .setPositiveButton(android.R.string.ok, null)
- .setMessage(msg)
- .create();
- }
-
- @Override
- public int getMetricsCategory() {
- return SettingsEnums.DIALOG_APN_EDITOR_ERROR;
- }
- }
-
- @VisibleForTesting
- ApnData getApnDataFromUri(Uri uri) {
- ApnData apnData = null;
- try (Cursor cursor = getContentResolver().query(
- uri,
- sProjection,
- null /* selection */,
- null /* selectionArgs */,
- null /* sortOrder */)) {
- if (cursor != null && cursor.moveToFirst()) {
- apnData = new ApnData(uri, cursor);
- }
- }
-
- if (apnData == null) {
- Log.d(TAG, "Can't get apnData from Uri " + uri);
- }
-
- return apnData;
- }
-
- @VisibleForTesting
boolean isUserRestricted() {
UserManager userManager = getContext().getSystemService(UserManager.class);
if (userManager == null) {
@@ -1502,80 +201,4 @@
}
return false;
}
-
- @VisibleForTesting
- static class ApnData {
- /**
- * The uri correspond to a database row of the apn data. This should be null if the apn
- * is not in the database.
- */
- Uri mUri;
-
- /** Each element correspond to a column of the database row. */
- Object[] mData;
-
- ApnData(int numberOfField) {
- mData = new Object[numberOfField];
- }
-
- ApnData(Uri uri, Cursor cursor) {
- mUri = uri;
- mData = new Object[cursor.getColumnCount()];
- for (int i = 0; i < mData.length; i++) {
- switch (cursor.getType(i)) {
- case Cursor.FIELD_TYPE_FLOAT:
- mData[i] = cursor.getFloat(i);
- break;
- case Cursor.FIELD_TYPE_INTEGER:
- mData[i] = cursor.getInt(i);
- break;
- case Cursor.FIELD_TYPE_STRING:
- mData[i] = cursor.getString(i);
- break;
- case Cursor.FIELD_TYPE_BLOB:
- mData[i] = cursor.getBlob(i);
- break;
- default:
- mData[i] = null;
- }
- }
- }
-
- Uri getUri() {
- return mUri;
- }
-
- void setUri(Uri uri) {
- mUri = uri;
- }
-
- Integer getInteger(int index) {
- return (Integer) mData[index];
- }
-
- Integer getInteger(int index, Integer defaultValue) {
- final Integer val = getInteger(index);
- return val == null ? defaultValue : val;
- }
-
- String getString(int index) {
- return (String) mData[index];
- }
- }
-
- private static int getBitmaskForTech(int radioTech) {
- if (radioTech >= 1) {
- return (1 << (radioTech - 1));
- }
- return 0;
- }
-
- private static boolean bitmaskHasTech(int bearerBitmask, int radioTech) {
- if (bearerBitmask == 0) {
- return true;
- } else if (radioTech >= 1) {
- return ((bearerBitmask & (1 << (radioTech - 1))) != 0);
- }
- return false;
- }
}
diff --git a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
index 99683a8..77f4e1c 100644
--- a/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
+++ b/src/com/android/settings/network/telephony/CarrierConfigRepository.kt
@@ -224,7 +224,10 @@
}
private val BooleanKeysWhichNotFollowingsNamingConventions =
- listOf(CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS)
+ listOf(
+ CarrierConfigManager.KEY_IGNORE_DATA_ENABLED_CHANGED_FOR_VIDEO_CALLS,
+ CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+ )
private fun checkBooleanKey(key: String) {
check(key.endsWith("_bool") || key in BooleanKeysWhichNotFollowingsNamingConventions) {
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 7d5230d..c428f98 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -26,6 +26,7 @@
import android.content.res.Resources;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
+import android.telephony.RadioAccessFamily;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyCallback;
@@ -445,7 +446,7 @@
}
private int getPreferredNetworkMode() {
- int networkMode = MobileNetworkUtils.getNetworkTypeFromRaf(
+ int networkMode = RadioAccessFamily.getNetworkTypeFromRaf(
(int) mTelephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
if (!showNrList()) {
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerHelper.kt b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerHelper.kt
index d297e1c..9af6437 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerHelper.kt
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerHelper.kt
@@ -18,6 +18,7 @@
import android.content.Context
import android.telephony.CarrierConfigManager
+import android.telephony.RadioAccessFamily
import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager
import androidx.lifecycle.LifecycleOwner
@@ -35,7 +36,7 @@
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Default) {
setAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER,
- MobileNetworkUtils.getRafFromNetworkType(newPreferredNetworkMode),
+ RadioAccessFamily.getRafFromNetworkType(newPreferredNetworkMode).toLong(),
)
}
}
diff --git a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
index 220218c..a37a12b 100644
--- a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
+++ b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.kt
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony
import android.content.Context
+import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager
import android.telephony.data.ApnSetting
@@ -45,7 +46,7 @@
private var subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID
private var telephonyManager: TelephonyManager =
context.getSystemService(TelephonyManager::class.java)!!
-
+ private val carrierConfigRepository = CarrierConfigRepository(context)
private var preferenceScreen: PreferenceScreen? = null
fun init(subId: Int) {
@@ -54,7 +55,13 @@
}
override fun getAvailabilityStatus() =
- if (getAvailabilityStatus(telephonyManager, subId, getDefaultDataSubId)) AVAILABLE
+ if (getAvailabilityStatus(
+ telephonyManager,
+ subId,
+ getDefaultDataSubId,
+ carrierConfigRepository
+ )
+ ) AVAILABLE
else CONDITIONALLY_UNAVAILABLE
override fun displayPreference(screen: PreferenceScreen) {
@@ -92,11 +99,14 @@
telephonyManager: TelephonyManager,
subId: Int,
getDefaultDataSubId: () -> Int,
+ carrierConfigRepository: CarrierConfigRepository,
): Boolean {
return SubscriptionManager.isValidSubscriptionId(subId) &&
!telephonyManager.isDataEnabled &&
telephonyManager.isApnMetered(ApnSetting.TYPE_MMS) &&
- !isFallbackDataEnabled(telephonyManager, subId, getDefaultDataSubId())
+ !isFallbackDataEnabled(telephonyManager, subId, getDefaultDataSubId()) &&
+ carrierConfigRepository.getBoolean(
+ subId, CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL)
}
private fun isFallbackDataEnabled(
@@ -118,11 +128,16 @@
) : MobileNetworkSettingsSearchItem {
private var telephonyManager: TelephonyManager =
context.getSystemService(TelephonyManager::class.java)!!
+ private val carrierConfigRepository = CarrierConfigRepository(context)
@VisibleForTesting
fun isAvailable(subId: Int): Boolean =
getAvailabilityStatus(
- telephonyManager.createForSubscriptionId(subId), subId, getDefaultDataSubId)
+ telephonyManager.createForSubscriptionId(subId),
+ subId,
+ getDefaultDataSubId,
+ carrierConfigRepository
+ )
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
if (!isAvailable(subId)) return null
diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
index 82083b5..341f7a1b 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java
@@ -18,14 +18,6 @@
import static android.provider.Telephony.Carriers.ENFORCE_MANAGED_URI;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.CDMA;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.EVDO;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.GSM;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.LTE;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.NR;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.RAF_TD_SCDMA;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.RAF_UNKNOWN;
-import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.WCDMA;
import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO;
import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA;
import static com.android.settings.network.telephony.TelephonyConstants.TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
@@ -56,11 +48,11 @@
import android.telecom.PhoneAccountHandle;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
+import android.telephony.RadioAccessFamily;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-import android.telephony.euicc.EuiccManager;
import android.telephony.ims.ImsManager;
import android.telephony.ims.ImsRcsManager;
import android.telephony.ims.ProvisioningManager;
@@ -89,9 +81,7 @@
import com.android.settingslib.graph.SignalDrawable;
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
public class MobileNetworkUtils {
@@ -334,7 +324,7 @@
}
if (isWorldMode(context, subId)) {
- final int settingsNetworkMode = getNetworkTypeFromRaf(
+ final int settingsNetworkMode = RadioAccessFamily.getNetworkTypeFromRaf(
(int) telephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
@@ -365,7 +355,7 @@
}
final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class)
.createForSubscriptionId(subId);
- final int networkMode = getNetworkTypeFromRaf(
+ final int networkMode = RadioAccessFamily.getNetworkTypeFromRaf(
(int) telephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
if (isWorldMode(context, subId)) {
@@ -433,7 +423,7 @@
}
if (isWorldMode(context, subId)) {
- final int networkMode = getNetworkTypeFromRaf(
+ final int networkMode = RadioAccessFamily.getNetworkTypeFromRaf(
(int) telephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO) {
@@ -548,7 +538,7 @@
}
final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class)
.createForSubscriptionId(subId);
- final int networkMode = getNetworkTypeFromRaf(
+ final int networkMode = RadioAccessFamily.getNetworkTypeFromRaf(
(int) telephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
if (networkMode == TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM
@@ -648,197 +638,6 @@
}
/**
- * Loop through all the device logical slots to check whether the user's current country
- * supports eSIM.
- */
- private static boolean isCurrentCountrySupported(Context context) {
- final EuiccManager em = (EuiccManager) context.getSystemService(EuiccManager.class);
- final TelephonyManager tm =
- (TelephonyManager) context.getSystemService(TelephonyManager.class);
-
- Set<String> countrySet = new HashSet<>();
- for (int i = 0; i < tm.getPhoneCount(); i++) {
- String countryCode = tm.getNetworkCountryIso(i);
- if (!TextUtils.isEmpty(countryCode)) {
- countrySet.add(countryCode);
- }
- }
- boolean isSupported = countrySet.stream().anyMatch(em::isSupportedCountry);
- Log.i(TAG, "isCurrentCountrySupported countryCodes: " + countrySet
- + " eSIMSupported: " + isSupported);
- return isSupported;
- }
-
- /**
- * Imported from {@link android.telephony.RadioAccessFamily}
- */
- public static long getRafFromNetworkType(int type) {
- switch (type) {
- case TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF:
- return GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY:
- return GSM;
- case TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY:
- return WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_GSM_UMTS:
- return GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO:
- return CDMA | EVDO;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO:
- return LTE | CDMA | EVDO;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA:
- return LTE | GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
- return LTE | CDMA | EVDO | GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY:
- return LTE;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA:
- return LTE | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO:
- return CDMA;
- case TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA:
- return EVDO;
- case TelephonyManagerConstants.NETWORK_MODE_GLOBAL:
- return GSM | WCDMA | CDMA | EVDO;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY:
- return RAF_TD_SCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA:
- return RAF_TD_SCDMA | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA:
- return LTE | RAF_TD_SCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM:
- return RAF_TD_SCDMA | GSM;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM:
- return LTE | RAF_TD_SCDMA | GSM;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA:
- return RAF_TD_SCDMA | GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA:
- return LTE | RAF_TD_SCDMA | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA:
- return LTE | RAF_TD_SCDMA | GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- return RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
- case TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA:
- return LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_ONLY):
- return NR;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE):
- return NR | LTE;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO):
- return NR | LTE | CDMA | EVDO;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA):
- return NR | LTE | GSM | WCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA):
- return NR | LTE | CDMA | EVDO | GSM | WCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA):
- return NR | LTE | WCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA):
- return NR | LTE | RAF_TD_SCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM):
- return NR | LTE | RAF_TD_SCDMA | GSM;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA):
- return NR | LTE | RAF_TD_SCDMA | WCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA):
- return NR | LTE | RAF_TD_SCDMA | GSM | WCDMA;
- case (TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA):
- return NR | LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA;
- default:
- return RAF_UNKNOWN;
- }
- }
-
- /**
- * Imported from {@link android.telephony.RadioAccessFamily}
- */
- public static int getNetworkTypeFromRaf(int raf) {
- raf = getAdjustedRaf(raf);
-
- switch (raf) {
- case (GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_WCDMA_PREF;
- case GSM:
- return TelephonyManagerConstants.NETWORK_MODE_GSM_ONLY;
- case WCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_WCDMA_ONLY;
- case (CDMA | EVDO):
- return TelephonyManagerConstants.NETWORK_MODE_CDMA_EVDO;
- case (LTE | CDMA | EVDO):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO;
- case (LTE | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA;
- case (LTE | CDMA | EVDO | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA;
- case LTE:
- return TelephonyManagerConstants.NETWORK_MODE_LTE_ONLY;
- case (LTE | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_WCDMA;
- case CDMA:
- return TelephonyManagerConstants.NETWORK_MODE_CDMA_NO_EVDO;
- case EVDO:
- return TelephonyManagerConstants.NETWORK_MODE_EVDO_NO_CDMA;
- case (GSM | WCDMA | CDMA | EVDO):
- return TelephonyManagerConstants.NETWORK_MODE_GLOBAL;
- case RAF_TD_SCDMA:
- return TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_ONLY;
- case (RAF_TD_SCDMA | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_WCDMA;
- case (LTE | RAF_TD_SCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA;
- case (RAF_TD_SCDMA | GSM):
- return TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM;
- case (LTE | RAF_TD_SCDMA | GSM):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM;
- case (RAF_TD_SCDMA | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_GSM_WCDMA;
- case (LTE | RAF_TD_SCDMA | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_WCDMA;
- case (LTE | RAF_TD_SCDMA | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_GSM_WCDMA;
- case (RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
- case (LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
- case (NR):
- return TelephonyManagerConstants.NETWORK_MODE_NR_ONLY;
- case (NR | LTE):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE;
- case (NR | LTE | CDMA | EVDO):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO;
- case (NR | LTE | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_GSM_WCDMA;
- case (NR | LTE | CDMA | EVDO | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_CDMA_EVDO_GSM_WCDMA;
- case (NR | LTE | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_WCDMA;
- case (NR | LTE | RAF_TD_SCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA;
- case (NR | LTE | RAF_TD_SCDMA | GSM):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM;
- case (NR | LTE | RAF_TD_SCDMA | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_WCDMA;
- case (NR | LTE | RAF_TD_SCDMA | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_GSM_WCDMA;
- case (NR | LTE | RAF_TD_SCDMA | CDMA | EVDO | GSM | WCDMA):
- return TelephonyManagerConstants.NETWORK_MODE_NR_LTE_TDSCDMA_CDMA_EVDO_GSM_WCDMA;
- default:
- return TelephonyManagerConstants.NETWORK_MODE_UNKNOWN;
- }
- }
-
- /**
- * Imported from {@link android.telephony.RadioAccessFamily}
- */
- private static int getAdjustedRaf(int raf) {
- raf = ((GSM & raf) > 0) ? (GSM | raf) : raf;
- raf = ((WCDMA & raf) > 0) ? (WCDMA | raf) : raf;
- raf = ((CDMA & raf) > 0) ? (CDMA | raf) : raf;
- raf = ((EVDO & raf) > 0) ? (EVDO | raf) : raf;
- raf = ((LTE & raf) > 0) ? (LTE | raf) : raf;
- raf = ((NR & raf) > 0) ? (NR | raf) : raf;
- return raf;
- }
-
- /**
* Copied from SubscriptionsPreferenceController#activeNetworkIsCellular()
*/
public static boolean activeNetworkIsCellular(Context context) {
diff --git a/src/com/android/settings/network/telephony/NetworkSelectRepository.kt b/src/com/android/settings/network/telephony/NetworkSelectRepository.kt
index d95c90e..219f9db 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectRepository.kt
+++ b/src/com/android/settings/network/telephony/NetworkSelectRepository.kt
@@ -22,6 +22,7 @@
import android.telephony.NetworkRegistrationInfo
import android.telephony.TelephonyManager
import android.telephony.satellite.SatelliteManager
+import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
@@ -92,6 +93,11 @@
* Update satellite PLMNs from the satellite framework.
*/
private fun getSatellitePlmns(): List<String> {
+ if (satelliteManager == null) {
+ Log.d(TAG, "SatelliteManager is null")
+ return emptyList()
+ }
+
val config = carrierConfigManager.getConfigForSubId(
subId,
CarrierConfigManager.KEY_REMOVE_SATELLITE_PLMN_IN_MANUAL_NETWORK_SCAN_BOOL
@@ -104,7 +110,11 @@
return if (shouldFilter) {
satelliteManager.getSatellitePlmnsForCarrier(subId)
} else {
- emptyList();
+ emptyList()
}
}
+
+ private companion object {
+ private const val TAG = "NetworkSelectRepository"
+ }
}
diff --git a/src/com/android/settings/network/telephony/NetworkSelectSettings.java b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
index a16f4b5..4ae51ab 100644
--- a/src/com/android/settings/network/telephony/NetworkSelectSettings.java
+++ b/src/com/android/settings/network/telephony/NetworkSelectSettings.java
@@ -219,7 +219,7 @@
setProgressBarVisible(true);
mNetworkScanJob = mNetworkScanRepository.launchNetworkScan(getViewLifecycleOwner(),
(networkScanResult) -> {
- if (isPreferenceScreenEnabled()) {
+ if (isPreferenceScreenEnabled() && !isFinishingOrDestroyed()) {
scanResultHandler(networkScanResult);
}
diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
index 210cd87..2d567af 100644
--- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
+import android.telephony.RadioAccessFamily;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -72,7 +73,7 @@
mTelephonyManager.setAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER,
- MobileNetworkUtils.getRafFromNetworkType(newPreferredNetworkMode));
+ RadioAccessFamily.getRafFromNetworkType(newPreferredNetworkMode));
final ListPreference listPreference = (ListPreference) preference;
listPreference.setSummary(getPreferredNetworkModeSummaryResId(newPreferredNetworkMode));
@@ -94,7 +95,7 @@
Log.w(TAG, "TelephonyManager is null");
return TelephonyManagerConstants.NETWORK_MODE_UNKNOWN;
}
- return MobileNetworkUtils.getNetworkTypeFromRaf(
+ return RadioAccessFamily.getNetworkTypeFromRaf(
(int) mTelephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER));
}
diff --git a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
index f9751f1..f4d2ce2 100644
--- a/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
+++ b/src/com/android/settings/network/telephony/ToggleSubscriptionDialogActivity.java
@@ -557,15 +557,17 @@
Log.d(TAG, "Hardware does not support DSDS.");
return false;
}
- boolean isActiveSim = SubscriptionUtil.getActiveSubscriptions(
+ boolean anyActiveSim = SubscriptionUtil.getActiveSubscriptions(
mSubscriptionManager).size() > 0;
- if (isMultipleEnabledProfilesSupported() && isActiveSim) {
+ if (isMultipleEnabledProfilesSupported() && anyActiveSim) {
Log.d(TAG,
"Device supports MEP and eSIM operation and eSIM profile is enabled."
+ " DSDS condition satisfied.");
return true;
}
- boolean isRemovableSimEnabled = isRemovableSimEnabled();
+ boolean isRemovableSimEnabled =
+ SubscriptionUtil.getActiveSubscriptions(mSubscriptionManager).stream()
+ .anyMatch(subInfo-> !subInfo.isEmbedded());
if (mIsEsimOperation && isRemovableSimEnabled) {
Log.d(TAG, "eSIM operation and removable SIM is enabled. DSDS condition satisfied.");
return true;
@@ -583,7 +585,7 @@
}
private boolean isRemovableSimEnabled() {
- return new UiccSlotRepository(mTelMgr).anyRemovablePhysicalSimEnabled();
+ return new UiccSlotRepository(mTelMgr).anyRemovablePhysicalSimSlotActiveAndInserted();
}
private boolean isMultipleEnabledProfilesSupported() {
diff --git a/src/com/android/settings/network/telephony/UiccSlotRepository.kt b/src/com/android/settings/network/telephony/UiccSlotRepository.kt
index 3a83805..8a20329 100644
--- a/src/com/android/settings/network/telephony/UiccSlotRepository.kt
+++ b/src/com/android/settings/network/telephony/UiccSlotRepository.kt
@@ -22,17 +22,17 @@
class UiccSlotRepository(private val telephonyManager: TelephonyManager?) {
- /** Returns whether any removable physical sim is enabled. */
- fun anyRemovablePhysicalSimEnabled(): Boolean {
+ /** Returns whether any removable physical sim slot is active and the sim is inserted. */
+ fun anyRemovablePhysicalSimSlotActiveAndInserted(): Boolean {
val result =
telephonyManager?.uiccSlotsInfo?.any { uiccSlotInfo: UiccSlotInfo? ->
- uiccSlotInfo.isRemovablePhysicalSimEnabled()
+ uiccSlotInfo.isRemovablePhysicalSimSlotActiveAndInserted()
} ?: false
Log.i(TAG, "anyRemovablePhysicalSimEnabled: $result")
return result
}
- private fun UiccSlotInfo?.isRemovablePhysicalSimEnabled(): Boolean {
+ private fun UiccSlotInfo?.isRemovablePhysicalSimSlotActiveAndInserted(): Boolean {
return this != null &&
isRemovable &&
!isEuicc &&
diff --git a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
index 4f4c35d..fe702e4 100644
--- a/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/cdma/CdmaSystemSelectPreferenceController.java
@@ -22,14 +22,13 @@
import android.content.Context;
import android.provider.Settings;
+import android.telephony.RadioAccessFamily;
import android.telephony.TelephonyManager;
import android.util.Log;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
-import com.android.settings.network.telephony.MobileNetworkUtils;
-
/**
* Preference controller for "System Select"
*/
@@ -65,7 +64,7 @@
}
final int settingsNetworkMode =
- hasTelephonyMgr ? MobileNetworkUtils.getNetworkTypeFromRaf(
+ hasTelephonyMgr ? RadioAccessFamily.getNetworkTypeFromRaf(
(int) mTelephonyManager.getAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER))
: NETWORK_MODE_UNKNOWN;
diff --git a/src/com/android/settings/network/tether/TetherSettings.java b/src/com/android/settings/network/tether/TetherSettings.java
index 77ef4b6..7458514 100644
--- a/src/com/android/settings/network/tether/TetherSettings.java
+++ b/src/com/android/settings/network/tether/TetherSettings.java
@@ -54,8 +54,8 @@
import androidx.preference.TwoStatePreference;
import com.android.settings.R;
-import com.android.settings.RestrictedSettingsFragment;
import com.android.settings.Utils;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.datausage.DataSaverBackend;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.wifi.tether.WifiTetherPreferenceController;
@@ -75,7 +75,7 @@
* Displays preferences for Tethering.
*/
@SearchIndexable
-public class TetherSettings extends RestrictedSettingsFragment
+public class TetherSettings extends RestrictedDashboardFragment
implements DataSaverBackend.Listener {
@VisibleForTesting
@@ -144,10 +144,18 @@
}
@Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.tether_prefs;
+ }
+
+ @Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- // Even when the UI is restricted, addPreferencesFromResource cannot be omitted.
- addPreferencesFromResource(R.xml.tether_prefs);
setIfOnlyAvailableForAdmins(true);
if (isUiRestricted()) {
return;
diff --git a/src/com/android/settings/notification/CallVolumePreference.kt b/src/com/android/settings/notification/CallVolumePreference.kt
new file mode 100644
index 0000000..0126e13
--- /dev/null
+++ b/src/com/android/settings/notification/CallVolumePreference.kt
@@ -0,0 +1,113 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification
+
+import android.content.Context
+import android.media.AudioManager
+import android.media.AudioManager.STREAM_BLUETOOTH_SCO
+import android.media.AudioManager.STREAM_VOICE_CALL
+import android.os.UserHandle
+import android.os.UserManager.DISALLOW_ADJUST_VOLUME
+import androidx.preference.Preference
+import com.android.settings.R
+import com.android.settingslib.RestrictedLockUtilsInternal
+import com.android.settingslib.datastore.KeyValueStore
+import com.android.settingslib.datastore.NoOpKeyedObservable
+import com.android.settingslib.metadata.PersistentPreference
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.PreferenceIconProvider
+import com.android.settingslib.metadata.PreferenceMetadata
+import com.android.settingslib.metadata.PreferenceRestrictionProvider
+import com.android.settingslib.metadata.RangeValue
+import com.android.settingslib.preference.PreferenceBinding
+
+// LINT.IfChange
+open class CallVolumePreference :
+ PreferenceMetadata,
+ PreferenceBinding,
+ PersistentPreference<Int>,
+ RangeValue,
+ PreferenceAvailabilityProvider,
+ PreferenceIconProvider,
+ PreferenceRestrictionProvider {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.call_volume_option_title
+
+ override fun getIcon(context: Context) = R.drawable.ic_local_phone_24_lib
+
+ override fun isAvailable(context: Context) =
+ context.resources.getBoolean(R.bool.config_show_call_volume) &&
+ !createAudioHelper(context).isSingleVolume()
+
+ override fun isRestricted(context: Context) =
+ RestrictedLockUtilsInternal.hasBaseUserRestriction(
+ context,
+ DISALLOW_ADJUST_VOLUME,
+ UserHandle.myUserId()
+ ) || RestrictedLockUtilsInternal.checkIfRestrictionEnforced(
+ context,
+ DISALLOW_ADJUST_VOLUME,
+ UserHandle.myUserId()
+ ) != null
+
+ override fun storage(context: Context): KeyValueStore {
+ val helper = createAudioHelper(context)
+ return object : NoOpKeyedObservable<String>(), KeyValueStore {
+ override fun contains(key: String) = key == KEY
+
+ @Suppress("UNCHECKED_CAST")
+ override fun <T : Any> getValue(key: String, valueType: Class<T>) =
+ helper.getStreamVolume(getAudioStream(context)) as T
+
+ override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) {
+ helper.setStreamVolume(getAudioStream(context), value as Int)
+ }
+ }
+ }
+
+ override fun getMinValue(context: Context) =
+ createAudioHelper(context).getMinVolume(getAudioStream(context))
+
+ override fun getMaxValue(context: Context) =
+ createAudioHelper(context).getMaxVolume(getAudioStream(context))
+
+ override fun createWidget(context: Context) = VolumeSeekBarPreference(context)
+
+ override fun bind(preference: Preference, metadata: PreferenceMetadata) {
+ super.bind(preference, metadata)
+ (preference as VolumeSeekBarPreference).setStream(getAudioStream(preference.context))
+ }
+
+ open fun createAudioHelper(context: Context) = AudioHelper(context)
+
+ @Suppress("DEPRECATION")
+ fun getAudioStream(context: Context): Int {
+ val audioManager = context.getSystemService(AudioManager::class.java)
+ return when {
+ audioManager.isBluetoothScoOn() -> STREAM_BLUETOOTH_SCO
+ else -> STREAM_VOICE_CALL
+ }
+ }
+
+ companion object {
+ const val KEY = "call_volume"
+ }
+}
+// LINT.ThenChange(CallVolumePreferenceController.java)
diff --git a/src/com/android/settings/notification/CallVolumePreferenceController.java b/src/com/android/settings/notification/CallVolumePreferenceController.java
index d505227..d7c5ddc 100644
--- a/src/com/android/settings/notification/CallVolumePreferenceController.java
+++ b/src/com/android/settings/notification/CallVolumePreferenceController.java
@@ -22,7 +22,7 @@
import com.android.settings.R;
-
+// LINT.IfChange
public class CallVolumePreferenceController extends VolumeSeekBarPreferenceController {
private AudioManager mAudioManager;
@@ -69,3 +69,4 @@
}
}
+// LINT.ThenChange(CallVolumePreference.kt)
diff --git a/src/com/android/settings/notification/DialPadTonePreference.kt b/src/com/android/settings/notification/DialPadTonePreference.kt
new file mode 100644
index 0000000..32bc42e
--- /dev/null
+++ b/src/com/android/settings/notification/DialPadTonePreference.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.notification
+
+import android.content.Context
+import android.provider.Settings.System.DTMF_TONE_WHEN_DIALING
+import com.android.settings.R
+import com.android.settings.Utils
+import com.android.settingslib.datastore.SettingsSystemStore
+import com.android.settingslib.metadata.PreferenceAvailabilityProvider
+import com.android.settingslib.metadata.SwitchPreference
+
+// LINT.IfChange
+class DialPadTonePreference :
+ SwitchPreference(DTMF_TONE_WHEN_DIALING, R.string.dial_pad_tones_title),
+ PreferenceAvailabilityProvider {
+
+ override fun storage(context: Context) = SettingsSystemStore.get(context)
+
+ override fun isAvailable(context: Context) = Utils.isVoiceCapable(context)
+}
+// LINT.ThenChange(DialPadTonePreferenceController.java)
diff --git a/src/com/android/settings/notification/DialPadTonePreferenceController.java b/src/com/android/settings/notification/DialPadTonePreferenceController.java
index 1b05ce2..bfbf120 100644
--- a/src/com/android/settings/notification/DialPadTonePreferenceController.java
+++ b/src/com/android/settings/notification/DialPadTonePreferenceController.java
@@ -16,24 +16,24 @@
package com.android.settings.notification;
+import static android.provider.Settings.System.DTMF_TONE_WHEN_DIALING;
+
import static com.android.settings.notification.SettingPref.TYPE_SYSTEM;
import android.content.Context;
-import android.provider.Settings.System;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settingslib.core.lifecycle.Lifecycle;
+// LINT.IfChange
public class DialPadTonePreferenceController extends SettingPrefController {
- private static final String KEY_DIAL_PAD_TONES = "dial_pad_tones";
-
public DialPadTonePreferenceController(Context context, SettingsPreferenceFragment parent,
Lifecycle lifecycle) {
super(context, parent, lifecycle);
- mPreference = new SettingPref(
- TYPE_SYSTEM, KEY_DIAL_PAD_TONES, System.DTMF_TONE_WHEN_DIALING, DEFAULT_ON) {
+ mPreference = new SettingPref(TYPE_SYSTEM, DTMF_TONE_WHEN_DIALING, DTMF_TONE_WHEN_DIALING,
+ DEFAULT_ON) {
@Override
public boolean isApplicable(Context context) {
return Utils.isVoiceCapable(context);
@@ -42,3 +42,4 @@
}
}
+// LINT.ThenChange(DialPadTonePreference.kt)
diff --git a/src/com/android/settings/notification/SoundScreen.kt b/src/com/android/settings/notification/SoundScreen.kt
index f1f2749..e36576d 100644
--- a/src/com/android/settings/notification/SoundScreen.kt
+++ b/src/com/android/settings/notification/SoundScreen.kt
@@ -19,12 +19,13 @@
import androidx.fragment.app.Fragment
import com.android.settings.R
import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.PreferenceIconProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen
-class SoundScreen : PreferenceScreenCreator {
+class SoundScreen : PreferenceScreenCreator, PreferenceIconProvider {
override val key: String
get() = KEY
@@ -34,13 +35,23 @@
override val keywords: Int
get() = R.string.keywords_sounds
+ override fun getIcon(context: Context) =
+ when {
+ Flags.homepageRevamp() -> R.drawable.ic_volume_up_filled
+ else -> R.drawable.ic_volume_up_24dp
+ }
+
override fun isFlagEnabled(context: Context): Boolean = Flags.catalystSoundScreen()
override fun hasCompleteHierarchy() = false
override fun fragmentClass(): Class<out Fragment>? = SoundSettings::class.java
- override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+ override fun getPreferenceHierarchy(context: Context) =
+ preferenceHierarchy(this) {
+ +CallVolumePreference() order -170
+ +DialPadTonePreference() order -50
+ }
companion object {
const val KEY = "sound_screen"
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 596f19b..fffb784 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -113,6 +113,14 @@
if (phoneRingTonePreference != null && openPhoneRingtonePicker) {
onPreferenceTreeClick(phoneRingTonePreference);
}
+ if (isCatalystEnabled()) {
+ for (String key : getPreferenceKeysInHierarchy()) {
+ Preference preference = findPreference(key);
+ if (preference instanceof VolumeSeekBarPreference) {
+ ((VolumeSeekBarPreference) preference).setCallback(mVolumeCallback);
+ }
+ }
+ }
}
@Override
@@ -195,23 +203,21 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- if (!isCatalystEnabled()) {
- ArrayList<VolumeSeekBarPreferenceController> volumeControllers = new ArrayList<>();
- volumeControllers.add(use(AlarmVolumePreferenceController.class));
- volumeControllers.add(use(MediaVolumePreferenceController.class));
- volumeControllers.add(use(SeparateRingVolumePreferenceController.class));
- volumeControllers.add(use(NotificationVolumePreferenceController.class));
- volumeControllers.add(use(CallVolumePreferenceController.class));
+ ArrayList<VolumeSeekBarPreferenceController> volumeControllers = new ArrayList<>();
+ volumeControllers.add(use(AlarmVolumePreferenceController.class));
+ volumeControllers.add(use(MediaVolumePreferenceController.class));
+ volumeControllers.add(use(SeparateRingVolumePreferenceController.class));
+ volumeControllers.add(use(NotificationVolumePreferenceController.class));
+ volumeControllers.add(use(CallVolumePreferenceController.class));
- use(HandsFreeProfileOutputPreferenceController.class).setCallback(listPreference ->
- onPreferenceDataChanged(listPreference));
- mHfpOutputControllerKey =
- use(HandsFreeProfileOutputPreferenceController.class).getPreferenceKey();
+ use(HandsFreeProfileOutputPreferenceController.class).setCallback(listPreference ->
+ onPreferenceDataChanged(listPreference));
+ mHfpOutputControllerKey =
+ use(HandsFreeProfileOutputPreferenceController.class).getPreferenceKey();
- for (VolumeSeekBarPreferenceController controller : volumeControllers) {
- controller.setCallback(mVolumeCallback);
- getSettingsLifecycle().addObserver(controller);
- }
+ for (VolumeSeekBarPreferenceController controller : volumeControllers) {
+ controller.setCallback(mVolumeCallback);
+ getSettingsLifecycle().addObserver(controller);
}
}
diff --git a/src/com/android/settings/notification/app/BundleListPreferenceController.java b/src/com/android/settings/notification/app/BundleListPreferenceController.java
index 82e910c..9ada049 100644
--- a/src/com/android/settings/notification/app/BundleListPreferenceController.java
+++ b/src/com/android/settings/notification/app/BundleListPreferenceController.java
@@ -91,14 +91,27 @@
public void updateState(Preference preference) {
PreferenceCategory category = (PreferenceCategory) preference;
- createOrUpdatePrefForChannel(category,
- mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID));
- createOrUpdatePrefForChannel(category,
- mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID));
- createOrUpdatePrefForChannel(category,
- mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID));
- createOrUpdatePrefForChannel(category,
- mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID));
+ NotificationChannel promos = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID);
+ if (promos != null) {
+ createOrUpdatePrefForChannel(category, promos);
+ }
+ NotificationChannel recs = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID);
+ if (recs != null) {
+ createOrUpdatePrefForChannel(category, recs);
+ }
+ NotificationChannel social = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID);
+ if (social != null) {
+ createOrUpdatePrefForChannel(category, social);
+ }
+ NotificationChannel news = mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID);
+ if (news != null) {
+ createOrUpdatePrefForChannel(category, news);
+ }
+
+ int preferenceCount = ((PreferenceGroup) preference).getPreferenceCount();
+ if (preferenceCount == 0) {
+ preference.setVisible(false);
+ }
}
@NonNull
@@ -167,5 +180,4 @@
icon.setTintList(Utils.getColorAccent(mContext));
return icon;
}
-
}
diff --git a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java
index 483b8f0..2a0e8b3 100644
--- a/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java
+++ b/src/com/android/settings/notification/modes/ZenModeSummaryHelper.java
@@ -498,29 +498,27 @@
MessageFormat msgFormat = new MessageFormat(
mContext.getString(R.string.zen_modes_summary_some_active),
Locale.getDefault());
-
- Map<String, Object> args = new HashMap<>();
- args.put("count", activeModes.size());
- args.put("mode_1", activeModes.get(0).getName());
- if (activeModes.size() >= 2) {
- args.put("mode_2", activeModes.get(1).getName());
- if (activeModes.size() == 3) {
- args.put("mode_3", activeModes.get(2).getName());
- }
- }
-
- return msgFormat.format(args);
+ return buildModesSummary(msgFormat, activeModes);
} else {
- int automaticModeCount = (int) modes.stream()
- .filter(m -> m.isEnabled() && !m.isManualDnd() && !m.isCustomManual())
- .count();
-
MessageFormat msgFormat = new MessageFormat(
- mContext.getString(R.string.zen_modes_summary_none_active),
+ mContext.getString(R.string.zen_modes_summary),
Locale.getDefault());
- Map<String, Object> msgArgs = Map.of("count", automaticModeCount);
- return msgFormat.format(msgArgs);
+ return buildModesSummary(msgFormat, modes);
}
}
+ private static String buildModesSummary(MessageFormat msgFormat, List<ZenMode> modes) {
+ Map<String, Object> args = new HashMap<>();
+ args.put("count", modes.size());
+ if (modes.size() >= 1) {
+ args.put("mode_1", modes.get(0).getName());
+ if (modes.size() >= 2) {
+ args.put("mode_2", modes.get(1).getName());
+ if (modes.size() >= 3) {
+ args.put("mode_3", modes.get(2).getName());
+ }
+ }
+ }
+ return msgFormat.format(args);
+ }
}
diff --git a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java
index 1933635..13d5c6e 100644
--- a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java
+++ b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java
@@ -40,6 +40,7 @@
import androidx.preference.Preference;
import com.android.settings.R;
+import com.android.settings.Utils;
import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.notification.modes.ZenMode;
import com.android.settingslib.notification.modes.ZenModesBackend;
@@ -108,7 +109,9 @@
tryParseScheduleConditionId(mode.getRule().getConditionId());
if (schedule != null) {
preference.setTitle(SystemZenRules.getTimeSummary(mContext, schedule));
- preference.setSummary(SystemZenRules.getShortDaysSummary(mContext, schedule));
+ preference.setSummary(Utils.createAccessibleSequence(
+ SystemZenRules.getDaysOfWeekShort(mContext, schedule),
+ SystemZenRules.getDaysOfWeekFull(mContext, schedule)));
} else {
// Fallback, but shouldn't happen.
Log.wtf(TAG, "SCHEDULE_TIME mode without schedule: " + mode);
@@ -174,8 +177,8 @@
@DrawableRes int icon;
if (mode.getType() == TYPE_BEDTIME) {
icon = com.android.internal.R.drawable.ic_zen_mode_type_schedule_time; // Clock
- } else if (mode.getType() == TYPE_DRIVING) {
- icon = com.android.internal.R.drawable.ic_zen_mode_type_driving; // Car
+ } else if (mode.getType() == TYPE_DRIVING && configurationIntent != null) {
+ icon = R.drawable.ic_zen_mode_trigger_with_settings; // Gear
} else {
icon = configurationIntent != null ? R.drawable.ic_zen_mode_trigger_with_activity
: R.drawable.ic_zen_mode_trigger_without_activity;
diff --git a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
index de0d386..9f0c404 100644
--- a/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
+++ b/src/com/android/settings/regionalpreferences/NumberingSystemItemController.java
@@ -35,8 +35,8 @@
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import java.util.Locale;
@@ -138,13 +138,13 @@
for (String localeTag : locales) {
Locale supportedLocale = Locale.forLanguageTag(localeTag);
if (isSameBaseLocale(targetLocale, supportedLocale)) {
- TickButtonPreference pref = new TickButtonPreference(mContext);
+ SelectorWithWidgetPreference pref = new SelectorWithWidgetPreference(mContext);
String numberingName = getNumberingSystem(supportedLocale);
pref.setTitle(numberingName);
String key = supportedLocale.getUnicodeLocaleType(
ExtensionTypes.NUMBERING_SYSTEM);
pref.setKey(key == null ? RegionalPreferencesDataUtils.DEFAULT_VALUE : key);
- pref.setSelected(isSameNumberingSystem(targetLocale, supportedLocale));
+ pref.setChecked(isSameNumberingSystem(targetLocale, supportedLocale));
screen.addPreference(pref);
}
}
@@ -168,11 +168,12 @@
private void handleNumberSystemSelect(Preference preference) {
for (int i = 0; i < mPreferenceScreen.getPreferenceCount(); i++) {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceScreen.getPreference(i);
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(i);
Log.i(TAG, "[onPreferenceClick] key is " + pref.getKey());
if (pref.getKey().equals(preference.getKey())) {
String numberingSystem = pref.getKey();
- pref.setSelected(true);
+ pref.setChecked(true);
Locale updatedLocale =
saveNumberingSystemToLocale(Locale.forLanguageTag(mSelectedLanguage),
numberingSystem);
@@ -188,7 +189,7 @@
mParentFragment.setArguments(bundle);
continue;
}
- pref.setSelected(false);
+ pref.setChecked(false);
}
}
diff --git a/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java b/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
index 8be0043..dda0579 100644
--- a/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
+++ b/src/com/android/settings/regionalpreferences/RegionalPreferenceListBasePreferenceController.java
@@ -24,8 +24,8 @@
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.widget.TickButtonPreference;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
/** A base controller for handling all regional preferences controllers. */
public abstract class RegionalPreferenceListBasePreferenceController extends
@@ -54,15 +54,14 @@
String[] unitValues = getUnitValues();
for (int i = 0; i < unitValues.length; i++) {
- TickButtonPreference pref = new TickButtonPreference(mContext);
+ SelectorWithWidgetPreference pref = new SelectorWithWidgetPreference(mContext);
mPreferenceCategory.addPreference(pref);
final String item = unitValues[i];
final String value = RegionalPreferencesDataUtils.getDefaultUnicodeExtensionData(
mContext, getExtensionTypes());
pref.setTitle(getPreferenceTitle(item));
pref.setKey(item);
- pref.setOnPreferenceClickListener(clickedPref -> {
- setSelected(pref);
+ pref.setOnClickListener(v -> {
RegionalPreferencesDataUtils.savePreference(mContext, getExtensionTypes(),
item.equals(RegionalPreferencesDataUtils.DEFAULT_VALUE)
? null : item);
@@ -70,20 +69,8 @@
getMetricsActionKey() == SettingsEnums.ACTION_SET_FIRST_DAY_OF_WEEK ? ""
: getPreferenceTitle(value) + " > " + getPreferenceTitle(item);
mMetricsFeatureProvider.action(mContext, getMetricsActionKey(), metrics);
- return true;
});
- pref.setSelected(!value.isEmpty() && item.equals(value));
- }
- }
-
- private void setSelected(TickButtonPreference preference) {
- for (int i = 0; i < mPreferenceCategory.getPreferenceCount(); i++) {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(i);
- if (pref.getKey().equals(preference.getKey())) {
- pref.setSelected(true);
- continue;
- }
- pref.setSelected(false);
+ pref.setChecked(!value.isEmpty() && item.equals(value));
}
}
diff --git a/src/com/android/settings/security/LockScreenPreferenceScreen.kt b/src/com/android/settings/security/LockScreenPreferenceScreen.kt
new file mode 100644
index 0000000..0c7877f
--- /dev/null
+++ b/src/com/android/settings/security/LockScreenPreferenceScreen.kt
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.security
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+open class LockScreenPreferenceScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.lockscreen_settings_title
+
+ override val keywords: Int
+ get() = R.string.keywords_ambient_display_screen
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystLockscreenFromDisplaySettings()
+
+ override fun hasCompleteHierarchy() = false
+
+ override fun fragmentClass() = LockscreenDashboardFragment::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {
+ // add hierarchy here
+ }
+
+ companion object {
+ const val KEY = "lockscreen_from_display_settings"
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java
index 2e4a1f2..1e299a3 100644
--- a/src/com/android/settings/security/LockscreenDashboardFragment.java
+++ b/src/com/android/settings/security/LockscreenDashboardFragment.java
@@ -29,6 +29,8 @@
import android.os.Looper;
import android.provider.Settings;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import com.android.settings.R;
@@ -160,6 +162,11 @@
}
}
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return LockScreenPreferenceScreen.KEY;
+ }
+
private AmbientDisplayConfiguration getConfig(Context context) {
if (mConfig == null) {
mConfig = new AmbientDisplayConfiguration(context);
diff --git a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt
index fa9cee2..f7e53ec 100644
--- a/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt
+++ b/src/com/android/settings/spa/app/appinfo/AppInfoSettings.kt
@@ -140,18 +140,20 @@
AppButtons(packageInfoPresenter, isHibernationSwitchEnabledStateFlow)
- AppSettingsPreference(app)
- AppAllServicesPreference(app)
- AppNotificationPreference(app)
- AppPermissionPreference(app)
- AppStoragePreference(app)
- InstantAppDomainsPreference(app)
- AppDataUsagePreference(app)
- AppTimeSpentPreference(app)
- AppBatteryPreference(app)
- AppLocalePreference(app)
- AppOpenByDefaultPreference(app)
- DefaultAppShortcuts(app)
+ Category {
+ AppSettingsPreference(app)
+ AppAllServicesPreference(app)
+ AppNotificationPreference(app)
+ AppPermissionPreference(app)
+ AppStoragePreference(app)
+ InstantAppDomainsPreference(app)
+ AppDataUsagePreference(app)
+ AppTimeSpentPreference(app)
+ AppBatteryPreference(app)
+ AppLocalePreference(app)
+ AppOpenByDefaultPreference(app)
+ DefaultAppShortcuts(app)
+ }
Category(title = stringResource(R.string.unused_apps_category)) {
HibernationSwitchPreference(app, isHibernationSwitchEnabledStateFlow)
diff --git a/src/com/android/settings/spa/app/battery/BatteryOptimizationModeAppListPageProvider.kt b/src/com/android/settings/spa/app/battery/BatteryOptimizationModeAppListPageProvider.kt
index f077506..5c27f5b 100644
--- a/src/com/android/settings/spa/app/battery/BatteryOptimizationModeAppListPageProvider.kt
+++ b/src/com/android/settings/spa/app/battery/BatteryOptimizationModeAppListPageProvider.kt
@@ -107,7 +107,7 @@
PowerAllowlistBackend.getInstance(context).refreshList()
return recordListFlow.filterItem {
val appOptimizationMode = BatteryOptimizeUtils(context, it.app.uid, it.app.packageName)
- .getAppOptimizationMode(/* refreshList */ false);
+ .getAppOptimizationMode(/* refreshList */ false, /* ignoreUnknownMode */ true);
when (OptimizationModeSpinnerItem.entries.getOrNull(option)) {
OptimizationModeSpinnerItem.Restricted ->
appOptimizationMode == BatteryOptimizeUtils.MODE_RESTRICTED
diff --git a/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java b/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
index fe90a2a..2dc5b2d 100644
--- a/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
+++ b/src/com/android/settings/users/AddUserWhenLockedPreferenceController.java
@@ -46,8 +46,6 @@
restrictedSwitchPreference.setVisible(true);
if (mUserCaps.mDisallowAddUserSetByAdmin) {
restrictedSwitchPreference.setDisabledByAdmin(mUserCaps.mEnforcedAdmin);
- } else if (mUserCaps.mDisallowAddUser) {
- restrictedSwitchPreference.setVisible(false);
}
} else {
restrictedSwitchPreference.setDisabledByAdmin(
@@ -62,7 +60,11 @@
if (!mUserCaps.isAdmin()) {
return DISABLED_FOR_USER;
} else if (android.multiuser.Flags.newMultiuserSettingsUx()) {
- return AVAILABLE;
+ if (mUserCaps.mDisallowAddUser && !mUserCaps.mDisallowAddUserSetByAdmin) {
+ return DISABLED_FOR_USER;
+ } else {
+ return AVAILABLE;
+ }
} else if (mUserCaps.disallowAddUser() || mUserCaps.disallowAddUserSetByAdmin()) {
return DISABLED_FOR_USER;
} else {
diff --git a/src/com/android/settings/wifi/calling/WifiCallingScreen.kt b/src/com/android/settings/wifi/calling/WifiCallingScreen.kt
new file mode 100644
index 0000000..b50b828
--- /dev/null
+++ b/src/com/android/settings/wifi/calling/WifiCallingScreen.kt
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.wifi.calling
+
+import android.content.Context
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.metadata.ProvidePreferenceScreen
+import com.android.settingslib.metadata.preferenceHierarchy
+import com.android.settingslib.preference.PreferenceScreenCreator
+
+@ProvidePreferenceScreen
+class WifiCallingScreen : PreferenceScreenCreator {
+ override val key: String
+ get() = KEY
+
+ override val title: Int
+ get() = R.string.wifi_calling_settings_title
+
+ override val summary: Int
+ get() = R.string.wifi_calling_summary
+
+ override fun isFlagEnabled(context: Context) = Flags.catalystWifiCalling()
+
+ override fun fragmentClass() = WifiCallingSettingsForSub::class.java
+
+ override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {}
+
+ companion object {
+ const val KEY = "wifi_calling"
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
index e5581d3..1de3f5c 100644
--- a/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
+++ b/src/com/android/settings/wifi/calling/WifiCallingSettingsForSub.java
@@ -54,9 +54,9 @@
import com.android.internal.telephony.flags.Flags;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
-import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher;
+import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.ims.WifiCallingQueryImsState;
import com.android.settings.network.telephony.wificalling.IWifiCallingRepository;
import com.android.settings.network.telephony.wificalling.WifiCallingRepository;
@@ -70,7 +70,7 @@
* This is the inner class of {@link WifiCallingSettings} fragment.
* The preference screen lets you enable/disable Wi-Fi Calling and change Wi-Fi Calling mode.
*/
-public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
+public class WifiCallingSettingsForSub extends DashboardFragment
implements OnCheckedChangeListener,
Preference.OnPreferenceChangeListener {
private static final String TAG = "WifiCallingForSub";
@@ -266,8 +266,6 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.wifi_calling_settings);
-
// SubId should always be specified when creating this fragment. Either through
// fragment.setArguments() or through savedInstanceState.
if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID)) {
@@ -447,6 +445,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.wifi_calling_settings;
+ }
+
+ @Override
public void onPause() {
super.onPause();
Context context = getActivity();
@@ -571,6 +574,11 @@
}
}
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
private void updateButtonWfcMode(boolean wfcEnabled,
int wfcMode, int wfcRoamingMode) {
mButtonWfcMode.setSummary(getWfcModeSummary(wfcMode));
@@ -716,4 +724,9 @@
return mOverrideWfcRoamingModeWhileUsingNtn;
}
+
+ @Override
+ public @Nullable String getPreferenceScreenBindingKey(@NonNull Context context) {
+ return WifiCallingScreen.KEY;
+ }
}
diff --git a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
index 9febba3..5ea9b3c 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSwitchBarController.java
@@ -58,6 +58,9 @@
private final WifiManager mWifiManager;
@VisibleForTesting
+ boolean mIsSwitchBusy;
+
+ @VisibleForTesting
DataSaverBackend mDataSaverBackend;
@VisibleForTesting
final ConnectivityManager.OnStartTetheringCallback mOnStartTetheringCallback =
@@ -102,8 +105,8 @@
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- // Filter out unnecessary callbacks when switch is disabled.
- if (!buttonView.isEnabled()) return;
+ // Filter out inappropriate callbacks when switch is busy.
+ if (mIsSwitchBusy) return;
if (isChecked) {
startTether();
@@ -115,14 +118,14 @@
void stopTether() {
if (!isWifiApActivated()) return;
- mSwitchBar.setEnabled(false);
+ mIsSwitchBusy = true;
mConnectivityManager.stopTethering(TETHERING_WIFI);
}
void startTether() {
if (isWifiApActivated()) return;
- mSwitchBar.setEnabled(false);
+ mIsSwitchBusy = true;
mConnectivityManager.startTethering(TETHERING_WIFI, true /* showProvisioningUi */,
mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));
}
@@ -159,6 +162,7 @@
private void updateWifiSwitch() {
mSwitchBar.setEnabled(!mDataSaverBackend.isDataSaverEnabled());
+ mIsSwitchBusy = false;
}
@Override
diff --git a/tests/Enable16KbTests/Android.bp b/tests/Enable16KbTests/Android.bp
index 7e1d32c..72826bb 100644
--- a/tests/Enable16KbTests/Android.bp
+++ b/tests/Enable16KbTests/Android.bp
@@ -53,7 +53,7 @@
"compatibility-host-util",
"compatibility-tradefed",
],
- data: [
+ device_common_data: [
":test_16kb_app",
],
test_suites: ["general-tests"],
diff --git a/tests/robotests/Android.bp b/tests/robotests/Android.bp
index 84c84b0..1cac363 100644
--- a/tests/robotests/Android.bp
+++ b/tests/robotests/Android.bp
@@ -109,7 +109,10 @@
java_library {
name: "Settings-robo-testutils",
- srcs: ["testutils/**/*.java"],
+ srcs: [
+ "testutils/**/*.java",
+ "testutils/**/*.kt",
+ ],
libs: [
"Robolectric_all-target_upstream",
"Settings-core",
diff --git a/tests/robotests/OWNERS b/tests/robotests/OWNERS
index 8a7a27e..e15af1c 100644
--- a/tests/robotests/OWNERS
+++ b/tests/robotests/OWNERS
@@ -1,2 +1,3 @@
# We do not guard tests - everyone is welcomed to contribute to tests.
-per-file *.java=*
\ No newline at end of file
+per-file *.java=*
+per-file *.kt=*
diff --git a/tests/robotests/src/com/android/settings/MainClearTest.java b/tests/robotests/src/com/android/settings/MainClearTest.java
index 0f823d6..4c2b266 100644
--- a/tests/robotests/src/com/android/settings/MainClearTest.java
+++ b/tests/robotests/src/com/android/settings/MainClearTest.java
@@ -149,8 +149,8 @@
doReturn(mMockActivity).when(mMainClear).getActivity();
when(mMockActivity.getSystemService(BiometricManager.class)).thenReturn(mBiometricManager);
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
- .thenReturn(BiometricManager.BIOMETRIC_ERROR_MANDATORY_NOT_ACTIVE);
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
+ .thenReturn(BiometricManager.BIOMETRIC_ERROR_IDENTITY_CHECK_NOT_ACTIVE);
}
@After
@@ -379,7 +379,7 @@
when(mMockActivity.getSystemService(BiometricManager.class)).thenReturn(mBiometricManager);
when(mResources.getString(anyInt())).thenReturn(TEST_ACCOUNT_NAME);
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
.thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
doReturn(true).when(mMainClear).isValidRequestCode(eq(MainClear.KEYGUARD_REQUEST));
doNothing().when(mMainClear).startActivityForResult(any(), anyInt());
@@ -406,7 +406,7 @@
when(mMockActivity.getSystemService(BiometricManager.class)).thenReturn(mBiometricManager);
when(mResources.getString(anyInt())).thenReturn(TEST_ACCOUNT_NAME);
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
.thenReturn(BiometricManager.BIOMETRIC_ERROR_LOCKOUT);
doReturn(true).when(mMainClear).isValidRequestCode(eq(MainClear.KEYGUARD_REQUEST));
doNothing().when(mMainClear).startActivityForResult(any(), anyInt());
diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java
index 8f4b83e..b91ad6d 100644
--- a/tests/robotests/src/com/android/settings/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/UtilsTest.java
@@ -541,7 +541,7 @@
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void testRequestBiometricAuthentication_biometricManagerReturnsSuccess_shouldReturnOk() {
when(mBiometricManager.canAuthenticate(USER_ID,
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ BiometricManager.Authenticators.IDENTITY_CHECK))
.thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
final Utils.BiometricStatus requestBiometricAuthenticationForMandatoryBiometrics =
Utils.requestBiometricAuthenticationForMandatoryBiometrics(mContext,
@@ -554,7 +554,7 @@
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void testRequestBiometricAuthentication_biometricManagerReturnsError_shouldReturnError() {
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
assertThat(Utils.requestBiometricAuthenticationForMandatoryBiometrics(mContext,
false /* biometricsAuthenticationRequested */, USER_ID)).isEqualTo(
@@ -567,10 +567,10 @@
when(mContext.getSystemService(UserManager.class)).thenReturn(mMockUserManager);
when(mMockUserManager.getCredentialOwnerProfile(USER_ID)).thenReturn(USER_ID);
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
when(mBiometricManager.canAuthenticate(0 /* userId */,
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ BiometricManager.Authenticators.IDENTITY_CHECK))
.thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
assertThat(Utils.requestBiometricAuthenticationForMandatoryBiometrics(mContext,
false /* biometricsAuthenticationRequested */, USER_ID)).isEqualTo(
@@ -594,7 +594,7 @@
final Intent intent = intentArgumentCaptor.getValue();
assertThat(intent.getExtra(BIOMETRIC_PROMPT_AUTHENTICATORS)).isEqualTo(
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS);
+ BiometricManager.Authenticators.IDENTITY_CHECK);
assertThat(intent.getExtra(BIOMETRIC_PROMPT_NEGATIVE_BUTTON_TEXT)).isNotNull();
assertThat(intent.getExtra(KeyguardManager.EXTRA_DESCRIPTION)).isNotNull();
assertThat(intent.getBooleanExtra(ChooseLockSettingsHelper.EXTRA_KEY_ALLOW_ANY_USER, false))
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java
index e5e8950..25a2cc1 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java
@@ -22,33 +22,52 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothProfile;
import android.content.Context;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
import android.telephony.TelephonyManager;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
+import com.android.settings.bluetooth.Utils;
import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadow.api.Shadow;
import java.util.List;
/** Tests for {@link AccessibilityHearingAidsFragment}. */
@RunWith(RobolectricTestRunner.class)
+@Config(shadows = {ShadowBluetoothAdapter.class, ShadowBluetoothUtils.class})
public class AccessibilityHearingAidsFragmentTest {
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule
+ public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
+
+ @Mock
+ private LocalBluetoothManager mLocalBluetoothManager;
+ private ShadowBluetoothAdapter mShadowBluetoothAdapter;
+ private BluetoothAdapter mBluetoothAdapter;
private TelephonyManager mTelephonyManager;
@Before
@@ -56,10 +75,18 @@
mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class));
when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported();
+
+ ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBluetoothManager;
+ mLocalBluetoothManager = Utils.getLocalBtManager(mContext);
+ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ mShadowBluetoothAdapter = Shadow.extract(mBluetoothAdapter);
}
@Test
public void getNonIndexableKeys_existInXmlLayout() {
+ mShadowBluetoothAdapter.clearSupportedProfiles();
+ mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
+
final List<String> niks = AccessibilityHearingAidsFragment.SEARCH_INDEX_DATA_PROVIDER
.getNonIndexableKeys(mContext);
final List<String> keys =
@@ -67,4 +94,22 @@
assertThat(keys).containsAtLeastElementsIn(niks);
}
+
+ @Test
+ @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
+ public void deviceSupportsHearingAid_isPageSearchEnabled_returnTrue() {
+ mShadowBluetoothAdapter.clearSupportedProfiles();
+ mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEARING_AID);
+
+ assertThat(AccessibilityHearingAidsFragment.isPageSearchEnabled(mContext)).isTrue();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_FIX_A11Y_SETTINGS_SEARCH)
+ public void deviceDoesNotSupportHearingAid_isPageSearchEnabled_returnFalse() {
+ mShadowBluetoothAdapter.clearSupportedProfiles();
+ mShadowBluetoothAdapter.addSupportedProfiles(BluetoothProfile.HEADSET);
+
+ assertThat(AccessibilityHearingAidsFragment.isPageSearchEnabled(mContext)).isFalse();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt b/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt
new file mode 100644
index 0000000..67fbc1a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/ColorAndMotionScreenTest.kt
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.android.settingslib.preference.PreferenceScreenCreator
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class ColorAndMotionScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator: PreferenceScreenCreator = ColorAndMotionScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_ACCESSIBILITY_COLOR_AND_MOTION
+
+ override fun migration() {}
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(ColorAndMotionScreen.KEY)
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/TextReadingScreenTest.kt b/tests/robotests/src/com/android/settings/accessibility/TextReadingScreenTest.kt
new file mode 100644
index 0000000..bdc69c9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/TextReadingScreenTest.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.accessibility
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class TextReadingScreenTest : CatalystScreenTestCase() {
+
+ override val preferenceScreenCreator = TextReadingScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_TEXT_READING_SCREEN
+
+ override fun migration() {}
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(TextReadingScreen.KEY)
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt
new file mode 100644
index 0000000..99851de
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/VibrationIntensityScreenTest.kt
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.accessibility
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class VibrationIntensityScreenTest : CatalystScreenTestCase() {
+
+ override val preferenceScreenCreator = VibrationIntensityScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_VIBRATION_INTENSITY_SCREEN
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(VibrationIntensityScreen.KEY)
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java
index 414fe63..b3270e9 100644
--- a/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/shortcuts/EditShortcutsPreferenceFragmentTest.java
@@ -16,6 +16,9 @@
package com.android.settings.accessibility.shortcuts;
+import static android.provider.Settings.ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS;
+
+import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
@@ -45,6 +48,7 @@
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.Flags;
+import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.testing.FragmentScenario;
import androidx.lifecycle.Lifecycle;
@@ -160,7 +164,7 @@
public void showEditShortcutScreen_inSuw_launchSubSettingWithSuw() {
EditShortcutsPreferenceFragment.showEditShortcutScreen(
mActivity, METRICS_CATEGORY, SCREEN_TITLE,
- TARGET_FAKE_COMPONENT, createSuwIntent(new Intent(), /* isInSuw= */ true));
+ TARGET_FAKE_COMPONENT, setIntentInSuw(new Intent(), /* isInSuw= */ true));
assertLaunchSubSettingWithCurrentTargetComponents(
TARGET_FAKE_COMPONENT.flattenToString(), /* isInSuw= */ true);
@@ -199,6 +203,53 @@
}
@Test
+ @EnableFlags(
+ com.android.settings.accessibility.Flags.FLAG_TOGGLE_FEATURE_FRAGMENT_COLLECTION_INFO)
+ public void shortcutDescriptionPref_defaultLaunch_notVisible() {
+ mFragmentScenario = createFragScenario(/* isInSuw= */ false, TARGET);
+ mFragmentScenario.moveToState(Lifecycle.State.CREATED);
+
+ mFragmentScenario.onFragment(fragment -> {
+ Preference preference = fragment.findPreference(
+ mContext.getString(R.string.accessibility_shortcut_description_pref));
+ assertThat(preference.isVisible()).isFalse();
+ });
+ }
+
+ @Test
+ @EnableFlags(
+ com.android.settings.accessibility.Flags.FLAG_TOGGLE_FEATURE_FRAGMENT_COLLECTION_INFO)
+ public void shortcutDescriptionPref_launchFromAction_singleTarget_notVisible() {
+ mFragmentScenario = createFragScenario(/* isInSuw= */ false, List.of(TARGET),
+ ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS);
+ mFragmentScenario.moveToState(Lifecycle.State.CREATED);
+
+ mFragmentScenario.onFragment(fragment -> {
+ Preference preference = fragment.findPreference(
+ mContext.getString(R.string.accessibility_shortcut_description_pref));
+ assertThat(preference.isVisible()).isFalse();
+ });
+ }
+
+ @Test
+ @EnableFlags(
+ com.android.settings.accessibility.Flags.FLAG_TOGGLE_FEATURE_FRAGMENT_COLLECTION_INFO)
+ public void shortcutDescriptionPref_launchFromAction_multipleTargets_isVisible() {
+ mFragmentScenario = createFragScenario(/* isInSuw= */ false,
+ // Both of these components are system components with known labels, so we don't
+ // need to mock AccessibilityManager with fake labels.
+ List.of(TARGET, DALTONIZER_COMPONENT_NAME.flattenToString()),
+ ACTION_ACCESSIBILITY_SHORTCUT_SETTINGS);
+ mFragmentScenario.moveToState(Lifecycle.State.CREATED);
+
+ mFragmentScenario.onFragment(fragment -> {
+ Preference preference = fragment.findPreference(
+ mContext.getString(R.string.accessibility_shortcut_description_pref));
+ assertThat(preference.isVisible()).isTrue();
+ });
+ }
+
+ @Test
public void fragmentCreated_settingsObserversAreRegistered() {
ShadowContentResolver contentResolver = shadowOf(mContext.getContentResolver());
for (Uri uri : SHORTCUT_SETTINGS) {
@@ -654,9 +705,14 @@
private FragmentScenario<EditShortcutsPreferenceFragment> createFragScenario(
boolean isInSuw, String target) {
+ return createFragScenario(isInSuw, List.of(target), null);
+ }
+ private FragmentScenario<EditShortcutsPreferenceFragment> createFragScenario(
+ boolean isInSuw, List<String> targets, @Nullable String intentAction) {
Bundle args = new Bundle();
args.putStringArray(
- EditShortcutsPreferenceFragment.ARG_KEY_SHORTCUT_TARGETS, new String[]{target});
+ EditShortcutsPreferenceFragment.ARG_KEY_SHORTCUT_TARGETS,
+ targets.toArray(new String[0]));
FragmentScenario<EditShortcutsPreferenceFragment> scenario =
FragmentScenario.launch(
EditShortcutsPreferenceFragment.class, args,
@@ -664,7 +720,11 @@
scenario.onFragment(fragment -> {
Intent intent = fragment.requireActivity().getIntent();
intent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE, SCREEN_TITLE);
- fragment.requireActivity().setIntent(createSuwIntent(intent, isInSuw));
+ setIntentInSuw(intent, isInSuw);
+ if (intentAction != null) {
+ intent.setAction(intentAction);
+ }
+ fragment.requireActivity().setIntent(intent);
// Since the fragment is attached before we have a chance
// to modify the activity's intent; initialize controllers again
fragment.initializePreferenceControllerArguments();
@@ -672,11 +732,7 @@
return scenario;
}
- private Intent createSuwIntent(Intent intent, boolean isInSuw) {
-
- if (intent == null) {
- intent = new Intent();
- }
+ private Intent setIntentInSuw(Intent intent, boolean isInSuw) {
intent.putExtra(EXTRA_IS_SETUP_FLOW, isInSuw);
intent.putExtra(EXTRA_IS_FIRST_RUN, isInSuw);
intent.putExtra(EXTRA_IS_PRE_DEFERRED_SETUP, isInSuw);
diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
index 2a09cde..2da25f1 100644
--- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
@@ -57,7 +57,7 @@
public final class AppWithAdminGrantedPermissionsCounterTest {
@Rule
- MockitoRule mMockitoRule = MockitoJUnit.rule();
+ public final MockitoRule mMockitoRule = MockitoJUnit.rule();
private final String APP_1 = "app1";
private final String APP_2 = "app2";
diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
index a934cba..f954b22 100644
--- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStoragePreferenceControllerTest.java
@@ -16,8 +16,9 @@
package com.android.settings.applications.contacts;
-import static android.provider.ContactsContract.Settings.KEY_DEFAULT_ACCOUNT;
-import static android.provider.ContactsContract.Settings.QUERY_DEFAULT_ACCOUNT_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_DEFAULT_ACCOUNT_STATE;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
+import static android.provider.ContactsContract.Settings;
import static com.android.settings.core.BasePreferenceController.AVAILABLE;
import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
@@ -28,25 +29,26 @@
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
-
import android.accounts.Account;
import android.accounts.AccountManager;
+import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
import android.os.Bundle;
import android.platform.test.annotations.EnableFlags;
-import android.platform.test.flag.junit.SetFlagsRule;
-import android.provider.ContactsContract;
-
-import com.android.settings.R;
-import com.android.settings.flags.Flags;
-import com.android.settings.testutils.shadow.ShadowAuthenticationHelper;
-
-import org.junit.Before;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
+import android.provider.Flags;
+
+import com.android.settings.R;
+import com.android.settings.testutils.shadow.ShadowAuthenticationHelper;
+
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -62,11 +64,6 @@
private static final String CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY =
"contacts_default_account";
- private static final Account TEST_ACCOUNT1 = new Account("test@gmail.com", "type1");
-
- private static final Account TEST_ACCOUNT2 = new Account("test@samsung.com", "type2");
-
- private static final Account TEST_ACCOUNT3 = new Account("LABEL3", "type3");
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@@ -84,6 +81,9 @@
private ContentResolver mContentResolver;
@Mock
+ private ContentProviderClient mContentProviderClient;
+
+ @Mock
private Resources mResources;
@Mock
@@ -94,23 +94,55 @@
@Before
public void setUp() throws Exception {
when(mContext.getContentResolver()).thenReturn(mContentResolver);
+ when(mContentResolver.acquireContentProviderClient(
+ eq(ContactsContract.AUTHORITY_URI))).thenReturn(mContentProviderClient);
when(mContext.getSystemService(eq(Context.ACCOUNT_SERVICE))).thenReturn(mAccountManager);
when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[]{});
-
+ Bundle bundle = new Bundle();
+ bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(bundle);
mPreferenceController = new ContactsStoragePreferenceController(mContext,
CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
}
@Test
- @EnableFlags(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
+ @EnableFlags(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
public void getAvailabilityStatus_flagIsOn_shouldReturnAvailable() {
-
assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
}
@Test
- @RequiresFlagsDisabled(Flags.FLAG_ENABLE_CONTACTS_DEFAULT_ACCOUNT_IN_SETTINGS)
+ @RequiresFlagsDisabled(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
public void getAvailabilityStatus_flagIsOff_shouldReturnConditionallyUnavailable() {
+ assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+ CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
+ public void getAvailabilityStatus_illegalStateExceptionThrown_shouldReturnConditionallyUnavailable()
+ throws Exception {
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenThrow(new IllegalStateException());
+
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+ assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
+ CONDITIONALLY_UNAVAILABLE);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_NEW_DEFAULT_ACCOUNT_API_ENABLED)
+ public void getAvailabilityStatus_runtimeExceptionThrown_shouldReturnConditionallyUnavailable()
+ throws Exception {
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenThrow(new RuntimeException());
+
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
assertThat(mPreferenceController.getAvailabilityStatus()).isEqualTo(
CONDITIONALLY_UNAVAILABLE);
@@ -118,43 +150,95 @@
@Test
public void getSummary_noAccountIsSetAsDefault_shouldReturnNoAccountSetSummary() {
- Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_DEFAULT_ACCOUNT, null);
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
when(mContext.getResources()).thenReturn(mResources);
- when(mResources.getString(eq(R.string.contacts_storage_no_account_set))).thenReturn(
+ when(mResources.getString(eq(R.string.contacts_storage_no_account_set_summary))).thenReturn(
"No default set");
+ // Fetch the default account from CP2.
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
assertThat(mPreferenceController.getSummary()).isEqualTo("No default set");
}
@Test
- public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName() {
+ public void getSummary_localAccountIsSetAsDefault_shouldReturnLocalAccountSetSummary()
+ throws Exception {
Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT1);
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+ bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_LOCAL);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(bundle);
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getString(eq(R.string.contacts_storage_local_account_summary))).thenReturn(
+ "Device only");
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+ assertThat(mPreferenceController.getSummary()).isEqualTo("Device only");
+ }
+
+ @Test
+ public void getSummary_simAccountIsSetAsDefault_shouldReturnSimAccountSummary()
+ throws Exception {
+ Bundle bundle = new Bundle();
+ bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM);
+ bundle.putString(Settings.ACCOUNT_TYPE, "SIM");
+ bundle.putString(Settings.ACCOUNT_NAME, "SIM");
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(bundle);
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getString(eq(R.string.sim_card_label))).thenReturn("SIM");
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
+
+ assertThat(mPreferenceController.getSummary()).isEqualTo("SIM");
+ }
+
+ @Test
+ public void getSummary_googleAccountIsSetAsDefault_shouldReturnGoogleAccountTypeAndAccountName()
+ throws Exception {
+ Bundle bundle = new Bundle();
+ bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+ bundle.putString(Settings.ACCOUNT_TYPE, "type1");
+ bundle.putString(Settings.ACCOUNT_NAME, "test@gmail.com");
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(bundle);
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL1 | test@gmail.com");
}
@Test
- public void getSummary_samsungAccountIsSetAsDefault_shouldReturnSamsungAccountTypeAndAccountName() {
+ public void getSummary_samsungAccountIsSetAsDefault_shouldReturnSamsungAccountTypeAndAccountName()
+ throws Exception {
Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT2);
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+ bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+ bundle.putString(Settings.ACCOUNT_TYPE, "type2");
+ bundle.putString(Settings.ACCOUNT_NAME, "test@samsung.com");
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(bundle);
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL2 | test@samsung.com");
}
@Test
- public void getSummary_accountLabelSameAsAccountName_onlyReturnAccountName() {
+ public void getSummary_accountLabelSameAsAccountName_onlyReturnAccountName() throws Exception {
Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT3);
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+ bundle.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+ bundle.putString(Settings.ACCOUNT_TYPE, "type3");
+ bundle.putString(Settings.ACCOUNT_NAME, "LABEL3");
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(bundle);
+ mPreferenceController = new ContactsStoragePreferenceController(mContext,
+ CONTACTS_DEFAULT_ACCOUNT_PREFERENCE_KEY);
// Since package name and account name is the same, we only return account name.
assertThat(mPreferenceController.getSummary()).isEqualTo("LABEL3");
diff --git a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
index 785ef4a..4e873fb 100644
--- a/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/contacts/ContactsStorageSettingsTest.java
@@ -15,32 +15,35 @@
*/
package com.android.settings.applications.contacts;
-import static android.provider.ContactsContract.Settings.KEY_DEFAULT_ACCOUNT;
-import static android.provider.ContactsContract.Settings.QUERY_DEFAULT_ACCOUNT_METHOD;
-import static android.provider.ContactsContract.Settings.SET_DEFAULT_ACCOUNT_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_DEFAULT_ACCOUNT_STATE;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.KEY_ELIGIBLE_DEFAULT_ACCOUNTS;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD;
+import static android.provider.ContactsContract.RawContacts.DefaultAccount.SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD;
import static android.provider.Settings.ACTION_ADD_ACCOUNT;
import static android.provider.Settings.EXTRA_ACCOUNT_TYPES;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.accounts.Account;
-import android.accounts.AccountManager;
import android.app.settings.SettingsEnums;
+import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts.DefaultAccount.DefaultAccountAndState;
import android.provider.SearchIndexableResource;
+import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
@@ -63,6 +66,7 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import java.util.ArrayList;
import java.util.List;
@RunWith(RobolectricTestRunner.class)
@@ -76,6 +80,10 @@
private static final Account TEST_ACCOUNT2 = new Account("test@samsung.com", "type2");
+ private static final Account TEST_ACCOUNT3 = new Account("test@outlook.com", "type3");
+
+ private static final Account SIM_ACCOUNT = new Account("SIM", "SIM");
+
@Rule
public final MockitoRule mockito = MockitoJUnit.rule();
@Spy
@@ -83,8 +91,7 @@
@Mock
private ContentResolver mContentResolver;
@Mock
- private AccountManager mAccountManager;
-
+ private ContentProviderClient mContentProviderClient;
private PreferenceManager mPreferenceManager;
private TestContactsStorageSettings mContactsStorageSettings;
private PreferenceScreen mScreen;
@@ -92,8 +99,8 @@
@Before
public void setUp() throws Exception {
mContactsStorageSettings = spy(new TestContactsStorageSettings(mContext, mContentResolver));
- when(mContext.getSystemService(eq(Context.ACCOUNT_SERVICE))).thenReturn(mAccountManager);
- when(mAccountManager.getAccountsAsUser(anyInt())).thenReturn(new Account[]{});
+ when(mContentResolver.acquireContentProviderClient(
+ eq(ContactsContract.AUTHORITY_URI))).thenReturn(mContentProviderClient);
mPreferenceManager = new PreferenceManager(mContext);
when(mContactsStorageSettings.getPreferenceManager()).thenReturn(mPreferenceManager);
mScreen = spy(new PreferenceScreen(mContext, /* attrs= */ null));
@@ -115,12 +122,17 @@
}
@Test
- public void verifyDeviceOnlyPreference_onClick_setDefaultAccountToNull() {
- when(mAccountManager.getAccounts()).thenReturn(new Account[]{});
- Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_DEFAULT_ACCOUNT, null);
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+ public void verifyDeviceOnlyPreference_onClick_setDefaultAccountToNull() throws Exception {
+ Bundle currentDefaultAccount = new Bundle();
+ currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(currentDefaultAccount);
+ Bundle eligibleAccountBundle = new Bundle();
+ eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+ new ArrayList<>());
+ when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+ any())).thenReturn(eligibleAccountBundle);
PreferenceScreen settingScreen = mPreferenceManager.inflateFromResource(mContext,
R.xml.contacts_storage_settings, mScreen);
@@ -139,18 +151,27 @@
assertThat(deviceOnlyPreference.isChecked()).isTrue();
ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
- verify(mContentResolver).call(eq(ContactsContract.AUTHORITY_URI),
- eq(SET_DEFAULT_ACCOUNT_METHOD), any(), captor.capture());
+ verify(mContentProviderClient).call(eq(SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ captor.capture());
Bundle accountBundle = captor.getValue();
assertThat(accountBundle.getString(ContactsContract.Settings.ACCOUNT_NAME)).isNull();
assertThat(accountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isNull();
}
@Test
- public void verifyAddAccountPreference_onClick_startAddAccountActivity() {
- when(mAccountManager.getAccounts()).thenReturn(new Account[]{});
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(Bundle.EMPTY);
+ public void verifyAddAccountPreference_eligibleAccountsAvailable_startAddAccountActivityOnClick()
+ throws Exception {
+ Bundle currentDefaultAccount = new Bundle();
+ currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(currentDefaultAccount);
+ Bundle eligibleAccountBundle = new Bundle();
+ eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+ new ArrayList<>());
+ when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+ any())).thenReturn(eligibleAccountBundle);
+ mContactsStorageSettings.setEligibleAccountTypes(new String[]{"com.google"});
mContactsStorageSettings.refreshUI();
@@ -167,16 +188,47 @@
assertThat(addAccountIntent.getComponent().getClassName()).isEqualTo(
AddAccountSettings.class.getCanonicalName());
String[] eligibleAccounts = (String[]) addAccountIntent.getExtra(EXTRA_ACCOUNT_TYPES);
- assertThat(eligibleAccounts).isEmpty();
+ assertThat(List.of(eligibleAccounts)).containsExactly("com.google");
}
@Test
- public void verifyEligibleAccountPreference_onClick_setSelectedDefaultAccount() {
- when(mAccountManager.getAccounts()).thenReturn(new Account[]{TEST_ACCOUNT1, TEST_ACCOUNT2});
- Bundle bundle = new Bundle();
- bundle.putParcelable(KEY_DEFAULT_ACCOUNT, TEST_ACCOUNT2);
- when(mContentResolver.call(eq(ContactsContract.AUTHORITY_URI),
- eq(QUERY_DEFAULT_ACCOUNT_METHOD), any(), any())).thenReturn(bundle);
+ public void verifyAddAccountPreference_noEligibleAccountsAvailable_dontShowPreference()
+ throws Exception {
+ Bundle currentDefaultAccount = new Bundle();
+ currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_NOT_SET);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(currentDefaultAccount);
+ Bundle eligibleAccountBundle = new Bundle();
+ eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+ new ArrayList<>());
+ when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+ any())).thenReturn(eligibleAccountBundle);
+ mContactsStorageSettings.setEligibleAccountTypes(new String[]{});
+
+ mContactsStorageSettings.refreshUI();
+
+ Preference addAccountPreference = mScreen.findPreference(PREF_KEY_ADD_ACCOUNT);
+ assertThat(addAccountPreference).isNull();
+ }
+
+ @Test
+ public void verifyEligibleAccountPreference_onClick_setSelectedDefaultAccount()
+ throws Exception {
+ Bundle currentDefaultAccount = new Bundle();
+ currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+ currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, TEST_ACCOUNT2.name);
+ currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, TEST_ACCOUNT2.type);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(currentDefaultAccount);
+ Bundle eligibleAccountBundle = new Bundle();
+ ArrayList<Account> eligibleAccounts = new ArrayList<>(
+ List.of(TEST_ACCOUNT1, TEST_ACCOUNT2));
+ eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+ eligibleAccounts);
+ when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+ any())).thenReturn(eligibleAccountBundle);
mContactsStorageSettings.refreshUI();
@@ -197,13 +249,90 @@
assertThat(account2Preference.isChecked()).isTrue();
ArgumentCaptor<Bundle> captor = ArgumentCaptor.forClass(Bundle.class);
- verify(mContentResolver).call(eq(ContactsContract.AUTHORITY_URI),
- eq(SET_DEFAULT_ACCOUNT_METHOD), any(), captor.capture());
+ verify(mContentProviderClient).call(eq(SET_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ captor.capture());
Bundle setAccountBundle = captor.getValue();
assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_NAME)).isEqualTo(
"test@samsung.com");
assertThat(setAccountBundle.getString(ContactsContract.Settings.ACCOUNT_TYPE)).isEqualTo(
"type2");
+
+ ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+ verify(mContext).startActivity(intentCaptor.capture());
+ Intent moveContactsIntent = intentCaptor.getValue();
+ assertThat(moveContactsIntent.getAction()).isEqualTo(
+ ContactsContract.RawContacts.DefaultAccount.ACTION_MOVE_CONTACTS_TO_DEFAULT_ACCOUNT);
+ assertThat(moveContactsIntent.getPackage()).isEqualTo(
+ "com.android.providers.contacts");
+ }
+
+ @Test
+ public void verifyAccountPreference_defaultAccountIsNotEligibleCloudAccount_createNewDefaultAccountPreference()
+ throws Exception {
+ Bundle currentDefaultAccount = new Bundle();
+ currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_CLOUD);
+ currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, TEST_ACCOUNT3.name);
+ currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, TEST_ACCOUNT3.type);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(currentDefaultAccount);
+ Bundle eligibleAccountBundle = new Bundle();
+ ArrayList<Account> eligibleAccounts = new ArrayList<>(
+ List.of(TEST_ACCOUNT1, TEST_ACCOUNT2));
+ eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+ eligibleAccounts);
+ when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+ any())).thenReturn(eligibleAccountBundle);
+
+ mContactsStorageSettings.refreshUI();
+
+ SelectorWithWidgetPreference account1Preference = mScreen.findPreference(
+ String.valueOf(TEST_ACCOUNT1.hashCode()));
+ assertThat(account1Preference.getTitle()).isEqualTo("LABEL1");
+ assertThat(account1Preference.getSummary()).isEqualTo("test@gmail.com");
+ assertThat(account1Preference.getIcon()).isNotNull();
+
+ SelectorWithWidgetPreference account2Preference = mScreen.findPreference(
+ String.valueOf(TEST_ACCOUNT2.hashCode()));
+ assertThat(account2Preference.getTitle()).isEqualTo("LABEL2");
+ assertThat(account2Preference.getSummary()).isEqualTo("test@samsung.com");
+ assertThat(account2Preference.getIcon()).isNotNull();
+
+ SelectorWithWidgetPreference account3Preference = mScreen.findPreference(
+ String.valueOf(TEST_ACCOUNT3.hashCode()));
+ assertThat(account3Preference.getTitle()).isEqualTo("LABEL3");
+ assertThat(account3Preference.getSummary()).isEqualTo("test@outlook.com");
+ assertThat(account3Preference.getIcon()).isNotNull();
+
+ assertThat(account1Preference.isChecked()).isFalse();
+ assertThat(account2Preference.isChecked()).isFalse();
+ assertThat(account3Preference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void verifyAccountPreference_defaultAccountIsSimAccount_createSimAccountPreference()
+ throws Exception {
+ Bundle currentDefaultAccount = new Bundle();
+ currentDefaultAccount.putInt(KEY_DEFAULT_ACCOUNT_STATE,
+ DefaultAccountAndState.DEFAULT_ACCOUNT_STATE_SIM);
+ currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_NAME, SIM_ACCOUNT.name);
+ currentDefaultAccount.putString(ContactsContract.Settings.ACCOUNT_TYPE, SIM_ACCOUNT.type);
+ when(mContentProviderClient.call(eq(QUERY_DEFAULT_ACCOUNT_FOR_NEW_CONTACTS_METHOD), any(),
+ any())).thenReturn(currentDefaultAccount);
+ Bundle eligibleAccountBundle = new Bundle();
+ eligibleAccountBundle.putParcelableArrayList(KEY_ELIGIBLE_DEFAULT_ACCOUNTS,
+ new ArrayList<>());
+ when(mContentProviderClient.call(eq(QUERY_ELIGIBLE_DEFAULT_ACCOUNTS_METHOD), any(),
+ any())).thenReturn(eligibleAccountBundle);
+
+ mContactsStorageSettings.refreshUI();
+
+ SelectorWithWidgetPreference simPreference = mScreen.findPreference(
+ String.valueOf(SIM_ACCOUNT.hashCode()));
+ assertThat(simPreference.getTitle()).isEqualTo("SIM");
+ assertThat(simPreference.getSummary()).isEqualTo("SIM");
+ assertThat(simPreference.getIcon()).isNotNull();
+ assertThat(simPreference.isChecked()).isTrue();
}
@Test
@@ -220,6 +349,7 @@
private static class TestContactsStorageSettings extends ContactsStorageSettings {
private final Context mContext;
private final ContentResolver mContentResolver;
+ private String[] mEligibleAccountTypes;
TestContactsStorageSettings(Context context, ContentResolver contentResolver) {
mContext = context;
@@ -236,5 +366,16 @@
// Override it so we can access this method in test
return mContentResolver;
}
+
+ @Override
+ String[] getEligibleAccountTypes() {
+ return mEligibleAccountTypes == null ? Resources.getSystem().getStringArray(
+ com.android.internal.R.array.config_rawContactsEligibleDefaultAccountTypes)
+ : mEligibleAccountTypes;
+ }
+
+ public void setEligibleAccountTypes(String[] eligibleAccountTypes) {
+ mEligibleAccountTypes = eligibleAccountTypes;
+ }
}
}
diff --git a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
index b4605c7..3dc011e 100644
--- a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricProfileSettingsTest.java
@@ -128,8 +128,8 @@
doReturn(mActivity).when(mFragment).getActivity();
doReturn(mBiometricManager).when(mActivity).getSystemService(BiometricManager.class);
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
- .thenReturn(BiometricManager.BIOMETRIC_ERROR_MANDATORY_NOT_ACTIVE);
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
+ .thenReturn(BiometricManager.BIOMETRIC_ERROR_IDENTITY_CHECK_NOT_ACTIVE);
ReflectionHelpers.setField(mFragment, "mDashboardFeatureProvider",
FakeFeatureFactory.setupForTest().dashboardFeatureProvider);
@@ -182,7 +182,7 @@
ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
doNothing().when(mFragment).startActivityForResult(any(), anyInt());
when(mBiometricManager.canAuthenticate(anyInt(),
- eq(BiometricManager.Authenticators.MANDATORY_BIOMETRICS)))
+ eq(BiometricManager.Authenticators.IDENTITY_CHECK)))
.thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
mFragment.onAttach(mContext);
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
index 8f983de..df2ab45 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintEnrollEnrollingTest.java
@@ -63,12 +63,14 @@
import com.android.settings.R;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SystemProperty;
import com.android.settings.widget.RingProgressBar;
import com.airbnb.lottie.LottieAnimationView;
import com.airbnb.lottie.LottieTask;
import com.google.android.setupdesign.GlifLayout;
+import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
@@ -111,15 +113,23 @@
private final int[] mSfpsStageThresholds = new int[]{0, 9, 13, 19, 25};
private final int[] mUdfpsStageThresholds = new int[]{0, 13, 17, 22};
+ private final SystemProperty mSystemProperty = new SystemProperty();
+
private FingerprintEnrollEnrolling mActivity;
private Context mContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mSystemProperty.override("robolectric.createActivityContexts", "true");
FakeFeatureFactory.setupForTest();
}
+ @After
+ public void tearDown() {
+ mSystemProperty.close();
+ }
+
@Test
public void fingerprintUdfpsEnrollSuccessProgress_shouldNotVibrate() {
initializeActivityFor(TYPE_UDFPS_OPTICAL);
@@ -645,7 +655,6 @@
}
private void createActivity() {
- System.setProperty("robolectric.createActivityContexts", "true");
final Bundle savedInstanceState = new Bundle();
savedInstanceState.putInt(KEY_STATE_PREVIOUS_ROTATION, Surface.ROTATION_90);
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
index 0e1bcf6..1086f85 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintSettingsFragmentTest.java
@@ -149,7 +149,7 @@
doReturn(true).when(mFingerprintManager).isHardwareDetected();
doReturn(mVibrator).when(mContext).getSystemService(Vibrator.class);
when(mBiometricManager.canAuthenticate(PRIMARY_USER_ID,
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ BiometricManager.Authenticators.IDENTITY_CHECK))
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
}
@@ -176,7 +176,7 @@
@EnableFlags(Flags.FLAG_MANDATORY_BIOMETRICS)
public void testLaunchBiometricPromptForFingerprint() {
when(mBiometricManager.canAuthenticate(PRIMARY_USER_ID,
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ BiometricManager.Authenticators.IDENTITY_CHECK))
.thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
doNothing().when(mFingerprintManager).generateChallenge(anyInt(), any());
when(mFingerprintManager.hasEnrolledFingerprints(anyInt())).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
index fa33f9c..fd6c082 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollFinishTest.java
@@ -35,7 +35,6 @@
import com.google.android.setupcompat.template.FooterBarMixin;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
@@ -116,7 +115,6 @@
}
@Test
- @Ignore("b/295325503")
public void onActivityResult_fingerprintCountIsOne_fingerprintSuggestionActivityEnabled() {
Shadows.shadowOf((FingerprintManager) mFingerprintManager).setDefaultFingerprints(1);
@@ -137,8 +135,7 @@
}
@Test
- @Ignore("b/295325503")
- public void clickNext_fingerprintCountIsOne_fngerprintSuggestionActivityEnabled() {
+ public void clickNext_fingerprintCountIsOne_fingerprintSuggestionActivityEnabled() {
Shadows.shadowOf((FingerprintManager) mFingerprintManager).setDefaultFingerprints(1);
mLayout.getMixin(FooterBarMixin.class).getPrimaryButtonView().performClick();
@@ -158,8 +155,7 @@
}
@Test
- @Ignore("b/295325503")
- public void onBackPressed_fingerprintCountIsOne_fngerprintSuggestionActivityEnabled() {
+ public void onBackPressed_fingerprintCountIsOne_fingerprintSuggestionActivityEnabled() {
Shadows.shadowOf((FingerprintManager) mFingerprintManager).setDefaultFingerprints(1);
mActivity.onBackPressed();
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
index 6b67734..1760fad 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/SetupFingerprintEnrollIntroductionTest.java
@@ -154,7 +154,7 @@
}
@Test
- @Ignore
+ @Ignore("b/295325503 expected: RESULT_SKIP, but was 2")
public void testKeyguardNotSecure_shouldFinishWithSetupSkipDialogResultSkip() {
getShadowKeyguardManager().setIsKeyguardSecure(false);
@@ -174,7 +174,6 @@
}
@Test
- @Ignore
public void testKeyguardSecure_shouldFinishWithFingerprintResultSkip() {
getShadowKeyguardManager().setIsKeyguardSecure(true);
@@ -194,7 +193,7 @@
}
@Test
- @Ignore
+ @Ignore("b/295325503 expected not to be: null")
public void testBackKeyPress_shouldSetIntentDataIfLockScreenAdded() {
getShadowKeyguardManager().setIsKeyguardSecure(false);
@@ -208,7 +207,6 @@
}
@Test
- @Ignore
public void testBackKeyPress_shouldNotSetIntentDataIfLockScreenPresentBeforeLaunch() {
getShadowKeyguardManager().setIsKeyguardSecure(true);
@@ -221,7 +219,7 @@
}
@Test
- @Ignore
+ @Ignore("b/295325503 expected not to be: null")
public void testCancelClicked_shouldSetIntentDataIfLockScreenAdded() {
getShadowKeyguardManager().setIsKeyguardSecure(false);
@@ -237,7 +235,6 @@
}
@Test
- @Ignore
public void testCancelClicked_shouldNotSetIntentDataIfLockScreenPresentBeforeLaunch() {
getShadowKeyguardManager().setIsKeyguardSecure(true);
@@ -251,7 +248,6 @@
}
@Test
- @Ignore
public void testOnResultFromFindSensor_shouldNotSetIntentDataIfLockScreenPresentBeforeLaunch() {
getShadowKeyguardManager().setIsKeyguardSecure(true);
SetupFingerprintEnrollIntroduction activity = mController.create().resume().get();
@@ -262,7 +258,6 @@
}
@Test
- @Ignore
public void testOnResultFromFindSensor_shouldSetIntentDataIfLockScreenAdded() {
getShadowKeyguardManager().setIsKeyguardSecure(false);
SetupFingerprintEnrollIntroduction activity = mController.create().resume().get();
@@ -273,7 +268,6 @@
}
@Test
- @Ignore
public void testOnResultFromFindSensor_shouldNotSetIntentDataIfLockScreenNotAdded() {
getShadowKeyguardManager().setIsKeyguardSecure(false);
SetupFingerprintEnrollIntroduction activity = mController.create().resume().get();
@@ -284,7 +278,6 @@
}
@Test
- @Ignore
public void testLockPattern() {
ShadowStorageManager.setIsFileEncrypted(false);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
index fc19728..9609af4 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AvailableMediaBluetoothDeviceUpdaterTest.java
@@ -40,6 +40,7 @@
import com.android.settings.testutils.shadow.ShadowBluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
@@ -84,6 +85,7 @@
@Mock private CachedBluetoothDeviceManager mCachedDeviceManager;
@Mock private LocalBluetoothProfileManager mProfileManager;
@Mock private LocalBluetoothLeBroadcastAssistant mAssistant;
+ @Mock private LocalBluetoothLeBroadcast mBroadcast;
@Mock private BluetoothLeBroadcastReceiveState mBroadcastReceiveState;
private Context mContext;
@@ -102,6 +104,7 @@
ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBtManager;
mLocalBtManager = Utils.getLocalBtManager(mContext);
when(mProfileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(mAssistant);
+ when(mProfileManager.getLeAudioBroadcastProfile()).thenReturn(mBroadcast);
when(mLocalBtManager.getProfileManager()).thenReturn(mProfileManager);
when(mLocalBtManager.getCachedDeviceManager()).thenReturn(mCachedDeviceManager);
mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
@@ -267,8 +270,7 @@
}
@Test
- public void
- onProfileConnectionStateChanged_leaConnected_notInCallSharingFlagOff_addsPreference() {
+ public void onProfileConnectionStateChanged_leaConnected_notInCallSharingFlagOff_addPref() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
@@ -288,8 +290,7 @@
}
@Test
- public void
- onProfileConnectionStateChanged_leaConnected_notInCallNotInSharing_addsPreference() {
+ public void onProfileConnectionStateChanged_leaConnected_notInCallNotInSharing_addPref() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
@@ -306,16 +307,13 @@
}
@Test
- public void onProfileConnectionStateChanged_leaConnected_inCallSharingFlagOff_addsPreference() {
+ public void onProfileConnectionStateChanged_leaConnected_inCallSharingFlagOff_addPref() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
.thenReturn(true);
when(mCachedBluetoothDevice.isConnectedLeAudioDevice()).thenReturn(true);
- when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of(mBroadcastReceiveState));
- List<Long> bisSyncState = new ArrayList<>();
- bisSyncState.add(1L);
- when(mBroadcastReceiveState.getBisSyncState()).thenReturn(bisSyncState);
+ when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of());
mBluetoothDeviceUpdater.onProfileConnectionStateChanged(
mCachedBluetoothDevice,
@@ -326,7 +324,7 @@
}
@Test
- public void onProfileConnectionStateChanged_leaConnected_inCallNotInSharing_addsPreference() {
+ public void onProfileConnectionStateChanged_leaConnected_inCallNotInSharing_addPref() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
mAudioManager.setMode(AudioManager.MODE_IN_CALL);
when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
@@ -343,9 +341,9 @@
}
@Test
- public void
- onProfileConnectionStateChanged_leaDeviceConnected_notInCallInSharing_removesPref() {
+ public void onProfileConnectionStateChanged_leaConnected_notInCallInSharing_removePref() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
.thenReturn(true);
@@ -365,8 +363,31 @@
}
@Test
- public void onProfileConnectionStateChanged_leaDeviceConnected_inCallInSharing_removesPref() {
+ public void
+ onProfileConnectionStateChanged_leaConnected_noInCallInSharing_hysteresis_removePref() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
+ mAudioManager.setMode(AudioManager.MODE_NORMAL);
+ when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
+ .thenReturn(true);
+ when(mCachedBluetoothDevice.isConnectedLeAudioDevice()).thenReturn(true);
+ when(mCachedBluetoothDevice.isConnectedA2dpDevice()).thenReturn(true);
+ when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of(mBroadcastReceiveState));
+ when(mBroadcast.getLatestBroadcastId()).thenReturn(1);
+ when(mBroadcastReceiveState.getBroadcastId()).thenReturn(1);
+
+ mBluetoothDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO);
+
+ verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaConnected_inCallSharing_removePref() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
mAudioManager.setMode(AudioManager.MODE_NORMAL);
when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
.thenReturn(true);
@@ -386,6 +407,27 @@
}
@Test
+ public void onProfileConnectionStateChanged_leaConnected_inCallSharing_hysteresis_removePref() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
+ mAudioManager.setMode(AudioManager.MODE_NORMAL);
+ when(mBluetoothDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class)))
+ .thenReturn(true);
+ when(mCachedBluetoothDevice.isConnectedLeAudioDevice()).thenReturn(true);
+ when(mCachedBluetoothDevice.isConnectedHfpDevice()).thenReturn(true);
+ when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of(mBroadcastReceiveState));
+ when(mBroadcast.getLatestBroadcastId()).thenReturn(1);
+ when(mBroadcastReceiveState.getBroadcastId()).thenReturn(1);
+
+ mBluetoothDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO);
+
+ verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
+ }
+
+ @Test
public void
onProfileConnectionStateChanged_deviceIsNotInList_notInCall_invokesRemovePreference() {
mAudioManager.setMode(AudioManager.MODE_NORMAL);
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsProfilesControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsProfilesControllerTest.java
index d137d82..e21bf9a 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsProfilesControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsProfilesControllerTest.java
@@ -656,7 +656,7 @@
private void initController(List<String> invisibleProfiles) {
mController = new BluetoothDetailsProfilesController(mContext, mFragment, mLocalManager,
- mCachedDevice, mLifecycle, invisibleProfiles);
+ mCachedDevice, mLifecycle, invisibleProfiles, true);
mProfiles.setKey(mController.getPreferenceKey());
mController.mProfilesContainer = mProfiles;
mScreen.removeAll();
diff --git a/tests/robotests/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractorTest.kt b/tests/robotests/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractorTest.kt
index a83b7c2..28e0581 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractorTest.kt
+++ b/tests/robotests/src/com/android/settings/bluetooth/domain/interactor/SpatialAudioInteractorTest.kt
@@ -83,6 +83,7 @@
@Test
fun getDeviceSetting_noAudioProfile_returnNull() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
val setting = getLatestValue(underTest.getDeviceSetting(cachedDevice))
assertThat(setting).isNull()
@@ -93,6 +94,7 @@
@Test
fun getDeviceSetting_audioProfileNotEnabled_returnNull() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
`when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
`when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(false)
@@ -104,8 +106,23 @@
}
@Test
+ fun getDeviceSetting_deviceNotConnected_returnNull() {
+ testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(false)
+ `when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
+ `when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(true)
+
+ val setting = getLatestValue(underTest.getDeviceSetting(cachedDevice))
+
+ assertThat(setting).isNull()
+ verifyNoInteractions(spatializerRepository)
+ }
+ }
+
+ @Test
fun getDeviceSetting_spatialAudioNotSupported_returnNull() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
`when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
`when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(true)
`when`(
@@ -122,6 +139,7 @@
@Test
fun getDeviceSetting_spatialAudioSupported_returnTwoToggles() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
`when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
`when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(true)
`when`(
@@ -150,6 +168,7 @@
@Test
fun getDeviceSetting_headTrackingSupported_returnThreeToggles() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
`when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
`when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(true)
`when`(
@@ -178,6 +197,7 @@
@Test
fun getDeviceSetting_updateState_enableSpatialAudio() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
`when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
`when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(true)
`when`(
@@ -207,6 +227,7 @@
@Test
fun getDeviceSetting_updateState_enableHeadTracking() {
testScope.runTest {
+ `when`(cachedDevice.isConnected).thenReturn(true)
`when`(cachedDevice.profiles).thenReturn(listOf(leAudioProfile))
`when`(leAudioProfile.isEnabled(bluetoothDevice)).thenReturn(true)
`when`(
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModelTest.kt b/tests/robotests/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModelTest.kt
index c3f938c..6813d94 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModelTest.kt
+++ b/tests/robotests/src/com/android/settings/bluetooth/ui/viewmodel/BluetoothDeviceDetailsViewModelTest.kt
@@ -19,6 +19,7 @@
import android.app.Application
import android.bluetooth.BluetoothAdapter
import android.graphics.Bitmap
+import android.media.AudioManager
import androidx.test.core.app.ApplicationProvider
import com.android.settings.bluetooth.domain.interactor.SpatialAudioInteractor
import com.android.settings.bluetooth.ui.layout.DeviceSettingLayout
@@ -46,7 +47,9 @@
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.eq
import org.mockito.Mock
+import org.mockito.Mockito.any
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.`when`
@@ -76,11 +79,21 @@
val application = ApplicationProvider.getApplicationContext<Application>()
featureFactory = FakeFeatureFactory.setupForTest()
+ `when`(
+ featureFactory.bluetoothFeatureProvider.getDeviceSettingRepository(
+ eq(application), eq(bluetoothAdapter), any()
+ ))
+ .thenReturn(repository)
+ `when`(
+ featureFactory.bluetoothFeatureProvider.getSpatialAudioInteractor(
+ eq(application), any(AudioManager::class.java), any()
+ ))
+ .thenReturn(spatialAudioInteractor)
+
underTest =
BluetoothDeviceDetailsViewModel(
application,
- repository,
- spatialAudioInteractor,
+ bluetoothAdapter,
cachedDevice,
testScope.testScheduler)
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/BluetoothDashboardScreenTest.kt b/tests/robotests/src/com/android/settings/connecteddevice/BluetoothDashboardScreenTest.kt
new file mode 100644
index 0000000..16db841
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/connecteddevice/BluetoothDashboardScreenTest.kt
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.connecteddevice
+
+import android.content.Intent
+import android.provider.Settings.Global
+import androidx.preference.PreferenceFragmentCompat
+import androidx.test.core.app.ActivityScenario
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.Settings.BluetoothDashboardActivity
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class BluetoothDashboardScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = BluetoothDashboardScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_BLUETOOTH_SWITCHBAR_SCREEN
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(BluetoothDashboardScreen.KEY)
+ }
+
+ override fun launchFragment(
+ fragmentClass: Class<PreferenceFragmentCompat>,
+ action: (PreferenceFragmentCompat) -> Unit,
+ ) {
+ Global.putInt(appContext.contentResolver, Global.DEVICE_PROVISIONED, 1)
+ val intent = Intent(appContext, BluetoothDashboardActivity::class.java)
+ ActivityScenario.launch<BluetoothDashboardActivity>(intent).use {
+ it.onActivity { activity ->
+ val fragment = activity.supportFragmentManager.fragments[0]
+ assertThat(fragment.javaClass).isEqualTo(fragmentClass)
+ action(fragment as PreferenceFragmentCompat)
+ }
+ }
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java
index 11e31b6..12e03d4 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingBluetoothDeviceUpdaterTest.java
@@ -51,6 +51,7 @@
import com.android.settings.testutils.shadow.ShadowThreadUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
+import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
@@ -99,6 +100,7 @@
@Mock private CachedBluetoothDeviceManager mCachedDeviceManager;
@Mock private LocalBluetoothProfileManager mLocalBtProfileManager;
@Mock private LocalBluetoothLeBroadcastAssistant mAssistant;
+ @Mock private LocalBluetoothLeBroadcast mBroadcast;
@Mock private BluetoothLeBroadcastReceiveState mState;
private Context mContext;
@@ -122,9 +124,7 @@
when(mLocalBtManager.getCachedDeviceManager()).thenReturn(mCachedDeviceManager);
when(mLocalBtManager.getProfileManager()).thenReturn(mLocalBtProfileManager);
when(mLocalBtProfileManager.getLeAudioBroadcastAssistantProfile()).thenReturn(mAssistant);
- List<Long> bisSyncState = new ArrayList<>();
- bisSyncState.add(1L);
- when(mState.getBisSyncState()).thenReturn(bisSyncState);
+ when(mLocalBtProfileManager.getLeAudioBroadcastProfile()).thenReturn(mBroadcast);
Pair<Drawable, String> pairs = new Pair<>(mDrawable, TEST_DEVICE_NAME);
doReturn(TEST_DEVICE_NAME).when(mCachedBluetoothDevice).getName();
doReturn(mBluetoothDevice).when(mCachedBluetoothDevice).getDevice();
@@ -152,7 +152,7 @@
@Test
public void onProfileConnectionStateChanged_leaDeviceConnected_flagOff_removesPref() {
- setupPreferenceMapWithDevice();
+ setupPreferenceMapWithDevice(false);
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
@@ -170,8 +170,46 @@
}
@Test
- public void onProfileConnectionStateChanged_leaDeviceConnected_noSource_removesPref() {
- setupPreferenceMapWithDevice();
+ public void onProfileConnectionStateChanged_leaConnected_flagOff_hysteresisMode_removesPref() {
+ setupPreferenceMapWithDevice(true);
+
+ mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+
+ mDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mDevicePreferenceCallback).onDeviceRemoved(captor.capture());
+ assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
+ assertThat(((BluetoothDevicePreference) captor.getValue()).getBluetoothDevice())
+ .isEqualTo(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaConnected_noSource_removesPref() {
+ setupPreferenceMapWithDevice(false);
+
+ when(mAssistant.getAllSources(mBluetoothDevice)).thenReturn(ImmutableList.of());
+ ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+
+ mDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mDevicePreferenceCallback).onDeviceRemoved(captor.capture());
+ assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
+ assertThat(((BluetoothDevicePreference) captor.getValue()).getBluetoothDevice())
+ .isEqualTo(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaConnected_noSource_hysteresisMode_removesPref() {
+ setupPreferenceMapWithDevice(true);
when(mAssistant.getAllSources(mBluetoothDevice)).thenReturn(ImmutableList.of());
ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
@@ -190,7 +228,7 @@
@Test
public void onProfileConnectionStateChanged_deviceIsNotInList_removesPref() {
- setupPreferenceMapWithDevice();
+ setupPreferenceMapWithDevice(false);
mCachedDevices.clear();
when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(mCachedDevices);
@@ -209,8 +247,28 @@
}
@Test
- public void onProfileConnectionStateChanged_leaDeviceDisconnected_removesPref() {
- setupPreferenceMapWithDevice();
+ public void onProfileConnectionStateChanged_deviceIsNotInList_hysteresisMode_removesPref() {
+ setupPreferenceMapWithDevice(true);
+
+ mCachedDevices.clear();
+ when(mCachedDeviceManager.getCachedDevicesCopy()).thenReturn(mCachedDevices);
+ ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+
+ mDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mDevicePreferenceCallback).onDeviceRemoved(captor.capture());
+ assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
+ assertThat(((BluetoothDevicePreference) captor.getValue()).getBluetoothDevice())
+ .isEqualTo(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaDisconnected_removesPref() {
+ setupPreferenceMapWithDevice(false);
when(mDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(false);
ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
@@ -228,8 +286,27 @@
}
@Test
- public void onProfileConnectionStateChanged_leaDeviceDisconnecting_removesPref() {
- setupPreferenceMapWithDevice();
+ public void onProfileConnectionStateChanged_leaDisconnected_hysteresisMode_removesPref() {
+ setupPreferenceMapWithDevice(true);
+
+ when(mDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(false);
+ ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+
+ mDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_DISCONNECTED,
+ BluetoothProfile.LE_AUDIO);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mDevicePreferenceCallback).onDeviceRemoved(captor.capture());
+ assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
+ assertThat(((BluetoothDevicePreference) captor.getValue()).getBluetoothDevice())
+ .isEqualTo(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaDisconnecting_removesPref() {
+ setupPreferenceMapWithDevice(false);
doReturn(false).when(mCachedBluetoothDevice).isConnectedLeAudioDevice();
ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
@@ -246,9 +323,38 @@
}
@Test
- public void onProfileConnectionStateChanged_leaDeviceConnected_hasSource_addsPreference() {
+ public void onProfileConnectionStateChanged_leaDisconnecting_hysteresisMode_removesPref() {
+ setupPreferenceMapWithDevice(true);
+ doReturn(false).when(mCachedBluetoothDevice).isConnectedLeAudioDevice();
ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
- setupPreferenceMapWithDevice();
+
+ mDeviceUpdater.onProfileConnectionStateChanged(
+ mCachedBluetoothDevice,
+ BluetoothProfile.STATE_CONNECTED,
+ BluetoothProfile.LE_AUDIO);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mDevicePreferenceCallback).onDeviceRemoved(captor.capture());
+ assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
+ assertThat(((BluetoothDevicePreference) captor.getValue()).getBluetoothDevice())
+ .isEqualTo(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaConnected_hasSource_addsPref() {
+ ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+ setupPreferenceMapWithDevice(false);
+
+ verify(mDevicePreferenceCallback).onDeviceAdded(captor.capture());
+ assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
+ assertThat(((BluetoothDevicePreference) captor.getValue()).getBluetoothDevice())
+ .isEqualTo(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void onProfileConnectionStateChanged_leaConnected_hasSource_hysteresisMode_addsPref() {
+ ArgumentCaptor<Preference> captor = ArgumentCaptor.forClass(Preference.class);
+ setupPreferenceMapWithDevice(true);
verify(mDevicePreferenceCallback).onDeviceAdded(captor.capture());
assertThat(captor.getValue() instanceof BluetoothDevicePreference).isTrue();
@@ -275,9 +381,19 @@
verify(mDevicePreferenceCallback).onDeviceClick(preference);
}
- private void setupPreferenceMapWithDevice() {
+ private void setupPreferenceMapWithDevice(boolean hysteresisModeOn) {
// Add device to preferenceMap
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ if (hysteresisModeOn) {
+ mSetFlagsRule.enableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
+ when(mBroadcast.getLatestBroadcastId()).thenReturn(1);
+ when(mState.getBroadcastId()).thenReturn(1);
+ } else {
+ mSetFlagsRule.disableFlags(Flags.FLAG_AUDIO_SHARING_HYSTERESIS_MODE_FIX);
+ List<Long> bisSyncState = new ArrayList<>();
+ bisSyncState.add(1L);
+ when(mState.getBisSyncState()).thenReturn(bisSyncState);
+ }
when(mAssistant.getAllSources(mBluetoothDevice)).thenReturn(ImmutableList.of(mState));
when(mDeviceUpdater.isDeviceConnected(any(CachedBluetoothDevice.class))).thenReturn(true);
doReturn(true).when(mCachedBluetoothDevice).isConnectedLeAudioDevice();
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceControllerTest.java
index 5bfb966..8885e41 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceControllerTest.java
@@ -320,16 +320,37 @@
}
@Test
- public void idTextValid_emptyString() {
+ public void isTextValid_emptyString() {
boolean valid = mController.isTextValid("");
assertThat(valid).isFalse();
}
+
@Test
- public void idTextValid_validPassword() {
+ public void isTextValid_emptyString_showEditTextFormatAlert() {
+ mController.displayPreference(mScreen);
+ ShadowLooper.idleMainLooper();
+ boolean valid = mController.isTextValid("");
+
+ assertThat(valid).isFalse();
+ verify(mPreference).showEditTextFormatAlert(true);
+ }
+
+ @Test
+ public void isTextValid_validPassword() {
boolean valid = mController.isTextValid(BROADCAST_PASSWORD);
assertThat(valid).isTrue();
}
+
+ @Test
+ public void isTextValid_validPassword_hideEditTextFormatAlert() {
+ mController.displayPreference(mScreen);
+ ShadowLooper.idleMainLooper();
+ boolean valid = mController.isTextValid(BROADCAST_PASSWORD);
+
+ assertThat(valid).isTrue();
+ verify(mPreference).showEditTextFormatAlert(false);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceTest.java
index 0b87e8c..20b8319 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingPasswordPreferenceTest.java
@@ -71,10 +71,12 @@
var editText = view.findViewById(android.R.id.edit);
var checkBox = view.findViewById(R.id.audio_sharing_stream_password_checkbox);
var dialogMessage = view.findViewById(android.R.id.message);
+ var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
assertThat(editText).isNotNull();
assertThat(checkBox).isNotNull();
assertThat(dialogMessage).isNotNull();
+ assertThat(editTextAlertMessage).isNotNull();
}
@Test
@@ -148,6 +150,34 @@
}
@Test
+ public void showEditTextFormatAlert_show() {
+ View view =
+ LayoutInflater.from(mContext).inflate(R.layout.audio_sharing_password_dialog, null);
+ mPreference.onBindDialogView(view);
+
+ var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
+
+ mPreference.showEditTextFormatAlert(true);
+
+ assertThat(editTextAlertMessage).isNotNull();
+ assertThat(editTextAlertMessage.getVisibility()).isEqualTo(VISIBLE);
+ }
+
+ @Test
+ public void showEditTextFormatAlert_hide() {
+ View view =
+ LayoutInflater.from(mContext).inflate(R.layout.audio_sharing_password_dialog, null);
+ mPreference.onBindDialogView(view);
+
+ var editTextAlertMessage = view.findViewById(R.id.edit_alert_message);
+
+ mPreference.showEditTextFormatAlert(false);
+
+ assertThat(editTextAlertMessage).isNotNull();
+ assertThat(editTextAlertMessage.getVisibility()).isEqualTo(GONE);
+ }
+
+ @Test
public void onDialogEventListener_onClick_positiveButton() {
AudioSharingPasswordPreference.OnDialogEventListener listener =
mock(AudioSharingPasswordPreference.OnDialogEventListener.class);
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java
index db6eb8c..e720038 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingReceiverTest.java
@@ -130,7 +130,7 @@
}
@Test
- public void broadcastReceiver_receiveAudioSharingStateChangeIntentFlagOff_doNothing() {
+ public void broadcastReceiver_receiveAudioSharingStateOn_flagOff_doNothing() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -140,6 +140,23 @@
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
+ verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
+ }
+
+ @Test
+ public void broadcastReceiver_receiveAudioSharingStateOn_broadcastDisabled_doNothing() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
+
+ Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
+ intent.setPackage(mContext.getPackageName());
+ intent.putExtra(EXTRA_LE_AUDIO_SHARING_STATE, BROADCAST_STATE_ON);
+ AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent);
+ audioSharingReceiver.onReceive(mContext, intent);
+
+ verifyNoInteractions(mNm);
+ verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
@@ -152,10 +169,11 @@
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mNm);
+ verifyNoInteractions(mFeatureFactory.metricsFeatureProvider);
}
@Test
- public void broadcastReceiver_receiveAudioSharingStateChangeIntentOnState_showNotification() {
+ public void broadcastReceiver_receiveAudioSharingStateOn_broadcastEnabled_showNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -171,7 +189,26 @@
@Test
public void
- broadcastReceiver_receiveAudioSharingStateChangeIntentOffState_cancelNotification() {
+ broadcastReceiver_receiveAudioSharingStateOff_broadcastDisabled_cancelNotification() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
+
+ Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
+ intent.setPackage(mContext.getPackageName());
+ intent.putExtra(EXTRA_LE_AUDIO_SHARING_STATE, BROADCAST_STATE_OFF);
+ AudioSharingReceiver audioSharingReceiver = getAudioSharingReceiver(intent);
+ audioSharingReceiver.onReceive(mContext, intent);
+
+ verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
+ verify(mFeatureFactory.metricsFeatureProvider)
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
+ }
+
+ @Test
+ public void
+ broadcastReceiver_receiveAudioSharingStateOff_broadcastEnabled_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
@@ -182,12 +219,15 @@
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
- .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STATE_CHANGE);
}
@Test
- public void broadcastReceiver_receiveAudioSharingStopIntentFlagOff_doNothing() {
- mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ public void broadcastReceiver_receiveAudioSharingStop_broadcastDisabled_cancelNotification() {
+ mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.ERROR_BLUETOOTH_NOT_ENABLED);
Intent intent = new Intent(ACTION_LE_AUDIO_SHARING_STOP);
intent.setPackage(mContext.getPackageName());
@@ -195,11 +235,14 @@
audioSharingReceiver.onReceive(mContext, intent);
verifyNoInteractions(mBroadcast);
+ verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
+ verify(mFeatureFactory.metricsFeatureProvider)
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
}
@Test
- public void
- broadcastReceiver_receiveAudioSharingStopIntent_notInBroadcast_cancelNotification() {
+ public void broadcastReceiver_receiveAudioSharingStop_notInBroadcast_cancelNotification() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
when(mBroadcast.isEnabled(null)).thenReturn(false);
int broadcastId = 1;
@@ -213,11 +256,12 @@
verify(mBroadcast, never()).stopBroadcast(broadcastId);
verify(mNm).cancel(R.drawable.ic_bt_le_audio_sharing);
verify(mFeatureFactory.metricsFeatureProvider)
- .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION);
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
}
@Test
- public void broadcastReceiver_receiveAudioSharingStopIntent_inBroadcast_stopBroadcast() {
+ public void broadcastReceiver_receiveAudioSharingStop_inBroadcast_stopBroadcast() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_LE_AUDIO_SHARING);
when(mBroadcast.isEnabled(null)).thenReturn(true);
int broadcastId = 1;
@@ -231,6 +275,10 @@
verify(mBroadcast).stopBroadcast(broadcastId);
verify(mFeatureFactory.metricsFeatureProvider)
.action(mContext, SettingsEnums.ACTION_STOP_AUDIO_SHARING_FROM_NOTIFICATION);
+ verify(mNm, never()).cancel(R.drawable.ic_bt_le_audio_sharing);
+ verify(mFeatureFactory.metricsFeatureProvider, never())
+ .action(mContext, SettingsEnums.ACTION_CANCEL_AUDIO_SHARING_NOTIFICATION,
+ ACTION_LE_AUDIO_SHARING_STOP);
}
private AudioSharingReceiver getAudioSharingReceiver(Intent intent) {
diff --git a/tests/robotests/src/com/android/settings/datausage/DataSaverScreenTest.kt b/tests/robotests/src/com/android/settings/datausage/DataSaverScreenTest.kt
new file mode 100644
index 0000000..08af4c0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/datausage/DataSaverScreenTest.kt
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.datausage
+
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+
+class DataSaverScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = DataSaverScreen()
+ override val flagName
+ get() = Flags.FLAG_CATALYST_RESTRICT_BACKGROUND_PARENT_ENTRY
+
+ override fun migration() {}
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(DataSaverScreen.KEY)
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothLeAudioUiPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothLeAudioUiPreferenceControllerTest.java
new file mode 100644
index 0000000..a4462e4
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothLeAudioUiPreferenceControllerTest.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static com.android.settings.development.BluetoothLeAudioUiPreferenceController.VALUE_KEY;
+import static com.android.settings.development.BluetoothLeAudioUiPreferenceController.VALUE_OFF;
+import static com.android.settings.development.BluetoothLeAudioUiPreferenceController.VALUE_ON;
+import static com.android.settings.development.BluetoothLeAudioUiPreferenceController.VALUE_UNSET;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.robolectric.Shadows.shadowOf;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothStatusCodes;
+import android.content.Context;
+import android.os.Looper;
+import android.os.SystemProperties;
+import android.platform.test.annotations.DisableFlags;
+import android.platform.test.annotations.EnableFlags;
+import android.platform.test.flag.junit.SetFlagsRule;
+import android.provider.Settings;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreferenceCompat;
+
+import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
+import com.android.settingslib.flags.Flags;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.shadow.api.Shadow;
+
+@RunWith(RobolectricTestRunner.class)
+@Config(
+ shadows = {
+ ShadowBluetoothAdapter.class,
+ BluetoothLeAudioUiPreferenceControllerTest.ShadowBluetoothRebootDialogFragment.class
+ })
+public class BluetoothLeAudioUiPreferenceControllerTest {
+ @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+ private static final String SOURCE_SYSTEM_PROP_KEY =
+ "bluetooth.profile.bap.broadcast.source.enabled";
+ private static final String ASSIST_SYSTEM_PROP_KEY =
+ "bluetooth.profile.bap.broadcast.assist.enabled";
+ @Mock private PreferenceScreen mPreferenceScreen;
+ @Mock private DevelopmentSettingsDashboardFragment mFragment;
+ @Mock private SwitchPreferenceCompat mPreference;
+ private ShadowBluetoothAdapter mShadowBluetoothAdapter;
+ private Context mContext;
+ private BluetoothLeAudioUiPreferenceController mController;
+
+ @Before
+ public void setup() {
+ mContext = RuntimeEnvironment.getApplication();
+ SystemProperties.set(SOURCE_SYSTEM_PROP_KEY, "true");
+ SystemProperties.set(ASSIST_SYSTEM_PROP_KEY, "true");
+ // Reset value
+ Settings.Global.putInt(mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET);
+ mShadowBluetoothAdapter = Shadow.extract(BluetoothAdapter.getDefaultAdapter());
+ mShadowBluetoothAdapter.setEnabled(true);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.FEATURE_SUPPORTED);
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastAssistantSupported(
+ BluetoothStatusCodes.FEATURE_SUPPORTED);
+ mController = spy(new BluetoothLeAudioUiPreferenceController(mContext, mFragment));
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+ .thenReturn(mPreference);
+ mController.displayPreference(mPreferenceScreen);
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void isAvailable_flagOff_returnFalse() {
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void isAvailable_flagOn_returnFalse() {
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void isAvailable_flagOn_propertyOff_returnFalse() {
+ SystemProperties.set(SOURCE_SYSTEM_PROP_KEY, "false");
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void updateState_settingEnabled_checked() {
+ Settings.Global.putInt(mContext.getContentResolver(), VALUE_KEY, VALUE_ON);
+ mController.updateState(mPreference);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mPreference).setChecked(true);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void updateState_settingDisabled_notChecked() {
+ Settings.Global.putInt(mContext.getContentResolver(), VALUE_KEY, VALUE_OFF);
+ mController.updateState(mPreference);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mPreference).setChecked(false);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void updateState_featureSupported_enabled() {
+ mController.updateState(mPreference);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mPreference).setEnabled(true);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void updateState_featureUnsupported_disabled() {
+ mShadowBluetoothAdapter.setIsLeAudioBroadcastSourceSupported(
+ BluetoothStatusCodes.FEATURE_NOT_SUPPORTED);
+ mController.updateState(mPreference);
+ shadowOf(Looper.getMainLooper()).idle();
+
+ verify(mPreference).setEnabled(false);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void onRebootDialogConfirmed_noChange_doNothing() {
+ mController.onRebootDialogConfirmed();
+
+ int result = Settings.Global.getInt(mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET);
+ assertThat(result).isEqualTo(VALUE_UNSET);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void onRebootDialogConfirmed_hasChange_turnOn() {
+ mController.onPreferenceChange(mPreference, true);
+ mController.onRebootDialogConfirmed();
+
+ int result = Settings.Global.getInt(mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET);
+ assertThat(result).isEqualTo(VALUE_ON);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void onRebootDialogCanceled_hasChange_doNothing() {
+ mController.onPreferenceChange(mPreference, true);
+ mController.onRebootDialogCanceled();
+
+ int result = Settings.Global.getInt(mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET);
+ assertThat(result).isEqualTo(VALUE_UNSET);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void onBroadcastDisabled_currentValueOn_turnOff() {
+ Settings.Global.putInt(mContext.getContentResolver(), VALUE_KEY, VALUE_ON);
+ mController.updateState(mPreference);
+ shadowOf(Looper.getMainLooper()).idle();
+ mController.onBroadcastDisabled();
+
+ int result = Settings.Global.getInt(mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET);
+ assertThat(result).isEqualTo(VALUE_OFF);
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_AUDIO_SHARING_DEVELOPER_OPTION)
+ public void onBroadcastDisabled_currentValueUnset_doNothing() {
+ mController.updateState(mPreference);
+ mController.onBroadcastDisabled();
+ shadowOf(Looper.getMainLooper()).idle();
+
+ int result = Settings.Global.getInt(mContext.getContentResolver(), VALUE_KEY, VALUE_UNSET);
+ assertThat(result).isEqualTo(VALUE_UNSET);
+ }
+
+ @Implements(BluetoothRebootDialog.class)
+ public static class ShadowBluetoothRebootDialogFragment {
+
+ /** Shadow implementation of BluetoothRebootDialog#show */
+ @Implementation
+ public static void show(DevelopmentSettingsDashboardFragment host) {
+ // Do nothing.
+ }
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/LinuxTerminalPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/LinuxTerminalPreferenceControllerTest.java
new file mode 100644
index 0000000..96b6d6a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/LinuxTerminalPreferenceControllerTest.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+
+import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class LinuxTerminalPreferenceControllerTest {
+
+ @Mock
+ private Context mContext;
+ @Mock
+ private SwitchPreference mPreference;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private ApplicationInfo mApplicationInfo;
+
+ private String mTerminalPackageName = "com.android.virtualization.terminal";
+ private LinuxTerminalPreferenceController mController;
+
+ @Before
+ public void setup() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ doReturn(mPackageManager).when(mContext).getPackageManager();
+ doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(
+ eq(mTerminalPackageName), any());
+
+ mController = spy(new LinuxTerminalPreferenceController(mContext));
+ doReturn(true).when(mController).isAvailable();
+ doReturn(mTerminalPackageName).when(mController).getTerminalPackageName();
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
+ .thenReturn(mPreference);
+ mController.displayPreference(mPreferenceScreen);
+ }
+
+ @Test
+ public void isAvailable_whenPackageNameIsNull_returnsFalse() throws Exception {
+ mController = spy(new LinuxTerminalPreferenceController(mContext));
+ doReturn(null).when(mController).getTerminalPackageName();
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void isAvailable_whenAppDoesNotExist_returnsFalse() throws Exception {
+ doThrow(new NameNotFoundException()).when(mPackageManager).getApplicationInfo(
+ eq(mTerminalPackageName), any());
+
+ mController = spy(new LinuxTerminalPreferenceController(mContext));
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void onPreferenceChanged_turnOnTerminal() {
+ mController.onPreferenceChange(null, true);
+
+ verify(mPackageManager).setApplicationEnabledSetting(
+ mTerminalPackageName,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+ /* flags= */ 0);
+ }
+
+ @Test
+ public void onPreferenceChanged_turnOffTerminal() {
+ mController.onPreferenceChange(null, false);
+
+ verify(mPackageManager).setApplicationEnabledSetting(
+ mTerminalPackageName,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
+ /* flags= */ 0);
+ }
+
+ @Test
+ public void updateState_preferenceShouldBeChecked() {
+ when(mPackageManager.getApplicationEnabledSetting(mTerminalPackageName))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(true);
+ }
+
+ @Test
+ public void updateState_preferenceShouldNotBeChecked() {
+ when(mPackageManager.getApplicationEnabledSetting(mTerminalPackageName))
+ .thenReturn(PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(false);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateDetailsFragmentTest.java b/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateDetailsFragmentTest.java
index e5940b6..d1c32a2 100644
--- a/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateDetailsFragmentTest.java
@@ -16,16 +16,26 @@
package com.android.settings.display;
+import static android.hardware.devicestate.DeviceState.PROPERTY_EMULATED_ONLY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FEATURE_REAR_DISPLAY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN;
import static android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_LOCKED;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.content.res.Resources;
+import android.hardware.devicestate.DeviceState;
+import android.hardware.devicestate.DeviceStateManager;
import com.android.settings.R;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -34,29 +44,61 @@
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import java.util.List;
+import java.util.Set;
@RunWith(RobolectricTestRunner.class)
public class DeviceStateAutoRotateDetailsFragmentTest {
- private static final int FOLDED_STATE = 0;
- private static final int HALF_FOLDED_STATE = 1;
- private static final int UNFOLDED_STATE = 2;
- private static final int REAR_DISPLAY_STATE = 3;
+ private static final DeviceState DEVICE_STATE_FOLDED = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 0, "FOLDED")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED))
+ .build());
+ private static final DeviceState DEVICE_STATE_HALF_FOLDED = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 1, "HALF_FOLDED")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN))
+ .build());
+ private static final DeviceState DEVICE_STATE_UNFOLDED = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 2, "UNFOLDED")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN))
+ .build());
+ private static final DeviceState DEVICE_STATE_REAR_DISPLAY = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 3, "REAR_DISPLAY")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY,
+ PROPERTY_FEATURE_REAR_DISPLAY, PROPERTY_EMULATED_ONLY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED))
+ .build());
private final DeviceStateAutoRotateDetailsFragment mFragment =
spy(new DeviceStateAutoRotateDetailsFragment());
private final Context mContext = spy(RuntimeEnvironment.application);
private final Resources mResources = spy(mContext.getResources());
+ @Mock
+ private DeviceStateManager mDeviceStateManager;
@Before
public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
when(mContext.getResources()).thenReturn(mResources);
when(mContext.getApplicationContext()).thenReturn(mContext);
when(mFragment.getContext()).thenReturn(mContext);
when(mFragment.getResources()).thenReturn(mResources);
+ doReturn(mDeviceStateManager).when(mContext).getSystemService(DeviceStateManager.class);
setUpPostureMappings();
}
@@ -75,8 +117,10 @@
@Test
public void createPreferenceControllers_settableDeviceStates_returnsDeviceStateControllers() {
enableDeviceStateSettableRotationStates(
- new String[]{FOLDED_STATE + ":" + DEVICE_STATE_ROTATION_LOCK_LOCKED,
- UNFOLDED_STATE + ":" + DEVICE_STATE_ROTATION_LOCK_LOCKED},
+ new String[]{DEVICE_STATE_FOLDED.getIdentifier() + ":"
+ + DEVICE_STATE_ROTATION_LOCK_LOCKED,
+ DEVICE_STATE_UNFOLDED.getIdentifier() + ":"
+ + DEVICE_STATE_ROTATION_LOCK_LOCKED},
new String[]{"Folded", "Unfolded"});
List<AbstractPreferenceController> preferenceControllers =
@@ -112,18 +156,22 @@
.resetStateForTesting(mResources);
}
+ // Sets up posture mappings for PosturesHelper
private void setUpPostureMappings() {
when(mResources.getIntArray(
com.android.internal.R.array.config_foldedDeviceStates)).thenReturn(
- new int[]{FOLDED_STATE});
+ new int[]{DEVICE_STATE_FOLDED.getIdentifier()});
when(mResources.getIntArray(
com.android.internal.R.array.config_halfFoldedDeviceStates)).thenReturn(
- new int[]{HALF_FOLDED_STATE});
+ new int[]{DEVICE_STATE_HALF_FOLDED.getIdentifier()});
when(mResources.getIntArray(
com.android.internal.R.array.config_openDeviceStates)).thenReturn(
- new int[]{UNFOLDED_STATE});
+ new int[]{DEVICE_STATE_UNFOLDED.getIdentifier()});
when(mResources.getIntArray(
com.android.internal.R.array.config_rearDisplayDeviceStates)).thenReturn(
- new int[]{REAR_DISPLAY_STATE});
+ new int[]{DEVICE_STATE_REAR_DISPLAY.getIdentifier()});
+ when(mDeviceStateManager.getSupportedDeviceStates()).thenReturn(
+ List.of(DEVICE_STATE_FOLDED, DEVICE_STATE_HALF_FOLDED, DEVICE_STATE_UNFOLDED,
+ DEVICE_STATE_REAR_DISPLAY));
}
}
diff --git a/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateSettingControllerTest.java b/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateSettingControllerTest.java
index d364a3b..cb1be85 100644
--- a/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateSettingControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/DeviceStateAutoRotateSettingControllerTest.java
@@ -21,10 +21,13 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.hardware.devicestate.DeviceState;
+import android.hardware.devicestate.DeviceStateManager;
import androidx.preference.Preference;
import androidx.preference.PreferenceManager;
@@ -41,6 +44,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
@@ -56,15 +60,16 @@
})
public class DeviceStateAutoRotateSettingControllerTest {
- private static final int DEFAULT_DEVICE_STATE = 1;
+ private static final DeviceState DEFAULT_DEVICE_STATE = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 1, "DEFAULT").build());
private static final String DEFAULT_DEVICE_STATE_DESCRIPTION = "Device state description";
private static final int DEFAULT_ORDER = -10;
- private final Context mContext = RuntimeEnvironment.application;
- private final DeviceStateRotationLockSettingsManager mAutoRotateSettingsManager =
- DeviceStateRotationLockSettingsManager.getInstance(mContext);
+ private final Context mContext = Mockito.spy(RuntimeEnvironment.application);
+ private DeviceStateRotationLockSettingsManager mAutoRotateSettingsManager;
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
+ @Mock private DeviceStateManager mDeviceStateManager;
private DeviceStateAutoRotateSettingController mController;
@@ -72,9 +77,15 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
+ doReturn(mContext).when(mContext).getApplicationContext();
+ doReturn(mDeviceStateManager).when(mContext).getSystemService(DeviceStateManager.class);
+ doReturn(List.of(DEFAULT_DEVICE_STATE)).when(
+ mDeviceStateManager).getSupportedDeviceStates();
+ mAutoRotateSettingsManager =
+ DeviceStateRotationLockSettingsManager.getInstance(mContext);
mController = new DeviceStateAutoRotateSettingController(
mContext,
- DEFAULT_DEVICE_STATE,
+ DEFAULT_DEVICE_STATE.getIdentifier(),
DEFAULT_DEVICE_STATE_DESCRIPTION,
DEFAULT_ORDER,
mMetricsFeatureProvider
@@ -128,20 +139,22 @@
public void getPreferenceKey_returnsKeyBasedOnDeviceState() {
String key = mController.getPreferenceKey();
- String expectedKey = "auto_rotate_device_state_" + DEFAULT_DEVICE_STATE;
+ String expectedKey = "auto_rotate_device_state_" + DEFAULT_DEVICE_STATE.getIdentifier();
assertThat(key).isEqualTo(expectedKey);
}
@Test
public void isChecked_settingForStateIsUnlocked_returnsTrue() {
- mAutoRotateSettingsManager.updateSetting(DEFAULT_DEVICE_STATE, /* rotationLocked= */ false);
+ mAutoRotateSettingsManager.updateSetting(
+ DEFAULT_DEVICE_STATE.getIdentifier(), /* rotationLocked= */ false);
assertThat(mController.isChecked()).isTrue();
}
@Test
public void isChecked_settingForStateIsLocked_returnsFalse() {
- mAutoRotateSettingsManager.updateSetting(DEFAULT_DEVICE_STATE, /* rotationLocked= */ true);
+ mAutoRotateSettingsManager.updateSetting(
+ DEFAULT_DEVICE_STATE.getIdentifier(), /* rotationLocked= */ true);
assertThat(mController.isChecked()).isFalse();
}
@@ -150,7 +163,8 @@
public void setChecked_true_deviceStateSettingIsUnlocked() {
mController.setChecked(true);
- boolean rotationLocked = mAutoRotateSettingsManager.isRotationLocked(DEFAULT_DEVICE_STATE);
+ boolean rotationLocked = mAutoRotateSettingsManager.isRotationLocked(
+ DEFAULT_DEVICE_STATE.getIdentifier());
assertThat(rotationLocked).isFalse();
}
@@ -159,7 +173,8 @@
public void setChecked_false_deviceStateSettingIsLocked() {
mController.setChecked(false);
- boolean rotationLocked = mAutoRotateSettingsManager.isRotationLocked(DEFAULT_DEVICE_STATE);
+ boolean rotationLocked = mAutoRotateSettingsManager.isRotationLocked(
+ DEFAULT_DEVICE_STATE.getIdentifier());
assertThat(rotationLocked).isTrue();
}
@@ -169,7 +184,8 @@
mController.setChecked(true);
verify(mMetricsFeatureProvider).action(mContext,
- SettingsEnums.ACTION_ENABLE_AUTO_ROTATION_DEVICE_STATE, DEFAULT_DEVICE_STATE);
+ SettingsEnums.ACTION_ENABLE_AUTO_ROTATION_DEVICE_STATE,
+ DEFAULT_DEVICE_STATE.getIdentifier());
}
@Test
@@ -177,7 +193,8 @@
mController.setChecked(false);
verify(mMetricsFeatureProvider).action(mContext,
- SettingsEnums.ACTION_DISABLE_AUTO_ROTATION_DEVICE_STATE, DEFAULT_DEVICE_STATE);
+ SettingsEnums.ACTION_DISABLE_AUTO_ROTATION_DEVICE_STATE,
+ DEFAULT_DEVICE_STATE.getIdentifier());
}
@Test
diff --git a/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt b/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt
index 6a7c238..342aa54 100644
--- a/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt
+++ b/tests/robotests/src/com/android/settings/display/DisplayScreenTest.kt
@@ -21,9 +21,9 @@
import com.android.internal.widget.LockPatternUtils
import com.android.settings.flags.Flags
import com.android.settings.testutils.FakeFeatureFactory
+import com.android.settings.testutils.SystemProperty
import com.android.settingslib.preference.CatalystScreenTestCase
import com.google.common.truth.Truth.assertThat
-import org.junit.Ignore
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentMatchers.anyInt
@@ -42,8 +42,8 @@
private val mockResources = mock<Resources>()
- private val contextWrapper =
- object : ContextWrapper(context) {
+ private val context =
+ object : ContextWrapper(appContext) {
override fun getResources(): Resources = mockResources
}
@@ -56,26 +56,26 @@
fun isAvailable_configTrue_shouldReturnTrue() {
mockResources.stub { on { getBoolean(anyInt()) } doReturn true }
- assertThat(preferenceScreenCreator.isAvailable(contextWrapper)).isTrue()
+ assertThat(preferenceScreenCreator.isAvailable(context)).isTrue()
}
@Test
fun isAvailable_configFalse_shouldReturnFalse() {
mockResources.stub { on { getBoolean(anyInt()) } doReturn false }
- assertThat(preferenceScreenCreator.isAvailable(contextWrapper)).isFalse()
+ assertThat(preferenceScreenCreator.isAvailable(context)).isFalse()
}
- @Ignore("robolectric.createActivityContexts cause other test failure")
override fun migration() {
// avoid UnsupportedOperationException when getDisplay from context
- System.setProperty("robolectric.createActivityContexts", "true")
+ SystemProperty("robolectric.createActivityContexts", "true").use {
+ val lockPatternUtils =
+ mock<LockPatternUtils> { on { isSecure(anyInt()) } doReturn true }
+ FakeFeatureFactory.setupForTest().securityFeatureProvider.stub {
+ on { getLockPatternUtils(any()) } doReturn lockPatternUtils
+ }
- val lockPatternUtils = mock<LockPatternUtils> { on { isSecure(anyInt()) } doReturn true }
- FakeFeatureFactory.setupForTest().securityFeatureProvider.stub {
- on { getLockPatternUtils(any()) } doReturn lockPatternUtils
+ super.migration()
}
-
- super.migration()
}
}
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java
index 63395d1..e2542b0 100644
--- a/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotateControllerTest.java
@@ -33,6 +33,8 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.hardware.devicestate.DeviceState;
+import android.hardware.devicestate.DeviceStateManager;
import android.os.UserHandle;
import android.provider.Settings;
@@ -56,6 +58,8 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
+import java.util.List;
+
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowSensorPrivacyManager.class, ShadowSystemSettings.class})
public class SmartAutoRotateControllerTest {
@@ -67,21 +71,30 @@
private PackageManager mPackageManager;
@Mock
private Preference mPreference;
+ @Mock
+ private DeviceStateManager mDeviceStateManager;
private ContentResolver mContentResolver;
- private final DeviceStateRotationLockSettingsManager mDeviceStateAutoRotateSettingsManager =
- DeviceStateRotationLockSettingsManager.getInstance(RuntimeEnvironment.application);
+ private DeviceStateRotationLockSettingsManager mDeviceStateAutoRotateSettingsManager;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
final Context context = Mockito.spy(RuntimeEnvironment.application);
mContentResolver = RuntimeEnvironment.application.getContentResolver();
+
when(context.getPackageManager()).thenReturn(mPackageManager);
when(context.getContentResolver()).thenReturn(mContentResolver);
doReturn(PACKAGE_NAME).when(mPackageManager).getRotationResolverPackageName();
doReturn(PackageManager.PERMISSION_GRANTED).when(mPackageManager).checkPermission(
Manifest.permission.CAMERA, PACKAGE_NAME);
+ // Necessary for the DeviceStateRotationLockSettingsManager setup
+ doReturn(context).when(context).getApplicationContext();
+ doReturn(mDeviceStateManager).when(context).getSystemService(DeviceStateManager.class);
+ doReturn(getDeviceStateList()).when(mDeviceStateManager).getSupportedDeviceStates();
+ mDeviceStateAutoRotateSettingsManager = DeviceStateRotationLockSettingsManager.getInstance(
+ context);
mController = Mockito.spy(new SmartAutoRotateController(context, "test_key"));
+
when(mController.isCameraLocked()).thenReturn(false);
when(mController.isPowerSaveMode()).thenReturn(false);
doReturn(mController.getPreferenceKey()).when(mPreference).getKey();
@@ -183,4 +196,13 @@
Shadow.extract(mDeviceStateAutoRotateSettingsManager);
shadowManager.setRotationLockedForAllStates(false);
}
+
+ /**
+ * Returns a list that includes a singular default {@link DeviceState}. To be returned when
+ * {@link DeviceStateManager#getSupportedDeviceStates()} is called.
+ */
+ private List<DeviceState> getDeviceStateList() {
+ return List.of(new DeviceState(
+ new DeviceState.Configuration.Builder(0 /* identifier */, "DEFAULT").build()));
+ }
}
diff --git a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java
index 3fa4582..1615538 100644
--- a/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/display/SmartAutoRotatePreferenceFragmentTest.java
@@ -16,6 +16,13 @@
package com.android.settings.display;
+import static android.hardware.devicestate.DeviceState.PROPERTY_EMULATED_ONLY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FEATURE_REAR_DISPLAY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN;
+import static android.hardware.devicestate.DeviceState.PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN;
import static android.provider.Settings.Secure.DEVICE_STATE_ROTATION_LOCK_LOCKED;
import static com.android.settings.display.SmartAutoRotatePreferenceFragment.AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY;
@@ -39,6 +46,8 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
+import android.hardware.devicestate.DeviceState;
+import android.hardware.devicestate.DeviceStateManager;
import android.view.View;
import androidx.preference.Preference;
@@ -61,6 +70,7 @@
import org.robolectric.annotation.Config;
import java.util.List;
+import java.util.Set;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
@@ -70,10 +80,35 @@
})
public class SmartAutoRotatePreferenceFragmentTest {
- private static final int STATE_FOLDED = 0;
- private static final int STATE_HALF_FOLDED = 1;
- private static final int STATE_UNFOLDED = 2;
- private static final int STATE_REAR_DISPLAY = 3;
+ private static final DeviceState DEVICE_STATE_FOLDED = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 0, "FOLDED")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED))
+ .build());
+ private static final DeviceState DEVICE_STATE_HALF_FOLDED = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 1, "HALF_FOLDED")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_HALF_OPEN))
+ .build());
+ private static final DeviceState DEVICE_STATE_UNFOLDED = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 2, "UNFOLDED")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_INNER_PRIMARY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_OPEN))
+ .build());
+ private static final DeviceState DEVICE_STATE_REAR_DISPLAY = new DeviceState(
+ new DeviceState.Configuration.Builder(/* identifier= */ 3, "REAR_DISPLAY")
+ .setSystemProperties(Set.of(
+ PROPERTY_FOLDABLE_DISPLAY_CONFIGURATION_OUTER_PRIMARY,
+ PROPERTY_FEATURE_REAR_DISPLAY, PROPERTY_EMULATED_ONLY))
+ .setPhysicalProperties(Set.of(
+ PROPERTY_FOLDABLE_HARDWARE_CONFIGURATION_FOLD_IN_CLOSED))
+ .build());
private static final String PACKAGE_NAME = "package_name";
@@ -96,6 +131,9 @@
@Mock
private Preference mRotateMainSwitchPreference;
+ @Mock
+ private DeviceStateManager mDeviceStateManager;
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -105,6 +143,7 @@
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mContext.getContentResolver()).thenReturn(mContentResolver);
when(mContext.getApplicationContext()).thenReturn(mContext);
+ doReturn(mDeviceStateManager).when(mContext).getSystemService(DeviceStateManager.class);
doReturn(PACKAGE_NAME).when(mPackageManager).getRotationResolverPackageName();
doReturn(PackageManager.PERMISSION_GRANTED).when(mPackageManager).checkPermission(
Manifest.permission.CAMERA, PACKAGE_NAME);
@@ -130,14 +169,7 @@
when(mFragment.findPreference(AUTO_ROTATE_MAIN_SWITCH_PREFERENCE_KEY))
.thenReturn(mRotateMainSwitchPreference);
- when(mResources.getIntArray(com.android.internal.R.array.config_foldedDeviceStates))
- .thenReturn(new int[] {STATE_FOLDED});
- when(mResources.getIntArray(com.android.internal.R.array.config_halfFoldedDeviceStates))
- .thenReturn(new int[] {STATE_HALF_FOLDED});
- when(mResources.getIntArray(com.android.internal.R.array.config_openDeviceStates))
- .thenReturn(new int[] {STATE_UNFOLDED});
- when(mResources.getIntArray(com.android.internal.R.array.config_rearDisplayDeviceStates))
- .thenReturn(new int[] {STATE_REAR_DISPLAY});
+ setUpPostureMappings();
}
@Test
@@ -195,8 +227,8 @@
public void createPreferenceControllers_settableDeviceStates_returnsDeviceStateControllers() {
enableDeviceStateSettableRotationStates(
new String[] {
- STATE_FOLDED + ":" + DEVICE_STATE_ROTATION_LOCK_LOCKED,
- STATE_UNFOLDED + ":" + DEVICE_STATE_ROTATION_LOCK_LOCKED
+ DEVICE_STATE_FOLDED.getIdentifier() + ":" + DEVICE_STATE_ROTATION_LOCK_LOCKED,
+ DEVICE_STATE_UNFOLDED.getIdentifier() + ":" + DEVICE_STATE_ROTATION_LOCK_LOCKED
},
new String[] {"Folded", "Unfolded"});
@@ -236,4 +268,23 @@
DeviceStateRotationLockSettingsManager.getInstance(mContext)
.resetStateForTesting(mResources);
}
+
+ // Sets up posture mappings for PosturesHelper
+ private void setUpPostureMappings() {
+ when(mResources.getIntArray(
+ com.android.internal.R.array.config_foldedDeviceStates)).thenReturn(
+ new int[]{DEVICE_STATE_FOLDED.getIdentifier()});
+ when(mResources.getIntArray(
+ com.android.internal.R.array.config_halfFoldedDeviceStates)).thenReturn(
+ new int[]{DEVICE_STATE_HALF_FOLDED.getIdentifier()});
+ when(mResources.getIntArray(
+ com.android.internal.R.array.config_openDeviceStates)).thenReturn(
+ new int[]{DEVICE_STATE_UNFOLDED.getIdentifier()});
+ when(mResources.getIntArray(
+ com.android.internal.R.array.config_rearDisplayDeviceStates)).thenReturn(
+ new int[]{DEVICE_STATE_REAR_DISPLAY.getIdentifier()});
+ when(mDeviceStateManager.getSupportedDeviceStates()).thenReturn(
+ List.of(DEVICE_STATE_FOLDED, DEVICE_STATE_HALF_FOLDED, DEVICE_STATE_UNFOLDED,
+ DEVICE_STATE_REAR_DISPLAY));
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
index 1bc00a1..f3848b3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/AdvancedPowerUsageDetailTest.java
@@ -17,10 +17,10 @@
package com.android.settings.fuelgauge;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS;
-import static com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.nullable;
@@ -49,13 +49,13 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
+import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
import com.android.settings.fuelgauge.batteryusage.ConvertUtils;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
import com.android.settings.widget.EntityHeaderController;
-import com.android.settingslib.PrimarySwitchPreference;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
@@ -87,12 +87,12 @@
})
public class AdvancedPowerUsageDetailTest {
- @Rule
- public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
private static final String APP_LABEL = "app label";
private static final String SUMMARY = "summary";
- private static final String[] PACKAGE_NAME = {"com.android.app"};
+ private static final String PACKAGE_NAME = "com.android.app";
+ private static final String INITIATING_PACKAGE_NAME = "com.android.vending";
private static final String USAGE_PERCENT = "16%";
private static final int ICON_ID = 123;
private static final int UID = 1;
@@ -100,39 +100,43 @@
private static final long FOREGROUND_SERVICE_TIME_MS = 123;
private static final long BACKGROUND_TIME_MS = 100;
private static final long SCREEN_ON_TIME_MS = 321;
- private static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private FragmentActivity mActivity;
@Mock private EntityHeaderController mEntityHeaderController;
- @Mock private LayoutPreference mHeaderPreference;
@Mock private ApplicationsState mState;
@Mock private ApplicationsState.AppEntry mAppEntry;
@Mock private BatteryEntry mBatteryEntry;
@Mock private PackageManager mPackageManager;
@Mock private InstallSourceInfo mInstallSourceInfo;
+ @Mock private LayoutPreference mLayoutPreference;
@Mock private AppOpsManager mAppOpsManager;
@Mock private LoaderManager mLoaderManager;
- @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
+ private int mTestMode;
private Context mContext;
- private PrimarySwitchPreference mAllowBackgroundUsagePreference;
private AdvancedPowerUsageDetail mFragment;
private SettingsActivity mTestActivity;
private FakeFeatureFactory mFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider;
private BatteryDiffEntry mBatteryDiffEntry;
private Bundle mBundle;
+ private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Before
- public void setUp() {
+ public void setUp() throws Exception {
mContext = spy(ApplicationProvider.getApplicationContext());
- when(mContext.getPackageName()).thenReturn("foo");
+ when(mContext.getPackageName()).thenReturn(PACKAGE_NAME);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo);
mFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
+ prepareTestBatteryOptimizationUtils();
mFragment = spy(new AdvancedPowerUsageDetail());
+ mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
+ doReturn(mLayoutPreference).when(mFragment).findPreference(any());
mBundle = spy(new Bundle());
doReturn(mContext).when(mFragment).getContext();
doReturn(mActivity).when(mFragment).getActivity();
@@ -195,7 +199,6 @@
when(mBatteryDiffEntry.getAppLabel()).thenReturn(APP_LABEL);
when(mBatteryDiffEntry.getAppIconId()).thenReturn(ICON_ID);
- mFragment.mHeaderPreference = mHeaderPreference;
mFragment.mState = mState;
mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
mFragment.mLogStringBuilder = new StringBuilder();
@@ -219,10 +222,6 @@
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
doAnswer(callable).when(mActivity).startActivity(captor.capture());
doAnswer(callable).when(mContext).startActivity(captor.capture());
-
- mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext);
- mAllowBackgroundUsagePreference.setKey(KEY_ALLOW_BACKGROUND_USAGE);
- mFragment.mAllowBackgroundUsagePreference = mAllowBackgroundUsagePreference;
}
@After
@@ -320,17 +319,15 @@
.isEqualTo(SCREEN_ON_TIME_MS);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
.isEqualTo(USAGE_PERCENT);
- assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME))
- .isEqualTo(null);
+ assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_SLOT_TIME)).isNull();
}
-
@Test
public void startBatteryDetailPage_noBatteryUsage_hasBasicData() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
AdvancedPowerUsageDetail.startBatteryDetailPage(
- mActivity, mFragment, PACKAGE_NAME[0], UserHandle.OWNER);
+ mActivity, mFragment, PACKAGE_NAME, UserHandle.OWNER);
verify(mActivity).startActivity(captor.capture());
@@ -338,7 +335,7 @@
captor.getValue()
.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME))
- .isEqualTo(PACKAGE_NAME[0]);
+ .isEqualTo(PACKAGE_NAME);
assertThat(
captor.getValue()
@@ -351,62 +348,21 @@
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName()
throws PackageManager.NameNotFoundException {
mBundle.clear();
- doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
+ doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME, 0 /* no flag */);
AdvancedPowerUsageDetail.startBatteryDetailPage(
- mActivity, mFragment, PACKAGE_NAME[0], UserHandle.OWNER);
+ mActivity, mFragment, PACKAGE_NAME, UserHandle.OWNER);
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
}
@Test
- public void initFooter_isValidPackageName_hasCorrectString() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
+ public void onPause_optimizationModeIsChanged_logPreference() throws Exception {
+ mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+ when(mBatteryOptimizeUtils.getPackageName()).thenReturn(PACKAGE_NAME);
+ when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn(INITIATING_PACKAGE_NAME);
- mFragment.initFooter();
-
- assertThat(mAllowBackgroundUsagePreference.getSummary().toString())
- .isEqualTo("This app requires optimized battery usage.");
- }
-
- @Test
- public void initFooter_isSystemOrDefaultApp_hasCorrectString() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
-
- mFragment.initFooter();
-
- assertThat(mAllowBackgroundUsagePreference.getSummary().toString())
- .isEqualTo("This app requires unrestricted battery usage.");
- }
-
- @Test
- public void initFooter_hasCorrectString() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
-
- mFragment.initFooter();
-
- assertThat(mAllowBackgroundUsagePreference.getSummary().toString())
- .isEqualTo("Enable for real-time updates, disable to save battery");
- }
-
- @Test
- public void onPause_optimizationModeChanged_logPreference()
- throws PackageManager.NameNotFoundException, InterruptedException {
- final String packageName = "testPackageName";
- final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED;
- final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
- mFragment.mOptimizationMode = restrictedMode;
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(restrictedMode);
- when(mBatteryOptimizeUtils.getPackageName()).thenReturn(packageName);
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
- when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo);
- when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn("com.android.vending");
-
- mFragment.onPreferenceChange(mAllowBackgroundUsagePreference, true);
- verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY);
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(optimizedMode);
+ mBatteryOptimizeUtils.setAppUsageState(BatteryOptimizeUtils.MODE_OPTIMIZED, Action.APPLY);
mFragment.onPause();
TimeUnit.SECONDS.sleep(1);
@@ -415,27 +371,18 @@
SettingsEnums.LEAVE_APP_BATTERY_USAGE,
SettingsEnums.ACTION_APP_BATTERY_USAGE_ALLOW_BACKGROUND,
SettingsEnums.FUELGAUGE_POWER_USAGE_DETAIL,
- packageName,
+ PACKAGE_NAME,
/* consumed battery */ 0);
}
@Test
- public void onPause_optimizationModeIsNotChanged_notInvokeLogging()
- throws PackageManager.NameNotFoundException, InterruptedException {
- final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED;
- final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
- mFragment.mOptimizationMode = restrictedMode;
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(restrictedMode);
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
- when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo);
- when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn("com.android.vending");
+ public void onPause_optimizationModeIsNotChanged_notInvokeLogging() throws Exception {
+ mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+ when(mBatteryOptimizeUtils.getPackageName()).thenReturn(PACKAGE_NAME);
+ when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn(INITIATING_PACKAGE_NAME);
- mFragment.onPreferenceChange(mAllowBackgroundUsagePreference, true);
- verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY);
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(optimizedMode);
- mFragment.onPreferenceChange(mAllowBackgroundUsagePreference, false);
- verify(mBatteryOptimizeUtils).setAppUsageState(restrictedMode, Action.APPLY);
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(restrictedMode);
+ mBatteryOptimizeUtils.setAppUsageState(BatteryOptimizeUtils.MODE_OPTIMIZED, Action.APPLY);
+ mBatteryOptimizeUtils.setAppUsageState(BatteryOptimizeUtils.MODE_RESTRICTED, Action.APPLY);
mFragment.onPause();
TimeUnit.SECONDS.sleep(1);
@@ -446,4 +393,16 @@
public void shouldSkipForInitialSUW_returnTrue() {
assertThat(mFragment.shouldSkipForInitialSUW()).isTrue();
}
+
+ private void prepareTestBatteryOptimizationUtils() {
+ mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
+ Answer<Void> setTestMode =
+ invocation -> {
+ mTestMode = invocation.getArgument(0);
+ return null;
+ };
+ doAnswer(setTestMode).when(mBatteryOptimizeUtils).setAppUsageState(anyInt(), any());
+ Answer<Integer> getTestMode = invocation -> mTestMode;
+ doAnswer(getTestMode).when(mBatteryOptimizeUtils).getAppOptimizationMode();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/AllowBackgroundPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/AllowBackgroundPreferenceControllerTest.java
deleted file mode 100644
index 261a315..0000000
--- a/tests/robotests/src/com/android/settings/fuelgauge/AllowBackgroundPreferenceControllerTest.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-
-import com.android.settingslib.widget.MainSwitchPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class AllowBackgroundPreferenceControllerTest {
- private static final int UID = 12345;
- private static final String PACKAGE_NAME = "com.android.app";
-
- private AllowBackgroundPreferenceController mController;
- private MainSwitchPreference mMainSwitchPreference;
- private BatteryOptimizeUtils mBatteryOptimizeUtils;
-
- @Mock private PackageManager mMockPackageManager;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- Context context = spy(RuntimeEnvironment.application);
- BatteryUtils.getInstance(context).reset();
- doReturn(UID)
- .when(mMockPackageManager)
- .getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
-
- mController = new AllowBackgroundPreferenceController(context, UID, PACKAGE_NAME);
- mMainSwitchPreference = new MainSwitchPreference(RuntimeEnvironment.application);
- mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(context, UID, PACKAGE_NAME));
- mController.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
- }
-
- @Test
- public void testUpdateState_isValidPackage_prefEnabled() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
-
- mController.updateState(mMainSwitchPreference);
-
- assertThat(mBatteryOptimizeUtils.isOptimizeModeMutable()).isTrue();
- assertThat(mMainSwitchPreference.isEnabled()).isTrue();
- }
-
- @Test
- public void testUpdateState_invalidPackage_prefDisabled() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
-
- mController.updateState(mMainSwitchPreference);
-
- assertThat(mBatteryOptimizeUtils.isOptimizeModeMutable()).isFalse();
- assertThat(mMainSwitchPreference.isEnabled()).isFalse();
- }
-
- @Test
- public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
-
- mController.updateState(mMainSwitchPreference);
-
- assertThat(mMainSwitchPreference.isEnabled()).isFalse();
- assertThat(mMainSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
-
- mController.updateState(mMainSwitchPreference);
-
- assertThat(mMainSwitchPreference.isEnabled()).isFalse();
- assertThat(mMainSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testUpdateState_isRestrictedStates_prefChecked() {
- when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
-
- mController.updateState(mMainSwitchPreference);
-
- assertThat(mMainSwitchPreference.isEnabled()).isTrue();
- assertThat(mMainSwitchPreference.isChecked()).isFalse();
- }
-
- @Test
- public void testUpdateState_prefUnchecked() {
- when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
-
- mController.updateState(mMainSwitchPreference);
-
- assertThat(mMainSwitchPreference.isEnabled()).isTrue();
- assertThat(mMainSwitchPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
- mMainSwitchPreference.setKey(
- AllowBackgroundPreferenceController.KEY_ALLOW_BACKGROUND_USAGE);
- mController.handlePreferenceTreeClick(mMainSwitchPreference);
-
- assertThat(mController.handlePreferenceTreeClick(mMainSwitchPreference)).isTrue();
- }
-
- @Test
- public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
- assertThat(mController.handlePreferenceTreeClick(mMainSwitchPreference)).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BackgroundUsageAllowabilityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BackgroundUsageAllowabilityPreferenceControllerTest.java
new file mode 100644
index 0000000..190446e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BackgroundUsageAllowabilityPreferenceControllerTest.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
+import com.android.settingslib.PrimarySwitchPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class BackgroundUsageAllowabilityPreferenceControllerTest {
+ private static final int UID = 12345;
+ private static final String PACKAGE_NAME = "com.android.app";
+
+ private int mTestMode;
+ private Context mContext;
+ private BackgroundUsageAllowabilityPreferenceController mBackgroundUsageController;
+ private BatteryOptimizeUtils mBatteryOptimizeUtils;
+
+ @Mock DashboardFragment mDashboardFragment;
+ @Mock PrimarySwitchPreference mBackgroundUsageAllowabilityPreference;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ prepareTestBatteryOptimizationUtils();
+ mBackgroundUsageController =
+ spy(
+ new BackgroundUsageAllowabilityPreferenceController(
+ mContext,
+ mDashboardFragment,
+ /* preferenceKey= */ "test",
+ mBatteryOptimizeUtils));
+ mBackgroundUsageController.mBackgroundUsageAllowabilityPreference =
+ mBackgroundUsageAllowabilityPreference;
+ }
+
+ @Test
+ public void initPreferences_immutableOptimized_setExpectedContent() {
+ doReturn(false).when(mBatteryOptimizeUtils).isOptimizeModeMutable();
+ doReturn(true).when(mBatteryOptimizeUtils).isDisabledForOptimizeModeOnly();
+
+ mBackgroundUsageController.initPreferences();
+
+ verify(mBackgroundUsageAllowabilityPreference).setEnabled(false);
+ verify(mBackgroundUsageAllowabilityPreference).setSwitchEnabled(false);
+ verify(mBackgroundUsageAllowabilityPreference)
+ .setSummary(
+ mContext.getString(
+ R.string.manager_battery_usage_footer_limited,
+ mContext.getString(R.string.manager_battery_usage_optimized_only)));
+ verify(mBackgroundUsageAllowabilityPreference, never())
+ .setOnPreferenceChangeListener(any());
+ verify(mBackgroundUsageAllowabilityPreference, never()).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ public void initPreferences_immutableUnrestricted_setExpectedContent() {
+ doReturn(false).when(mBatteryOptimizeUtils).isOptimizeModeMutable();
+ doReturn(false).when(mBatteryOptimizeUtils).isDisabledForOptimizeModeOnly();
+ doReturn(true).when(mBatteryOptimizeUtils).isSystemOrDefaultApp();
+
+ mBackgroundUsageController.initPreferences();
+
+ verify(mBackgroundUsageAllowabilityPreference).setEnabled(false);
+ verify(mBackgroundUsageAllowabilityPreference).setSwitchEnabled(false);
+ verify(mBackgroundUsageAllowabilityPreference)
+ .setSummary(
+ mContext.getString(
+ R.string.manager_battery_usage_footer_limited,
+ mContext.getString(
+ R.string.manager_battery_usage_unrestricted_only)));
+ verify(mBackgroundUsageAllowabilityPreference, never())
+ .setOnPreferenceChangeListener(any());
+ verify(mBackgroundUsageAllowabilityPreference, never()).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ public void initPreferences_mutableMode_setExpectedContent() {
+ doReturn(true).when(mBatteryOptimizeUtils).isOptimizeModeMutable();
+ doReturn(false).when(mBatteryOptimizeUtils).isDisabledForOptimizeModeOnly();
+ doReturn(false).when(mBatteryOptimizeUtils).isSystemOrDefaultApp();
+
+ mBackgroundUsageController.initPreferences();
+
+ verify(mBackgroundUsageAllowabilityPreference).setEnabled(true);
+ verify(mBackgroundUsageAllowabilityPreference).setSwitchEnabled(true);
+ verify(mBackgroundUsageAllowabilityPreference)
+ .setSummary(
+ mContext.getString(
+ R.string.manager_battery_usage_allow_background_usage_summary));
+ verify(mBackgroundUsageAllowabilityPreference).setOnPreferenceChangeListener(any());
+ verify(mBackgroundUsageAllowabilityPreference).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ public void updatePreferences_setIntoUnrestrictedMode_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_UNRESTRICTED;
+
+ mBackgroundUsageController.updatePreferences(mTestMode);
+
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void updatePreferences_setIntoOptimizedMode_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
+
+ mBackgroundUsageController.updatePreferences(mTestMode);
+
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void updatePreferences_setIntoRestrictedMode_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+
+ mBackgroundUsageController.updatePreferences(mTestMode);
+
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void handleBatteryOptimizeModeUpdated_modeChange_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+
+ mBackgroundUsageController.handleBatteryOptimizeModeUpdated(
+ BatteryOptimizeUtils.MODE_OPTIMIZED);
+
+ verify(mBatteryOptimizeUtils)
+ .setAppUsageState(BatteryOptimizeUtils.MODE_OPTIMIZED, Action.APPLY);
+ assertThat(mTestMode).isEqualTo(BatteryOptimizeUtils.MODE_OPTIMIZED);
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void handleBatteryOptimizeModeUpdated_modeNotChange_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+
+ mBackgroundUsageController.handleBatteryOptimizeModeUpdated(
+ BatteryOptimizeUtils.MODE_RESTRICTED);
+
+ verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
+ assertThat(mTestMode).isEqualTo(BatteryOptimizeUtils.MODE_RESTRICTED);
+ verify(mBackgroundUsageController, never()).updatePreferences(mTestMode);
+ }
+
+ private void prepareTestBatteryOptimizationUtils() {
+ mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
+ Answer<Void> setTestMode =
+ invocation -> {
+ mTestMode = invocation.getArgument(0);
+ return null;
+ };
+ doAnswer(setTestMode).when(mBatteryOptimizeUtils).setAppUsageState(anyInt(), any());
+ Answer<Integer> getTestMode = invocation -> mTestMode;
+ doAnswer(getTestMode).when(mBatteryOptimizeUtils).getAppOptimizationMode();
+ }
+
+ private void verifyPreferences(int mode) {
+ boolean isAllowBackground = mode != BatteryOptimizeUtils.MODE_RESTRICTED;
+ verify(mBackgroundUsageAllowabilityPreference).setChecked(isAllowBackground);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationModePreferenceControllerTest.java
new file mode 100644
index 0000000..2ddc7eb
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizationModePreferenceControllerTest.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.settingslib.widget.MainSwitchPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.stubbing.Answer;
+import org.robolectric.RobolectricTestRunner;
+
+@RunWith(RobolectricTestRunner.class)
+public class BatteryOptimizationModePreferenceControllerTest {
+ private static final int UID = 12345;
+ private static final String PACKAGE_NAME = "com.android.app";
+
+ private int mTestMode;
+ private Context mContext;
+ private BatteryOptimizationModePreferenceController mBackgroundUsageController;
+ private BatteryOptimizeUtils mBatteryOptimizeUtils;
+
+ @Mock MainSwitchPreference mBackgroundUsageAllowabilityPreference;
+ @Mock SelectorWithWidgetPreference mOptimizedPreference;
+ @Mock SelectorWithWidgetPreference mUnrestrictedPreference;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = spy(ApplicationProvider.getApplicationContext());
+ prepareTestBatteryOptimizationUtils();
+ mBackgroundUsageController =
+ spy(
+ new BatteryOptimizationModePreferenceController(
+ mContext, "test", mBatteryOptimizeUtils));
+ mBackgroundUsageController.mBackgroundUsageAllowabilityPreference =
+ mBackgroundUsageAllowabilityPreference;
+ mBackgroundUsageController.mOptimizedPreference = mOptimizedPreference;
+ mBackgroundUsageController.mUnrestrictedPreference = mUnrestrictedPreference;
+ }
+
+ @Test
+ public void initPreferences_mutableMode_setEnabled() {
+ doReturn(true).when(mBatteryOptimizeUtils).isOptimizeModeMutable();
+
+ mBackgroundUsageController.initPreferences();
+
+ verify(mBackgroundUsageAllowabilityPreference).setEnabled(true);
+ verify(mOptimizedPreference).setEnabled(true);
+ verify(mUnrestrictedPreference).setEnabled(true);
+ verify(mBackgroundUsageAllowabilityPreference, never()).setOnPreferenceClickListener(any());
+ verify(mBackgroundUsageAllowabilityPreference).setOnPreferenceChangeListener(any());
+ verify(mOptimizedPreference).setOnPreferenceClickListener(any());
+ verify(mUnrestrictedPreference).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ public void initPreferences_immutableMode_setDisabledAndSkipSetListeners() {
+ doReturn(false).when(mBatteryOptimizeUtils).isOptimizeModeMutable();
+
+ mBackgroundUsageController.initPreferences();
+
+ verify(mBackgroundUsageAllowabilityPreference).setEnabled(false);
+ verify(mOptimizedPreference).setEnabled(false);
+ verify(mUnrestrictedPreference).setEnabled(false);
+ verify(mBackgroundUsageAllowabilityPreference, never()).setOnPreferenceClickListener(any());
+ verify(mBackgroundUsageAllowabilityPreference, never())
+ .setOnPreferenceChangeListener(any());
+ verify(mOptimizedPreference, never()).setOnPreferenceClickListener(any());
+ verify(mUnrestrictedPreference, never()).setOnPreferenceClickListener(any());
+ }
+
+ @Test
+ public void updatePreferences_setIntoUnrestrictedMode_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_UNRESTRICTED;
+
+ mBackgroundUsageController.updatePreferences(mTestMode);
+
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void updatePreferences_setIntoOptimizedMode_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
+
+ mBackgroundUsageController.updatePreferences(mTestMode);
+
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void updatePreferences_setIntoRestrictedMode_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+
+ mBackgroundUsageController.updatePreferences(mTestMode);
+
+ verifyPreferences(mTestMode);
+ }
+
+ @Test
+ public void handleBatteryOptimizeModeUpdated_modeChange_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+
+ mBackgroundUsageController.handleBatteryOptimizeModeUpdated(
+ BatteryOptimizeUtils.MODE_OPTIMIZED);
+
+ verify(mBatteryOptimizeUtils)
+ .setAppUsageState(
+ BatteryOptimizeUtils.MODE_OPTIMIZED,
+ BatteryOptimizeHistoricalLogEntry.Action.APPLY);
+ assertThat(mTestMode).isEqualTo(BatteryOptimizeUtils.MODE_OPTIMIZED);
+ verifyPreferences(mBatteryOptimizeUtils.getAppOptimizationMode());
+ }
+
+ @Test
+ public void handleBatteryOptimizeModeUpdated_modeNotChange_setExpectedPrefStatus() {
+ mTestMode = BatteryOptimizeUtils.MODE_RESTRICTED;
+
+ mBackgroundUsageController.handleBatteryOptimizeModeUpdated(
+ BatteryOptimizeUtils.MODE_RESTRICTED);
+
+ verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
+ assertThat(mTestMode).isEqualTo(BatteryOptimizeUtils.MODE_RESTRICTED);
+ verify(mBackgroundUsageController, never()).updatePreferences(anyInt());
+ }
+
+ private void prepareTestBatteryOptimizationUtils() {
+ mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
+ Answer<Void> setTestMode =
+ invocation -> {
+ mTestMode = invocation.getArgument(0);
+ return null;
+ };
+ doAnswer(setTestMode).when(mBatteryOptimizeUtils).setAppUsageState(anyInt(), any());
+ Answer<Integer> getTestMode = invocation -> mTestMode;
+ doAnswer(getTestMode).when(mBatteryOptimizeUtils).getAppOptimizationMode();
+ }
+
+ private void verifyPreferences(int mode) {
+ boolean isAllowBackground = mode != BatteryOptimizeUtils.MODE_RESTRICTED;
+ verify(mBackgroundUsageAllowabilityPreference).setChecked(isAllowBackground);
+ verify(mOptimizedPreference).setEnabled(isAllowBackground);
+ verify(mUnrestrictedPreference).setEnabled(isAllowBackground);
+ verify(mOptimizedPreference).setChecked(mode == BatteryOptimizeUtils.MODE_OPTIMIZED);
+ verify(mUnrestrictedPreference).setChecked(mode == BatteryOptimizeUtils.MODE_UNRESTRICTED);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
index 72b49e2..41e9dca 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryOptimizeUtilsTest.java
@@ -128,6 +128,15 @@
}
@Test
+ public void testGetAppOptimizationMode_unknownMode_returnOptimized() throws Exception {
+ when(mMockBackend.isAllowlisted(anyString(), anyInt())).thenReturn(true);
+ when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
+ .thenReturn(AppOpsManager.MODE_IGNORED);
+
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_UNRESTRICTED);
+ }
+
+ @Test
public void testIsSystemOrDefaultApp_isSystemOrDefaultApp_returnTrue() {
when(mMockBackend.isAllowlisted(anyString(), anyInt())).thenReturn(true);
when(mMockBackend.isDefaultActiveApp(anyString(), anyInt())).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
deleted file mode 100644
index 6656471..0000000
--- a/tests/robotests/src/com/android/settings/fuelgauge/OptimizedPreferenceControllerTest.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-
-import com.android.settingslib.widget.SelectorWithWidgetPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class OptimizedPreferenceControllerTest {
- private static final int UID = 12345;
- private static final String PACKAGE_NAME = "com.android.app";
-
- private OptimizedPreferenceController mController;
- private SelectorWithWidgetPreference mPreference;
- private BatteryOptimizeUtils mBatteryOptimizeUtils;
-
- @Mock PackageManager mMockPackageManager;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- Context context = spy(RuntimeEnvironment.application);
- BatteryUtils.getInstance(context).reset();
- doReturn(UID)
- .when(mMockPackageManager)
- .getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
-
- mController = new OptimizedPreferenceController(context, UID, PACKAGE_NAME);
- mPreference = new SelectorWithWidgetPreference(RuntimeEnvironment.application);
- mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(context, UID, PACKAGE_NAME));
- mController.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
- }
-
- @Test
- public void testUpdateState_invalidPackage_prefEnabled() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isEnabled()).isFalse();
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isFalse();
- assertThat(mPreference.isEnabled()).isFalse();
- }
-
- @Test
- public void testUpdateState_isOptimizedStates_prefChecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testUpdateState_prefUnchecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isFalse();
- }
-
- @Test
- public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
- mPreference.setKey(mController.KEY_OPTIMIZED_PREF);
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
- }
-
- @Test
- public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
- assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java
index 9061117..9f98d78 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerBackgroundUsageDetailTest.java
@@ -17,10 +17,10 @@
package com.android.settings.fuelgauge;
import static com.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS;
-import static com.android.settings.fuelgauge.BatteryOptimizeHistoricalLogEntry.Action;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.nullable;
@@ -42,16 +42,17 @@
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.UserHandle;
-import android.widget.CompoundButton;
import androidx.fragment.app.FragmentActivity;
import androidx.loader.app.LoaderManager;
import androidx.test.core.app.ApplicationProvider;
+import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
+import com.android.settings.testutils.shadow.ShadowHelpUtils;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
@@ -59,8 +60,6 @@
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.widget.FooterPreference;
import com.android.settingslib.widget.LayoutPreference;
-import com.android.settingslib.widget.MainSwitchPreference;
-import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.After;
import org.junit.Before;
@@ -83,36 +82,33 @@
@Config(
shadows = {
ShadowEntityHeaderController.class,
+ ShadowHelpUtils.class,
com.android.settings.testutils.shadow.ShadowFragment.class,
})
public class PowerBackgroundUsageDetailTest {
- @Rule
- public final MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule();
private static final String APP_LABEL = "app label";
private static final String SUMMARY = "summary";
private static final int ICON_ID = 123;
private static final int UID = 1;
- private static final String KEY_PREF_UNRESTRICTED = "unrestricted_preference";
- private static final String KEY_PREF_OPTIMIZED = "optimized_preference";
- private static final String KEY_ALLOW_BACKGROUND_USAGE = "allow_background_usage";
+ private static final String PACKAGE_NAME = "com.android.app";
+ private static final String KEY_PREF_HEADER = "header_view";
+ private static final String KEY_FOOTER_PREFERENCE = "app_usage_footer_preference";
+ private static final String INITIATING_PACKAGE_NAME = "com.android.vending";
+ private int mTestMode;
private Context mContext;
private PowerBackgroundUsageDetail mFragment;
- private FooterPreference mFooterPreference;
- private MainSwitchPreference mMainSwitchPreference;
private MetricsFeatureProvider mMetricsFeatureProvider;
- private SelectorWithWidgetPreference mOptimizePreference;
- private SelectorWithWidgetPreference mUnrestrictedPreference;
private SettingsActivity mTestActivity;
+ private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private FragmentActivity mActivity;
@Mock private EntityHeaderController mEntityHeaderController;
- @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
- @Mock private LayoutPreference mHeaderPreference;
@Mock private ApplicationsState mState;
@Mock private Bundle mBundle;
@Mock private LoaderManager mLoaderManager;
@@ -120,21 +116,26 @@
@Mock private BatteryEntry mBatteryEntry;
@Mock private PackageManager mPackageManager;
@Mock private AppOpsManager mAppOpsManager;
- @Mock private CompoundButton mMockSwitch;
@Mock private InstallSourceInfo mInstallSourceInfo;
+ @Mock private LayoutPreference mLayoutPreference;
+ @Mock private FooterPreference mFooterPreference;
@Before
public void setUp() throws Exception {
mContext = spy(ApplicationProvider.getApplicationContext());
- when(mContext.getPackageName()).thenReturn("foo");
+ when(mContext.getPackageName()).thenReturn(PACKAGE_NAME);
when(mContext.getPackageManager()).thenReturn(mPackageManager);
when(mPackageManager.getInstallSourceInfo(anyString())).thenReturn(mInstallSourceInfo);
final FakeFeatureFactory fakeFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = fakeFeatureFactory.metricsFeatureProvider;
+ prepareTestBatteryOptimizationUtils();
mFragment = spy(new PowerBackgroundUsageDetail());
+ mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
mFragment.mLogStringBuilder = new StringBuilder();
+ doReturn(mLayoutPreference).when(mFragment).findPreference(KEY_PREF_HEADER);
+ doReturn(mFooterPreference).when(mFragment).findPreference(KEY_FOOTER_PREFERENCE);
doReturn(mContext).when(mFragment).getContext();
doReturn(mActivity).when(mFragment).getActivity();
doReturn(SUMMARY).when(mFragment).getString(anyInt());
@@ -169,9 +170,7 @@
when(mBatteryEntry.getLabel()).thenReturn(APP_LABEL);
mBatteryEntry.mIconId = ICON_ID;
- mFragment.mHeaderPreference = mHeaderPreference;
mFragment.mState = mState;
- mFragment.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
mAppEntry.info = mock(ApplicationInfo.class);
mTestActivity = spy(new SettingsActivity());
@@ -191,23 +190,12 @@
.when(mActivity)
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
doAnswer(callable).when(mActivity).startActivity(captor.capture());
-
- mFooterPreference = spy(new FooterPreference(mContext));
- mMainSwitchPreference = spy(new MainSwitchPreference(mContext));
- mMainSwitchPreference.setKey(KEY_ALLOW_BACKGROUND_USAGE);
- mOptimizePreference = spy(new SelectorWithWidgetPreference(mContext));
- mOptimizePreference.setKey(KEY_PREF_OPTIMIZED);
- mUnrestrictedPreference = spy(new SelectorWithWidgetPreference(mContext));
- mUnrestrictedPreference.setKey(KEY_PREF_UNRESTRICTED);
- mFragment.mFooterPreference = mFooterPreference;
- mFragment.mMainSwitchPreference = mMainSwitchPreference;
- mFragment.mOptimizePreference = mOptimizePreference;
- mFragment.mUnrestrictedPreference = mUnrestrictedPreference;
}
@After
public void reset() {
ShadowEntityHeaderController.reset();
+ ShadowHelpUtils.reset();
}
@Test
@@ -258,91 +246,64 @@
}
@Test
- public void initFooter_hasCorrectString() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
-
+ public void initFooter_setExpectedFooterContent() {
mFragment.initFooter();
- assertThat(mFooterPreference.getTitle().toString())
- .isEqualTo("Changing how an app uses your battery can affect its performance.");
+ verify(mFooterPreference)
+ .setTitle(mContext.getString(R.string.manager_battery_usage_footer));
+ verify(mFooterPreference).setLearnMoreAction(any());
+ verify(mFooterPreference)
+ .setLearnMoreText(mContext.getString(R.string.manager_battery_usage_link_a11y));
}
@Test
- public void onSwitchChanged_fromUnrestrictedModeSetDisabled_becomeRestrictedMode() {
- final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED;
- final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
- mFragment.mOptimizationMode = optimizedMode;
+ public void onPause_optimizationModeIsChanged_logPreference() throws Exception {
+ mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
+ when(mBatteryOptimizeUtils.getPackageName()).thenReturn(PACKAGE_NAME);
+ when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn(INITIATING_PACKAGE_NAME);
- mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ false);
-
- verify(mOptimizePreference).setEnabled(false);
- verify(mUnrestrictedPreference).setEnabled(false);
- verify(mFragment).onRadioButtonClicked(null);
- verify(mMainSwitchPreference).setChecked(false);
- assertThat(mFragment.getSelectedPreference()).isEqualTo(restrictedMode);
- verify(mBatteryOptimizeUtils).setAppUsageState(restrictedMode, Action.APPLY);
- }
-
- @Test
- public void onSwitchChanged_fromRestrictedModeSetEnabled_becomeOptimizedMode() {
- final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED;
- final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
- mFragment.mOptimizationMode = restrictedMode;
-
- mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ true);
-
- verify(mOptimizePreference).setEnabled(true);
- verify(mUnrestrictedPreference).setEnabled(true);
- verify(mFragment).onRadioButtonClicked(mOptimizePreference);
- verify(mMainSwitchPreference).setChecked(true);
- verify(mOptimizePreference).setChecked(true);
- assertThat(mFragment.getSelectedPreference()).isEqualTo(optimizedMode);
- verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY);
- }
-
- @Test
- public void onPause_optimizationModeChanged_logPreference() throws Exception {
- final String packageName = "testPackageName";
- final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED;
- final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
- mFragment.mOptimizationMode = restrictedMode;
- when(mBatteryOptimizeUtils.getPackageName()).thenReturn(packageName);
- when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn("com.android.vending");
-
- mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ true);
- verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY);
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(optimizedMode);
+ mTestMode = BatteryOptimizeUtils.MODE_UNRESTRICTED;
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .isEqualTo(BatteryOptimizeUtils.MODE_UNRESTRICTED);
mFragment.onPause();
TimeUnit.SECONDS.sleep(1);
verify(mMetricsFeatureProvider)
.action(
SettingsEnums.LEAVE_POWER_USAGE_MANAGE_BACKGROUND,
- SettingsEnums.ACTION_APP_BATTERY_USAGE_OPTIMIZED,
+ SettingsEnums.ACTION_APP_BATTERY_USAGE_UNRESTRICTED,
SettingsEnums.FUELGAUGE_POWER_USAGE_MANAGE_BACKGROUND,
- packageName,
+ PACKAGE_NAME,
/* consumed battery */ 0);
}
@Test
public void onPause_optimizationModeIsNotChanged_notInvokeLogging() throws Exception {
- final String packageName = "testPackageName";
- final int restrictedMode = BatteryOptimizeUtils.MODE_RESTRICTED;
- final int optimizedMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
- mFragment.mOptimizationMode = restrictedMode;
- when(mBatteryOptimizeUtils.getPackageName()).thenReturn(packageName);
- when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn("com.android.vending");
+ mFragment.mOptimizationMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
+ when(mBatteryOptimizeUtils.getPackageName()).thenReturn(PACKAGE_NAME);
+ when(mInstallSourceInfo.getInitiatingPackageName()).thenReturn(INITIATING_PACKAGE_NAME);
- mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ true);
- verify(mBatteryOptimizeUtils).setAppUsageState(optimizedMode, Action.APPLY);
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(optimizedMode);
- mFragment.onCheckedChanged(mMockSwitch, /* isChecked= */ false);
- verify(mBatteryOptimizeUtils).setAppUsageState(restrictedMode, Action.APPLY);
- when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(restrictedMode);
+ mTestMode = BatteryOptimizeUtils.MODE_UNRESTRICTED;
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .isEqualTo(BatteryOptimizeUtils.MODE_UNRESTRICTED);
+ mTestMode = BatteryOptimizeUtils.MODE_OPTIMIZED;
+ assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
+ .isEqualTo(BatteryOptimizeUtils.MODE_OPTIMIZED);
mFragment.onPause();
TimeUnit.SECONDS.sleep(1);
verifyNoInteractions(mMetricsFeatureProvider);
}
+
+ private void prepareTestBatteryOptimizationUtils() {
+ mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(mContext, UID, PACKAGE_NAME));
+ Answer<Void> setTestMode =
+ invocation -> {
+ mTestMode = invocation.getArgument(0);
+ return null;
+ };
+ doAnswer(setTestMode).when(mBatteryOptimizeUtils).setAppUsageState(anyInt(), any());
+ Answer<Integer> getTestMode = invocation -> mTestMode;
+ doAnswer(getTestMode).when(mBatteryOptimizeUtils).getAppOptimizationMode();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
deleted file mode 100644
index 0c6f7da..0000000
--- a/tests/robotests/src/com/android/settings/fuelgauge/UnrestrictedPreferenceControllerTest.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright (C) 2021 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-
-import com.android.settingslib.widget.SelectorWithWidgetPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class UnrestrictedPreferenceControllerTest {
- private static final int UID = 12345;
- private static final String PACKAGE_NAME = "com.android.app";
-
- private UnrestrictedPreferenceController mController;
- private SelectorWithWidgetPreference mPreference;
- private BatteryOptimizeUtils mBatteryOptimizeUtils;
-
- @Mock PackageManager mMockPackageManager;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
-
- Context context = spy(RuntimeEnvironment.application);
- BatteryUtils.getInstance(context).reset();
- doReturn(UID)
- .when(mMockPackageManager)
- .getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
-
- mController = new UnrestrictedPreferenceController(context, UID, PACKAGE_NAME);
- mPreference = new SelectorWithWidgetPreference(RuntimeEnvironment.application);
- mBatteryOptimizeUtils = spy(new BatteryOptimizeUtils(context, UID, PACKAGE_NAME));
- mController.mBatteryOptimizeUtils = mBatteryOptimizeUtils;
- }
-
- @Test
- public void testUpdateState_isValidPackage_prefEnabled() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
-
- mController.updateState(mPreference);
-
- assertThat(mBatteryOptimizeUtils.isOptimizeModeMutable()).isTrue();
- assertThat(mPreference.isEnabled()).isTrue();
- }
-
- @Test
- public void testUpdateState_invalidPackage_prefDisabled() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(true);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(false);
-
- mController.updateState(mPreference);
-
- assertThat(mBatteryOptimizeUtils.isOptimizeModeMutable()).isFalse();
- assertThat(mPreference.isEnabled()).isFalse();
- }
-
- @Test
- public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
- when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
- when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isEnabled()).isFalse();
- assertThat(mPreference.isChecked()).isFalse();
- }
-
- @Test
- public void testUpdateState_isUnrestrictedStates_prefChecked() {
- when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isEnabled()).isTrue();
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void testUpdateState_prefUnchecked() {
- when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
- when(mBatteryOptimizeUtils.getAppOptimizationMode())
- .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isEnabled()).isTrue();
- assertThat(mPreference.isChecked()).isFalse();
- }
-
- @Test
- public void testHandlePreferenceTreeClick_samePrefKey_verifyAction() {
- mPreference.setKey(mController.KEY_UNRESTRICTED_PREF);
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(mController.handlePreferenceTreeClick(mPreference)).isTrue();
- }
-
- @Test
- public void testHandlePreferenceTreeClick_incorrectPrefKey_noAction() {
- assertThat(mController.handlePreferenceTreeClick(mPreference)).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
index 2f20b42..1fed13f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
@@ -110,7 +110,6 @@
mDataProcessManager =
new DataProcessManager(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* rawStartTimestamp= */ 0L,
@@ -131,7 +130,6 @@
final DataProcessManager dataProcessManager =
new DataProcessManager(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* callbackFunction= */ null);
assertThat(dataProcessManager.getShowScreenOnTime()).isFalse();
@@ -257,7 +255,6 @@
final DataProcessManager dataProcessManager =
new DataProcessManager(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* rawStartTimestamp= */ 2L,
@@ -349,7 +346,6 @@
assertThat(
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null))
@@ -357,7 +353,6 @@
assertThat(
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ true,
/* asyncResponseDelegate= */ null))
@@ -379,7 +374,6 @@
final BatteryLevelData resultData =
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null);
@@ -408,7 +402,6 @@
final BatteryLevelData resultData =
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreenTest.kt b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreenTest.kt
new file mode 100644
index 0000000..80a6b2e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryScreenTest.kt
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.fuelgauge.batteryusage
+
+import android.content.ContextWrapper
+import android.content.res.Resources
+import android.platform.test.annotations.DisableFlags
+import android.platform.test.annotations.EnableFlags
+import androidx.fragment.app.testing.FragmentScenario
+import androidx.preference.PreferenceFragmentCompat
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settings.testutils.shadow.ShadowUtils
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.After
+import org.junit.Test
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.stub
+import org.robolectric.annotation.Config
+
+@Config(shadows = [ShadowUtils::class])
+class PowerUsageSummaryScreenTest : CatalystScreenTestCase() {
+
+ override val preferenceScreenCreator = PowerUsageSummaryScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_POWER_USAGE_SUMMARY_SCREEN
+
+ private val mockResources = mock<Resources>()
+
+ private val context =
+ object : ContextWrapper(appContext) {
+ override fun getResources(): Resources = mockResources
+ }
+
+ @After
+ fun tearDown() {
+ ShadowUtils.reset()
+ }
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(PowerUsageSummaryScreen.KEY)
+ }
+
+ @Test
+ fun isAvailable_configTrue_shouldReturnTrue() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn true }
+
+ assertThat(preferenceScreenCreator.isAvailable(context)).isTrue()
+ }
+
+ @Test
+ fun isAvailable_configFalse_shouldReturnFalse() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn false }
+
+ assertThat(preferenceScreenCreator.isAvailable(context)).isFalse()
+ }
+
+ @Test
+ @EnableFlags(Flags.FLAG_HOMEPAGE_REVAMP)
+ fun getIcon_whenHomePageRevampFlagOn() {
+ assertThat(preferenceScreenCreator.getIcon(context))
+ .isEqualTo(R.drawable.ic_settings_battery_filled)
+ }
+
+ @Test
+ @DisableFlags(Flags.FLAG_HOMEPAGE_REVAMP)
+ fun getIcon_whenHomePageRevampFlagOff() {
+ assertThat(preferenceScreenCreator.getIcon(context))
+ .isEqualTo(R.drawable.ic_settings_battery_white)
+ }
+
+ override fun migration() {
+ ShadowUtils.setIsBatteryPresent(false)
+
+ super.migration()
+ }
+
+ override fun launchFragmentScenario(fragmentClass: Class<PreferenceFragmentCompat>) =
+ FragmentScenario.launch(
+ fragmentClass,
+ themeResId = R.style.Theme_CollapsingToolbar_Settings,
+ )
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
index 19d5e59..0473228 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/PowerUsageSummaryTest.java
@@ -37,13 +37,13 @@
import android.os.Bundle;
import android.provider.Settings;
+import androidx.fragment.app.FragmentActivity;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
-import com.android.settings.SettingsActivity;
import com.android.settings.fuelgauge.BatteryBroadcastReceiver;
import com.android.settings.fuelgauge.BatteryInfo;
import com.android.settings.fuelgauge.BatteryUtils;
@@ -82,7 +82,7 @@
sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
}
- @Mock private SettingsActivity mSettingsActivity;
+ @Mock private FragmentActivity mActivity;
@Mock private LoaderManager mLoaderManager;
@Mock private Loader<BatteryTip> mBatteryTipLoader;
@Mock private Loader<BatteryInfo> mBatteryInfoLoader;
@@ -106,7 +106,7 @@
mFragment = spy(new TestFragment(mRealContext, mLoaderManager));
mFragment.initFeatureProvider();
doNothing().when(mFragment).restartBatteryStatsLoader(anyInt());
- when(mFragment.getActivity()).thenReturn(mSettingsActivity);
+ when(mFragment.getActivity()).thenReturn(mActivity);
when(mFeatureFactory.powerUsageFeatureProvider.getAdditionalBatteryInfoIntent())
.thenReturn(sAdditionalBatteryInfoIntent);
mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext));
diff --git a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysControllerTest.java
index d16f697..b385b2f 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityBounceKeysControllerTest.java
@@ -57,7 +57,7 @@
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
- private static final String PREFERENCE_KEY = "accessibility_bounce_keys";
+ private static final String PREFERENCE_KEY = "keyboard_a11y_page_bounce_keys";
@Mock
private Preference mPreference;
private Context mContext;
@@ -116,8 +116,8 @@
public void handlePreferenceTreeClick_performClickOn200_updatesBounceKeysThreshold() {
mKeyboardAccessibilityBounceKeysController.handlePreferenceTreeClick(mPreference);
AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
- RadioGroup radioGroup = alertDialog.findViewById(R.id.bounce_key_value_group);
- radioGroup.check(R.id.bounce_key_value_200);
+ RadioGroup radioGroup = alertDialog.findViewById(R.id.input_setting_keys_value_group);
+ radioGroup.check(R.id.input_setting_keys_value_200);
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
ShadowLooper.idleMainLooper();
diff --git a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysControllerTest.java
index 5922497..fdb4ab9 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityMouseKeysControllerTest.java
@@ -50,7 +50,7 @@
mContext = RuntimeEnvironment.application;
mKeyboardAccessibilityMouseKeysController = new KeyboardAccessibilityMouseKeysController(
mContext,
- "accessibility_mouse_keys");
+ "keyboard_a11y_page_mouse_keys");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysControllerTest.java
index 5f6908a..9f82b75 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilitySlowKeysControllerTest.java
@@ -18,39 +18,59 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
import android.hardware.input.InputSettings;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
+import android.widget.RadioGroup;
+import androidx.appcompat.app.AlertDialog;
+import androidx.preference.Preference;
+
+import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.keyboard.Flags;
+import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowLooper;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class,
+ ShadowAlertDialogCompat.class,
})
public class KeyboardAccessibilitySlowKeysControllerTest {
@Rule
public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+ @Rule
+ public MockitoRule mMockitoRule = MockitoJUnit.rule();
+ private static final String PREFERENCE_KEY = "keyboard_a11y_page_slow_keys";
+ @Mock
+ private Preference mPreference;
private Context mContext;
private KeyboardAccessibilitySlowKeysController mKeyboardAccessibilitySlowKeysController;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
+ mContext.setTheme(androidx.appcompat.R.style.Theme_AppCompat);
mKeyboardAccessibilitySlowKeysController = new KeyboardAccessibilitySlowKeysController(
mContext,
- "accessibility_slow_keys");
+ PREFERENCE_KEY);
+ when(mPreference.getKey()).thenReturn(PREFERENCE_KEY);
}
@Test
@@ -82,4 +102,28 @@
assertThat(isEnabled).isFalse();
}
+
+ @Test
+ public void handlePreferenceTreeClick_dialogShows() {
+ mKeyboardAccessibilitySlowKeysController.handlePreferenceTreeClick(mPreference);
+
+ AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+
+ assertThat(alertDialog.isShowing()).isTrue();
+ }
+
+ @Test
+ public void handlePreferenceTreeClick_performClickOn200_updatesSlowKeysThreshold() {
+ mKeyboardAccessibilitySlowKeysController.handlePreferenceTreeClick(mPreference);
+ AlertDialog alertDialog = ShadowAlertDialogCompat.getLatestAlertDialog();
+ RadioGroup radioGroup = alertDialog.findViewById(R.id.input_setting_keys_value_group);
+ radioGroup.check(R.id.input_setting_keys_value_200);
+
+ alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).performClick();
+ ShadowLooper.idleMainLooper();
+
+ assertThat(alertDialog.isShowing()).isFalse();
+ int threshold = InputSettings.getAccessibilitySlowKeysThreshold(mContext);
+ assertThat(threshold).isEqualTo(200);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityStickyKeysControllerTest.java b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityStickyKeysControllerTest.java
index 06cb558..4631f57 100644
--- a/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityStickyKeysControllerTest.java
+++ b/tests/robotests/src/com/android/settings/inputmethod/KeyboardAccessibilityStickyKeysControllerTest.java
@@ -50,7 +50,7 @@
mContext = RuntimeEnvironment.application;
mKeyboardAccessibilityStickyKeysController = new KeyboardAccessibilityStickyKeysController(
mContext,
- "accessibility_sticky_keys");
+ "keyboard_a11y_page_sticky_keys");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/location/LocationScreenTest.kt b/tests/robotests/src/com/android/settings/location/LocationScreenTest.kt
new file mode 100644
index 0000000..1d1696d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/location/LocationScreenTest.kt
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.location
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.location.LocationManager
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.R
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.stub
+
+@RunWith(AndroidJUnit4::class)
+class LocationScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = LocationScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_LOCATION_SETTINGS
+
+ private val mockLocationManager = mock<LocationManager>()
+
+ private val context =
+ object : ContextWrapper(appContext) {
+ override fun getSystemService(name: String): Any =
+ when (name) {
+ Context.LOCATION_SERVICE -> mockLocationManager
+ else -> super.getSystemService(name)
+ }
+ }
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(LocationScreen.KEY)
+ }
+
+ @Test
+ fun getSummary_enableLocation_shouldReturnLoading() {
+ mockLocationManager.stub { on { isLocationEnabled } doReturn true }
+
+ assertThat(preferenceScreenCreator.getSummary(context)).isEqualTo(
+ context.getString(R.string.location_settings_loading_app_permission_stats))
+ }
+
+ @Test
+ fun getSummary_disableLocation_shouldReturnLocationOff() {
+ mockLocationManager.stub { on { isLocationEnabled } doReturn false }
+
+ assertThat(preferenceScreenCreator.getSummary(context)).isEqualTo(
+ context.getString(R.string.location_settings_summary_location_off))
+ }
+
+ override fun migration() {
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt
new file mode 100644
index 0000000..f575fe7
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityScreenTest.kt
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class AdaptiveConnectivityScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = AdaptiveConnectivityScreen()
+ override val flagName
+ get() = Flags.FLAG_CATALYST_ADAPTIVE_CONNECTIVITY
+
+ override fun migration() {}
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(AdaptiveConnectivityScreen.KEY)
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceControllerTest.java
index c95797f..02d2338 100644
--- a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceControllerTest.java
@@ -36,10 +36,11 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+// LINT.IfChange
@RunWith(RobolectricTestRunner.class)
public class AdaptiveConnectivityTogglePreferenceControllerTest {
- private static final String PREF_KEY = "adaptive_connectivity";
+ private static final String PREF_KEY = "adaptive_connectivity_enabled";
@Mock(answer = RETURNS_DEEP_STUBS)
private Context mContext;
@@ -87,3 +88,4 @@
verify(mWifiManager).setWifiScoringEnabled(false);
}
}
+// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceTest.kt)
diff --git a/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt
new file mode 100644
index 0000000..913adf6
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/AdaptiveConnectivityTogglePreferenceTest.kt
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network
+
+import android.content.Context
+import android.net.wifi.WifiManager
+import android.platform.test.flag.junit.SetFlagsRule
+import android.provider.Settings
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settingslib.widget.MainSwitchPreference
+import com.google.common.truth.Truth.assertThat
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.atLeastOnce
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.verify
+import org.mockito.kotlin.whenever
+
+// LINT.IfChange
+@RunWith(AndroidJUnit4::class)
+class AdaptiveConnectivityTogglePreferenceTest {
+ @get:Rule
+ val setFlagsRule = SetFlagsRule()
+
+ private val appContext: Context = spy(ApplicationProvider.getApplicationContext()){}
+
+ private val mockWifiManager: WifiManager = mock()
+
+ private val adaptiveConnectivityTogglePreference = AdaptiveConnectivityTogglePreference()
+
+ @Before
+ fun setUp() {
+ whenever(appContext.getSystemService(WifiManager::class.java)).thenReturn(mockWifiManager)
+ }
+
+ @Test
+ fun setChecked_withTrue_shouldUpdateSetting() {
+ Settings.Secure.putInt(
+ appContext.contentResolver,
+ Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 0
+ )
+
+ val mainSwitchPreference = getMainSwitchPreferenceCompat().apply { performClick() }
+
+ assertThat(mainSwitchPreference.isChecked).isTrue()
+ verify(mockWifiManager, atLeastOnce()).setWifiScoringEnabled(true)
+ }
+
+ @Test
+ fun setChecked_withFalse_shouldUpdateSetting() {
+ Settings.Secure.putInt(
+ appContext.contentResolver,
+ Settings.Secure.ADAPTIVE_CONNECTIVITY_ENABLED, 1
+ )
+
+ val mainSwitchPreference = getMainSwitchPreferenceCompat().apply { performClick() }
+
+ assertThat(mainSwitchPreference.isChecked).isFalse()
+ verify(mockWifiManager).setWifiScoringEnabled(false)
+ }
+
+ private fun getMainSwitchPreferenceCompat(): MainSwitchPreference =
+ adaptiveConnectivityTogglePreference.run {
+ val preference = createWidget(appContext)
+ bind(preference, this)
+ preference as MainSwitchPreference
+ }
+}
+// LINT.ThenChange(AdaptiveConnectivityTogglePreferenceControllerTest.java)
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkListScreenTest.kt b/tests/robotests/src/com/android/settings/network/MobileNetworkListScreenTest.kt
new file mode 100644
index 0000000..1d7a1d9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkListScreenTest.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.network
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@RunWith(AndroidJUnit4::class)
+class MobileNetworkListScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = MobileNetworkListScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_MOBILE_NETWORK_LIST
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(MobileNetworkListScreen.KEY)
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt b/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt
new file mode 100644
index 0000000..8318e09
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/NetworkDashboardScreenTest.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.network
+
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settings.testutils.shadow.ShadowConnectivityManager
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.robolectric.annotation.Config
+
+@RunWith(AndroidJUnit4::class)
+@Config(shadows = [ShadowConnectivityManager::class])
+class NetworkDashboardScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = NetworkDashboardScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_NETWORK_PROVIDER_AND_INTERNET_SCREEN
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(NetworkDashboardScreen.KEY)
+ }
+
+ override fun migration() {
+ // Avoid thread hanging when TetheringManager.isTetheringSupported
+ ShadowConnectivityManager.getShadow().setTetheringSupported(true)
+
+ super.migration()
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderScreenTest.kt b/tests/robotests/src/com/android/settings/network/NetworkProviderScreenTest.kt
new file mode 100644
index 0000000..d8888c5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderScreenTest.kt
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.network
+
+import android.content.ContextWrapper
+import android.content.res.Resources
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.stub
+
+@RunWith(AndroidJUnit4::class)
+class NetworkProviderScreenTest : CatalystScreenTestCase() {
+ override val preferenceScreenCreator = NetworkProviderScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_INTERNET_SETTINGS
+
+ private val mockResources = mock<Resources>()
+
+ private val context =
+ object : ContextWrapper(appContext) {
+ override fun getResources(): Resources = mockResources
+ }
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(NetworkProviderScreen.KEY)
+ }
+
+ @Test
+ fun isAvailable_showInternetSettings_shouldReturnTrue() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn true }
+
+ assertThat(preferenceScreenCreator.isAvailable(context)).isTrue()
+ }
+
+ @Test
+ fun isAvailable_notShowInternetSettings_shouldReturnFalse() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn false }
+
+ assertThat(preferenceScreenCreator.isAvailable(context)).isFalse()
+ }
+
+ override fun migration() {}
+}
diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
index 400f73f..df399d7 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java
@@ -70,6 +70,7 @@
import com.android.settings.AirplaneModeEnabler;
import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFeatureProvider;
import com.android.settings.datausage.DataUsagePreference;
import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
import com.android.settings.testutils.shadow.ShadowFragment;
@@ -98,6 +99,7 @@
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.shadows.ShadowToast;
+import org.robolectric.util.ReflectionHelpers;
import java.util.List;
@@ -190,6 +192,9 @@
.when(mFirstWifiEntryPreferenceCategory).getKey();
mNetworkProviderSettings.mFirstWifiEntryPreferenceCategory =
mFirstWifiEntryPreferenceCategory;
+
+ ReflectionHelpers.setField(mNetworkProviderSettings, "mDashboardFeatureProvider",
+ mock(DashboardFeatureProvider.class));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java
deleted file mode 100644
index d8895d5..0000000
--- a/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.network.apn;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyInt;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.PersistableBundle;
-import android.os.UserManager;
-import android.telephony.CarrierConfigManager;
-import android.view.KeyEvent;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.View;
-
-import androidx.fragment.app.FragmentActivity;
-import androidx.preference.EditTextPreference;
-import androidx.preference.ListPreference;
-import androidx.preference.MultiSelectListPreference;
-import androidx.preference.SwitchPreference;
-
-import com.android.settings.R;
-import com.android.settings.network.ProxySubscriptionManager;
-import com.android.settings.network.apn.ApnEditor.ApnData;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-@RunWith(RobolectricTestRunner.class)
-@Config(shadows = {
- com.android.settings.testutils.shadow.ShadowFragment.class,
-})
-public class ApnEditorTest {
-
- private static final Object[] APN_DATA = {
- 0, /* ID */
- "apn_name" /* apn name */,
- "apn.com" /* apn */,
- "" /* proxy */,
- "" /* port */,
- "" /* username */,
- "" /* server */,
- "" /* password */,
- "" /* MMSC */,
- "123" /* MCC */,
- "456" /* MNC */,
- "123456" /* operator numeric */,
- "" /* MMS proxy */,
- "" /* MMS port */,
- 0 /* Authentication type */,
- "default,supl,ia" /* APN type */,
- "IP" /* APN protocol */,
- 1 /* APN enable/disable */,
- 0 /* Bearer */,
- 0 /* Bearer BITMASK*/,
- "IPV6" /* APN roaming protocol */,
- "None" /* MVNO type */,
- "", /* MVNO value */
- };
-
- private static final int CURSOR_INTEGER_INDEX = 0;
- private static final int CURSOR_STRING_INDEX = 1;
-
- private static final Uri APN_URI = Uri.parse("Apn://row/1");
-
- @Mock
- private Cursor mCursor;
-
- @Mock
- private FragmentActivity mActivity;
- @Mock
- private UserManager mUserManager;
- @Mock
- private ProxySubscriptionManager mProxySubscriptionMgr;
- @Mock
- private CarrierConfigManager mCarrierConfigManager;
- @Captor
- private ArgumentCaptor<Uri> mUriCaptor;
-
- private ApnEditor mApnEditorUT;
- private Context mContext;
- private Resources mResources;
- private PersistableBundle mBundle = new PersistableBundle();
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = spy(RuntimeEnvironment.application);
-
- mResources = mContext.getResources();
- mApnEditorUT = spy(new ApnEditor());
-
- doReturn(mActivity).when(mApnEditorUT).getActivity();
- doReturn(mResources).when(mApnEditorUT).getResources();
- doNothing().when(mApnEditorUT).finish();
- doNothing().when(mApnEditorUT).showError();
- doReturn(mContext).when(mApnEditorUT).getContext();
- doReturn(mContext.getTheme()).when(mActivity).getTheme();
- doReturn(mContext.getContentResolver()).when(mActivity).getContentResolver();
-
- doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
- doReturn(true).when(mUserManager).isAdminUser();
- doReturn(false).when(mUserManager)
- .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
- doReturn(mCarrierConfigManager).when(mContext)
- .getSystemService(Context.CARRIER_CONFIG_SERVICE);
- doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
-
- setMockPreference(mContext);
- mApnEditorUT.mApnData = new FakeApnData(APN_DATA);
- mApnEditorUT.sNotSet = "Not Set";
- }
-
- @Test
- public void testApnEditor_doesNotUseManagedQuery() {
- mApnEditorUT.getApnDataFromUri(Mockito.mock(Uri.class));
-
- verify(mActivity, never()).managedQuery(
- any(Uri.class),
- any(String[].class),
- any(String.class),
- any(String.class));
-
- verify(mActivity, never()).managedQuery(
- any(Uri.class),
- any(String[].class),
- any(String.class),
- any(String[].class),
- any(String.class));
- }
-
- @Test
- public void getApnDataFromUri_emptyCursor_returnsNull() {
- var mockContentResolver = mock(ContentResolver.class);
- var mockCursor = mock(Cursor.class);
- doReturn(mockContentResolver).when(mActivity).getContentResolver();
- when(mockContentResolver.query(any(), any(), any(), any(), any())).thenReturn(mockCursor);
- when(mockCursor.moveToFirst()).thenReturn(false);
-
- var apnData = mApnEditorUT.getApnDataFromUri(mock(Uri.class));
-
- assertThat(apnData).isNull();
- }
-
- @Test
- public void testSetStringValue_valueChanged_shouldSetValue() {
- // GIVEN an APN value which is different than the APN value in database
- final String apnKey = "apn";
- final String apnValue = "testing.com";
- final ContentValues cv = new ContentValues();
-
- // WHEN try to check and set the apn value
- final boolean isDiff = mApnEditorUT.setStringValueAndCheckIfDiff(
- cv, apnKey, apnValue, false /* assumeDiff */, ApnEditor.APN_INDEX);
-
- // THEN the APN value is different than the one in database, and it has been stored in the
- // given ContentValues
- assertThat(isDiff).isTrue();
- assertThat(apnValue).isEqualTo(cv.getAsString(apnKey));
- }
-
- @Test
- public void testSetStringValue_valueNotChanged_shouldNotSetValue() {
- // GIVEN an APN value which is same as the APN value in database
- final String apnKey = "apn";
- final String apnValue = (String) APN_DATA[ApnEditor.APN_INDEX];
- final ContentValues cv = new ContentValues();
-
- // WHEN try to check and set the apn value
- final boolean isDiff = mApnEditorUT.setStringValueAndCheckIfDiff(
- cv, apnKey, apnValue, false /* assumeDiff */, ApnEditor.APN_INDEX);
-
- // THEN the APN value is same as the one in database, and the new APN value is not stored
- // in the given ContentValues
- assertThat(isDiff).isFalse();
- assertThat(cv.get(apnKey)).isNull();
- }
-
- @Test
- public void testSetStringValue_nullValue_shouldNotSetValue_shouldNotSetValue() {
- // GIVEN a null APN value
- final String apnKey = "apn";
- final String apnValue = null;
- final ContentValues cv = new ContentValues();
-
- // WHEN try to check and set the apn value
- final boolean isDiff = mApnEditorUT.setStringValueAndCheckIfDiff(
- cv, apnKey, apnValue, false /* assumeDiff */, ApnEditor.APN_INDEX);
-
- // THEN the APN value is different than the one in database, but the null value is not
- // stored in the given ContentValues
- assertThat(isDiff).isTrue();
- assertThat(cv.get(apnKey)).isNull();
- }
-
- @Test
- public void testSetIntValue_valueChanged_shouldSetValue() {
- // GIVEN a value indicated whether the apn is enabled, and it's different than the value in
- // the database
- final String apnEnabledKey = "apn_enabled";
- final int apnEnabledValue = 0;
- final ContentValues cv = new ContentValues();
-
- // WHEN try to check and set the apn enabled
- final boolean isDiff = mApnEditorUT.setIntValueAndCheckIfDiff(
- cv,
- apnEnabledKey,
- apnEnabledValue,
- false /* assumeDiff */,
- ApnEditor.CARRIER_ENABLED_INDEX);
-
- // THEN the apn enabled field is different than the one in database, and it has been stored
- // in the given ContentValues
- assertThat(isDiff).isTrue();
- assertThat(cv.getAsInteger(apnEnabledKey)).isEqualTo(apnEnabledValue);
- }
-
- @Test
- public void testSetIntValue_valueNotChanged_shouldNotSetValue() {
- // GIVEN a value indicated whether the apn is enabled, and it's same as the one in the
- // database
- final String apnEnabledKey = "apn_enabled";
- final int apnEnabledValue = (int) APN_DATA[ApnEditor.CARRIER_ENABLED_INDEX];
- final ContentValues cv = new ContentValues();
-
- // WHEN try to check and set the apn enabled
- final boolean isDiff = mApnEditorUT.setIntValueAndCheckIfDiff(
- cv,
- apnEnabledKey,
- apnEnabledValue,
- false /* assumeDiff */,
- ApnEditor.CARRIER_ENABLED_INDEX);
-
- // THEN the apn enabled field is same as the one in the database, and the filed is not
- // stored in the given ContentValues
- assertThat(isDiff).isFalse();
- assertThat(cv.get(apnEnabledKey)).isNull();
- }
-
- @Test
- public void testValidateApnData_validData_shouldReturnNull() {
- // GIVEN a valid apn data
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // WHEN validate the apn data
- final String errMsg = mApnEditorUT.validateApnData();
-
- // THEN the error message should be null
- assertThat(errMsg).isNull();
- }
-
- @Test
- public void testValidateApn_apnNameNotSet_shouldReturnErrorMessage() {
- // GIVEN a apn data without the apn name
- mApnEditorUT.mApnData.mData[ApnEditor.NAME_INDEX] = "";
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // THEN validate the apn data
- final String errMsg = mApnEditorUT.validateApnData();
-
- // THEN the error message indicated the apn name not set is returned
- assertThat(errMsg).isEqualTo(mResources.getString(R.string.error_name_empty));
- }
-
- @Test
- public void testValidateApnData_apnNotSet_shouldReturnErrorMessage() {
- // GIVEN a apn data without the apn
- mApnEditorUT.mApnData.mData[ApnEditor.APN_INDEX] = "";
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // THEN validate the apn data
- final String errMsg = mApnEditorUT.validateApnData();
-
- // THEN the error message indicated the apn not set is returned
- assertThat(errMsg).isEqualTo(mResources.getString(R.string.error_apn_empty));
- }
-
- @Test
- public void testValidateApnData_mccInvalid_shouldReturnErrorMessage() {
- // The length of the mcc should be 3
- mApnEditorUT.mApnData.mData[ApnEditor.MCC_INDEX] = "1324";
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // WHEN validate the apn data
- final String errMsg = mApnEditorUT.validateApnData();
-
- // THEN the error message indicated the mcc invalid is returned
- assertThat(errMsg).isEqualTo(mResources.getString(R.string.error_mcc_not3));
- }
-
- @Test
- public void testValidateApnData_mncInvalid_shouldReturnErrorMessage() {
- // GIVEN an apn data with invalid mnc
- // The length of the mnc should be 2 or 3
- mApnEditorUT.mApnData.mData[ApnEditor.MNC_INDEX] = "1324";
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // WHEN validate the apn data
- final String errMsg = mApnEditorUT.validateApnData();
-
- // THEN the error message indicated the mnc invalid is returned
- assertThat(errMsg).isEqualTo(mResources.getString(R.string.error_mnc_not23));
- }
-
- @Test
- public void testSaveApnData_pressBackButtonWithValidApnData_shouldSaveApnData() {
- // GIVEN a valid apn data
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // WHEN press the back button
- final KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK);
- mApnEditorUT.onKey(new View(mContext), KeyEvent.KEYCODE_BACK, event);
-
- // THEN the apn data is saved and the apn editor is closed
- verify(mApnEditorUT).validateAndSaveApnData();
- verify(mApnEditorUT).finish();
- }
-
- @Test
- public void testSaveApnData_pressSaveButtonWithValidApnData_shouldSaveApnData() {
- // GIVEN a valid apn data
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // WHEN press the save button
- MenuItem item = Mockito.mock(MenuItem.class);
- // Menu.FIRST + 1 indicated the SAVE option in ApnEditor
- doReturn(Menu.FIRST + 1).when(item).getItemId();
- mApnEditorUT.onOptionsItemSelected(item);
-
- // THEN the apn data is saved and the apn editor is closed
- verify(mApnEditorUT).validateAndSaveApnData();
- verify(mApnEditorUT).finish();
- }
-
- @Test
- public void testSaveApnData_apnDataInvalid_shouldNotSaveApnData() {
- // GIVEN an invalid apn data
- // The valid apn data should contains a non-empty apn name
- mApnEditorUT.mApnData.mData[ApnEditor.NAME_INDEX] = "";
- mApnEditorUT.fillUI(true /* firstTime */);
-
- // WHEN press the save button
- final MenuItem item = Mockito.mock(MenuItem.class);
- // Menu.FIRST + 1 indicated the SAVE option in ApnEditor
- doReturn(Menu.FIRST + 1).when(item).getItemId();
- mApnEditorUT.onOptionsItemSelected(item);
-
- // THEN the error dialog is shown
- verify(mApnEditorUT).validateAndSaveApnData();
- verify(mApnEditorUT).showError();
- }
-
- @Test
- public void testDeleteApnData_shouldDeleteData() {
- // GIVEN a valid apn data correspond a row in database
- final Uri apnUri = Uri.parse("content://telephony/carriers/1");
- mApnEditorUT.mApnData = new FakeApnData(APN_DATA, apnUri);
- mApnEditorUT.fillUI(true /* firstTime */);
- ContentResolver mockContentResolver = Mockito.mock(ContentResolver.class);
- doReturn(mockContentResolver).when(mActivity).getContentResolver();
-
- // WHEN press the save button
- final MenuItem item = Mockito.mock(MenuItem.class);
- // Menu.FIRST indicated the DELETE option in ApnEditor
- doReturn(Menu.FIRST).when(item).getItemId();
- mApnEditorUT.onOptionsItemSelected(item);
-
- // THEN the apn data is deleted and the apn editor is closed
- verify(mockContentResolver).delete(mUriCaptor.capture(), any(), any());
- assertThat(apnUri).isEqualTo(mUriCaptor.getValue());
- verify(mApnEditorUT).finish();
- }
-
- @Test
- public void testDeleteApnData_shouldNotPresentMenuWhenNotSupportAdding() {
- mBundle.putBoolean(CarrierConfigManager.KEY_ALLOW_ADDING_APNS_BOOL, false);
-
- MenuItem item = Mockito.mock(MenuItem.class);
- Menu menu = Mockito.mock(Menu.class);
- doReturn(item).when(menu).add(anyInt(), anyInt(), anyInt(), anyInt());
-
- mApnEditorUT.getCarrierCustomizedConfig(mContext);
- mApnEditorUT.onCreateOptionsMenu(menu, null);
-
- verify(menu, times(0)).add(anyInt(), eq(ApnEditor.MENU_DELETE), anyInt(), anyInt());
- }
-
- @Test(expected = ClassCastException.class)
- public void testApnData_invalidIntegerType_throwsInvalidTypeException() {
- // GIVEN a ApnData constructed from cursor
- initCursor();
- final ApnData data = new ApnData(APN_URI, mCursor);
-
- // WHEN get a string from an integer column
- // THEN the InvalidTypeException is threw
- data.getString(CURSOR_INTEGER_INDEX);
- }
-
- @Test(expected = ClassCastException.class)
- public void testApnData_invalidStringType_throwsInvalidTypeException() {
- // GIVEN a ApnData constructed from cursor
- initCursor();
- final ApnData data = new ApnData(APN_URI, mCursor);
-
- // WHEN get a integer from a string column
- // THEN the InvalidTypeException is threw
- data.getInteger(CURSOR_STRING_INDEX);
- }
-
- @Test
- public void testApnData_validIntegerType_returnCorrectValue() {
- // GIVEN a ApnData constructed from cursor
- initCursor();
- final ApnData data = new ApnData(APN_URI, mCursor);
-
- // WHEN get integer from an integer column
- final int val = data.getInteger(CURSOR_INTEGER_INDEX);
-
- // THEN the integer is returned correctly
- assertThat(val).isEqualTo(mCursor.getInt(CURSOR_INTEGER_INDEX));
- }
-
- @Test
- public void testApnData_validStringType_returnCorrectValue() {
- // GIVEN a ApnData constructed from cursor
- initCursor();
- final ApnData data = new ApnData(APN_URI, mCursor);
-
- // WHEN get string from a string column
- final String str = data.getString(CURSOR_STRING_INDEX);
-
- // THEN the integer is returned correctly
- assertThat(str).isEqualTo(mCursor.getString(CURSOR_STRING_INDEX));
- }
-
- @Test
- public void testApnData_nullValueColumn_returnNull() {
- // GIVEN a empty ApnData
- final ApnData data = new ApnData(3);
-
- // WHEN get string value from a null column
- final String str = data.getString(0);
-
- // THEN the null value is returned
- assertThat(str).isNull();
- }
-
- @Test
- public void formatInteger_shouldParseString() {
- assertThat(ApnEditor.formatInteger("42")).isEqualTo("42");
- assertThat(ApnEditor.formatInteger("01")).isEqualTo("01");
- assertThat(ApnEditor.formatInteger("001")).isEqualTo("001");
- }
-
- @Test
- public void formatInteger_shouldIgnoreNonIntegers() {
- assertThat(ApnEditor.formatInteger("not an int")).isEqualTo("not an int");
- }
-
- @Test
- public void onCreate_notAdminUser_shouldFinish() {
- doReturn(false).when(mUserManager).isAdminUser();
-
- mApnEditorUT.onCreate(null);
-
- verify(mApnEditorUT).finish();
- }
-
- @Test
- public void onCreate_hasUserRestriction_shouldFinish() {
- doReturn(true).when(mUserManager)
- .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
-
- mApnEditorUT.onCreate(null);
-
- verify(mApnEditorUT).finish();
- }
-
- @Test
- public void onCreate_noAction_shouldFinishAndNoCrash() {
- ProxySubscriptionManager proxySubscriptionMgr = mock(ProxySubscriptionManager.class);
- mApnEditorUT.mProxySubscriptionMgr = proxySubscriptionMgr;
- doReturn(new Intent()).when(mActivity).getIntent();
- doNothing().when(mApnEditorUT).addPreferencesFromResource(anyInt());
-
- mApnEditorUT.onCreate(null);
-
- verify(mApnEditorUT).finish();
- }
-
- @Test
- public void testOnViewStateRestored_customizedValueWithoutDefault_shouldShowCustomized() {
- mApnEditorUT.mDefaultApnProtocol = "IP";
- mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = null;
- mApnEditorUT.mProtocol.setEntryValues(new CharSequence[]{"IP", "IPV6", "IPV4V6"});
-
- mApnEditorUT.onViewStateRestored(null);
-
- assertThat(mApnEditorUT.mProtocol.getSummary()).isEqualTo("IPv4");
- }
-
- @Test
- public void testOnViewStateRestored_customizedValueWithDefault_shouldShowDefault() {
- mApnEditorUT.mDefaultApnProtocol = "IP";
- mApnEditorUT.mApnData.mData[ApnEditor.PROTOCOL_INDEX] = "IPV6";
- mApnEditorUT.mProtocol.setEntryValues(new CharSequence[]{"IP", "IPV6", "IPV4V6"});
-
- mApnEditorUT.onViewStateRestored(null);
-
- assertThat(mApnEditorUT.mProtocol.getSummary()).isEqualTo("IPv6");
- }
-
- @Test
- public void getUserEnteredApnType_emptyApnType_shouldReturnDefault() {
- // case 1
- // GIVEN read only APN types with DUN
- mApnEditorUT.mReadOnlyApnTypes = new String [] {"dun"};
- // GIVEN read specificApnTypeForEmptyInput with DEFAULT,DUN
- mApnEditorUT.mDefaultApnTypes = new String [] {"default", "dun"};
-
- // Input empty in TYPE
- mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = "";
- mApnEditorUT.onViewStateRestored(null);
-
- // THEN APN type should be default
- assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default");
-
- // case 2
- // GIVEN read only APN types with DUN
- mApnEditorUT.mReadOnlyApnTypes = new String [] {"dun"};
- // GIVEN read specificApnTypeForEmptyInput with DEFAULT
- mApnEditorUT.mDefaultApnTypes = new String [] {"default"};
-
- // Input empty in TYPE
- mApnEditorUT.mApnData.mData[ApnEditor.TYPE_INDEX] = "";
- mApnEditorUT.onViewStateRestored(null);
-
- // THEN APN type should be default
- assertThat(mApnEditorUT.getUserEnteredApnType()).isEqualTo("default");
- }
-
- private void initCursor() {
- doReturn(2).when(mCursor).getColumnCount();
- doReturn(2).when(mCursor).getInt(CURSOR_INTEGER_INDEX);
- doReturn("str").when(mCursor).getString(CURSOR_STRING_INDEX);
- doReturn(Cursor.FIELD_TYPE_INTEGER).when(mCursor).getType(CURSOR_INTEGER_INDEX);
- doReturn(Cursor.FIELD_TYPE_STRING).when(mCursor).getType(CURSOR_STRING_INDEX);
- }
-
- private void setMockPreference(Context context) {
- mApnEditorUT.mName = new EditTextPreference(context);
- mApnEditorUT.mApn = new EditTextPreference(context);
- mApnEditorUT.mProxy = new EditTextPreference(context);
- mApnEditorUT.mPort = new EditTextPreference(context);
- mApnEditorUT.mUser = new EditTextPreference(context);
- mApnEditorUT.mServer = new EditTextPreference(context);
- mApnEditorUT.mPassword = new EditTextPreference(context);
- mApnEditorUT.mMmsc = new EditTextPreference(context);
- mApnEditorUT.mMcc = new EditTextPreference(context);
- mApnEditorUT.mMnc = new EditTextPreference(context);
- mApnEditorUT.mMmsProxy = new EditTextPreference(context);
- mApnEditorUT.mMmsPort = new EditTextPreference(context);
- mApnEditorUT.mAuthType = new ListPreference(context);
- mApnEditorUT.mApnType = new EditTextPreference(context);
- mApnEditorUT.mProtocol = new ListPreference(context);
- mApnEditorUT.mRoamingProtocol = new ListPreference(context);
- mApnEditorUT.mCarrierEnabled = new SwitchPreference(context);
- mApnEditorUT.mBearerMulti = new MultiSelectListPreference(context);
- mApnEditorUT.mMvnoType = new ListPreference(context);
- mApnEditorUT.mMvnoMatchData = new EditTextPreference(context);
- }
-
- private final class FakeApnData extends ApnData {
- FakeApnData(Object[] data) {
- super(data.length);
- System.arraycopy(data, 0, mData, 0, data.length);
- }
-
- FakeApnData(Object[] data, Uri uri) {
- this(data);
- mUri = uri;
- }
- }
-}
diff --git a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java
index 4e0fb03..8c537e0 100644
--- a/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/network/tether/TetherSettingsTest.java
@@ -54,7 +54,7 @@
import androidx.preference.SwitchPreference;
import com.android.settings.R;
-import com.android.settings.RestrictedSettingsFragment;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.wifi.tether.WifiTetherPreferenceController;
import com.android.settingslib.RestrictedSwitchPreference;
@@ -130,14 +130,12 @@
}
@Test
- @Config(shadows = ShadowRestrictedSettingsFragment.class)
+ @Config(shadows = ShadowRestrictedDashboardFragment.class)
public void onCreate_isUiRestricted_doNotSetupViewModel() {
- doNothing().when(mTetherSettings).addPreferencesFromResource(anyInt());
when(mTetherSettings.isUiRestricted()).thenReturn(true);
mTetherSettings.onCreate(null);
- verify(mTetherSettings).addPreferencesFromResource(anyInt());
verify(mTetherSettings, never()).setupViewModel();
}
@@ -454,8 +452,8 @@
}
}
- @Implements(RestrictedSettingsFragment.class)
- public static final class ShadowRestrictedSettingsFragment {
+ @Implements(RestrictedDashboardFragment.class)
+ public static final class ShadowRestrictedDashboardFragment {
@Implementation
public void onCreate(Bundle icicle) {
// do nothing
diff --git a/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceControllerTest.java
index ed65d5b..f9f3be7 100644
--- a/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceControllerTest.java
@@ -36,6 +36,7 @@
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
+// LINT.IfChange
@RunWith(RobolectricTestRunner.class)
public class CallVolumePreferenceControllerTest {
private static final String TEST_KEY = "Test_Key";
@@ -108,3 +109,4 @@
assertThat(mController.isPublicSlice()).isTrue();
}
}
+// LINT.ThenChange(CallVolumePreferenceTest.kt)
diff --git a/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceTest.kt b/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceTest.kt
new file mode 100644
index 0000000..d6bc6d0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/CallVolumePreferenceTest.kt
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.notification
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.content.res.Resources
+import android.media.AudioManager
+import android.media.AudioManager.STREAM_BLUETOOTH_SCO
+import android.media.AudioManager.STREAM_VOICE_CALL
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.stub
+
+// LINT.IfChange
+@RunWith(AndroidJUnit4::class)
+class CallVolumePreferenceTest {
+ private var audioHelper = mock<AudioHelper>()
+ private var mockResources = mock<Resources>()
+
+ private var audioManager: AudioManager? = null
+
+ private var callVolumePreference = CallVolumePreference()
+ private val context = object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
+ override fun getSystemService(name: String): Any? =
+ when (name) {
+ Context.AUDIO_SERVICE -> audioManager
+ else -> super.getSystemService(name)
+ }
+
+ override fun getResources(): Resources = mockResources
+ }
+
+ @Test
+ fun isAvailable_configTrueAndNoSingleVolume_shouldReturnTrue() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn true }
+ audioHelper = mock { on { isSingleVolume } doReturn false }
+ callVolumePreference = spy(callVolumePreference).stub {
+ onGeneric { createAudioHelper(context) } doReturn audioHelper
+ }
+
+ assertThat(callVolumePreference.isAvailable(context)).isTrue()
+ }
+
+ @Test
+ fun isAvailable_configTrueAndSingleVolume_shouldReturnFalse() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn true }
+ audioHelper = mock { on { isSingleVolume } doReturn true }
+ callVolumePreference = spy(callVolumePreference).stub {
+ onGeneric { createAudioHelper(context) } doReturn audioHelper
+ }
+
+ assertThat(callVolumePreference.isAvailable(context)).isFalse()
+ }
+
+ @Test
+ fun isAvailable_configFalse_shouldReturnFalse() {
+ mockResources.stub { on { getBoolean(anyInt()) } doReturn false }
+
+ assertThat(callVolumePreference.isAvailable(context)).isFalse()
+ }
+
+ @Test
+ @Suppress("DEPRECATION")
+ fun getAudioStream_onBluetoothScoOn_shouldEqualToStreamBluetoothSco() {
+ audioManager = mock { on { isBluetoothScoOn } doReturn true }
+
+ assertThat(callVolumePreference.getAudioStream(context)).isEqualTo(STREAM_BLUETOOTH_SCO)
+ }
+
+ @Test
+ @Suppress("DEPRECATION")
+ fun getAudioStream_onBluetoothScoOff_shouldEqualToStreamVoiceCall() {
+ audioManager = mock { on { isBluetoothScoOn } doReturn false }
+
+ assertThat(callVolumePreference.getAudioStream(context)).isEqualTo(STREAM_VOICE_CALL)
+ }
+}
+// LINT.ThenChange(CallVolumePreferenceControllerTest.java)
diff --git a/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java
index c6511ef..3626608 100644
--- a/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceControllerTest.java
@@ -39,6 +39,7 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+// LINT.IfChange
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class,
@@ -123,3 +124,4 @@
assertThat(System.getInt(mContentResolver, System.DTMF_TONE_WHEN_DIALING, 1)).isEqualTo(0);
}
}
+// LINT.ThenChange(DialPadTonePreferenceTest.kt)
diff --git a/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt
new file mode 100644
index 0000000..63e8e3d
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/DialPadTonePreferenceTest.kt
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.notification
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.provider.Settings.System.DTMF_TONE_WHEN_DIALING
+import android.telephony.TelephonyManager
+import androidx.preference.SwitchPreferenceCompat
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.android.settingslib.datastore.SettingsSystemStore
+import com.android.settingslib.preference.DefaultPreferenceBindingFactory
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+
+// LINT.IfChange
+@RunWith(AndroidJUnit4::class)
+class DialPadTonePreferenceTest {
+ private var telephonyManager: TelephonyManager? = null
+
+ private val context =
+ object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
+ override fun getSystemService(name: String): Any? =
+ when (name) {
+ Context.TELEPHONY_SERVICE -> telephonyManager
+ else -> super.getSystemService(name)
+ }
+ }
+
+ private val dialPadTonePreference = DialPadTonePreference()
+
+ @Test
+ fun isAvailable_voiceCapable_shouldReturnTrue() {
+ telephonyManager = mock { on { isVoiceCapable } doReturn true }
+
+ assertThat(dialPadTonePreference.isAvailable(context)).isTrue()
+ }
+
+ @Test
+ fun isAvailable_noVoicCapable_shouldReturnFalse() {
+ telephonyManager = mock { on { isVoiceCapable } doReturn false }
+
+ assertThat(dialPadTonePreference.isAvailable(context)).isFalse()
+ }
+
+ @Test
+ fun performClick_shouldPreferenceChangeToChecked() {
+ enableDialPadTone(false)
+
+ val preference = getSwitchPreference().apply { performClick() }
+
+ assertThat(preference.isChecked).isTrue()
+ }
+
+ @Test
+ fun performClick_shouldPreferenceChangeToUnchecked() {
+ enableDialPadTone(true)
+
+ val preference = getSwitchPreference().apply { performClick() }
+
+ assertThat(preference.isChecked).isFalse()
+ }
+
+ @Test
+ fun dialToneEnabled_shouldCheckedPreference() {
+ enableDialPadTone(true)
+
+ assertThat(getSwitchPreference().isChecked).isTrue()
+ }
+
+ @Test
+ fun dialToneDisabled_shouldUncheckedPreference() {
+ enableDialPadTone(false)
+
+ assertThat(getSwitchPreference().isChecked).isFalse()
+ }
+
+ private fun getSwitchPreference(): SwitchPreferenceCompat =
+ DefaultPreferenceBindingFactory.getPreferenceBinding(dialPadTonePreference).run {
+ val preference = createWidget(context)
+ bind(preference, dialPadTonePreference)
+ preference as SwitchPreferenceCompat
+ }
+
+ private fun enableDialPadTone(enabled: Boolean) =
+ SettingsSystemStore.get(context).setBoolean(DTMF_TONE_WHEN_DIALING, enabled)
+}
+// LINT.ThenChange(DialPadTonePreferenceControllerTest.java)
diff --git a/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java
index 8b8c77e..a8de8ef 100644
--- a/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/app/BundleListPreferenceControllerTest.java
@@ -89,15 +89,6 @@
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mGroupList = new PreferenceCategory(mContext);
mPreferenceScreen.addPreference(mGroupList);
-
- when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn(
- new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2));
- when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)).thenReturn(
- new NotificationChannel(NEWS_ID, NEWS_ID, 2));
- when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)).thenReturn(
- new NotificationChannel(SOCIAL_MEDIA_ID, SOCIAL_MEDIA_ID, 2));
- when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)).thenReturn(
- new NotificationChannel(RECS_ID, RECS_ID, 2));
}
@Test
@@ -132,6 +123,14 @@
@Test
public void updateState() {
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn(
+ new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2));
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)).thenReturn(
+ new NotificationChannel(NEWS_ID, NEWS_ID, 2));
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)).thenReturn(
+ new NotificationChannel(SOCIAL_MEDIA_ID, SOCIAL_MEDIA_ID, 2));
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)).thenReturn(
+ new NotificationChannel(RECS_ID, RECS_ID, 2));
mController.updateState(mGroupList);
assertThat(mGroupList.getPreferenceCount()).isEqualTo(4);
assertThat(mGroupList.findPreference(PROMOTIONS_ID).getTitle()).isEqualTo(PROMOTIONS_ID);
@@ -142,19 +141,38 @@
}
@Test
- public void updateState_updateChildren() {
+ public void updateState_noBundles() {
mController.updateState(mGroupList);
- assertThat(mGroupList.getPreferenceCount()).isEqualTo(4);
+ assertThat(mGroupList.getPreferenceCount()).isEqualTo(0);
+ assertThat(mGroupList.isVisible()).isFalse();
+ }
+ @Test
+ public void updateState_onlySomeBundlesUsed() {
when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn(
new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2));
+ mController.updateState(mGroupList);
+ assertThat(mGroupList.getPreferenceCount()).isEqualTo(1);
+ assertThat(mGroupList.findPreference(PROMOTIONS_ID).getTitle()).isEqualTo(PROMOTIONS_ID);
+ }
+
+ @Test
+ public void updateState_noDuplicateChannelsOnReload() {
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, PROMOTIONS_ID)).thenReturn(
+ new NotificationChannel(PROMOTIONS_ID, PROMOTIONS_ID, 2));
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, NEWS_ID)).thenReturn(
+ new NotificationChannel(NEWS_ID, NEWS_ID, 2));
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, SOCIAL_MEDIA_ID)).thenReturn(
+ new NotificationChannel(SOCIAL_MEDIA_ID, SOCIAL_MEDIA_ID, 2));
+ when(mBackend.getChannel(mAppRow.pkg, mAppRow.uid, RECS_ID)).thenReturn(
+ new NotificationChannel(RECS_ID, RECS_ID, 2));
mController.updateState(mGroupList);
assertThat(mGroupList.getPreferenceCount()).isEqualTo(4);
+ mController.updateState(mGroupList);
+ assertThat(mGroupList.getPreferenceCount()).isEqualTo(4);
assertThat(((PrimarySwitchPreference) mGroupList.findPreference(NEWS_ID)).isChecked())
.isEqualTo(false);
- assertThat(((PrimarySwitchPreference) mGroupList.findPreference(NEWS_ID)).isChecked())
- .isEqualTo(false);
}
}
diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java
index a0e1d38..1cd3053 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeSummaryHelperTest.java
@@ -29,7 +29,6 @@
import static org.robolectric.Shadows.shadowOf;
-import android.app.AutomaticZenRule;
import android.app.Flags;
import android.content.Context;
import android.content.pm.ApplicationInfo;
@@ -38,9 +37,7 @@
import android.os.UserManager;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.flag.junit.SetFlagsRule;
-import android.service.notification.SystemZenRules;
import android.service.notification.ZenDeviceEffects;
-import android.service.notification.ZenModeConfig;
import android.service.notification.ZenPolicy;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -476,46 +473,61 @@
}
@Test
- public void getModesSummary_noRules_noSummary() {
+ public void getModesSummary_noModesWtf_fallbackSummary() {
String summary = mSummaryHelper.getModesSummary(ImmutableList.of());
- assertThat(summary).isEmpty();
+ assertThat(summary).isEqualTo("Do Not Disturb");
}
@Test
- public void getModesSummary_onlyDndAndNotActive_noSummary() {
- ImmutableList<ZenMode> modes = ImmutableList.of(TestModeBuilder.MANUAL_DND_INACTIVE);
- String summary = mSummaryHelper.getModesSummary(modes);
- assertThat(summary).isEmpty();
- }
-
- @Test
- public void getModesSummary_noRulesActive_countsOnlyEnabledAutomaticModes() {
+ public void getModesSummary_oneMode_listsMode() {
ImmutableList<ZenMode> modes = ImmutableList.of(
- TestModeBuilder.MANUAL_DND_INACTIVE, // Not automatic
- new TestModeBuilder().setName("Auto 1").build(), // App provided automatic
- new TestModeBuilder()
- .setName("Custom manual 1")
- .setPackage(SystemZenRules.PACKAGE_ANDROID)
- .setType(AutomaticZenRule.TYPE_OTHER)
- .setConditionId(ZenModeConfig.toCustomManualConditionId())
- .build(), // Custom manual, not automatic
- new TestModeBuilder()
- .setName("Disabled 1")
- .setEnabled(false)
- .build(), // Would be automatic, but it's disabled.
- new TestModeBuilder()
- .setName("Sleep")
- .setPackage(SystemZenRules.PACKAGE_ANDROID)
- .setType(AutomaticZenRule.TYPE_SCHEDULE_TIME)
- .build() // Time based, automatic.
+ new TestModeBuilder().setName("Surfing").build()
);
String summary = mSummaryHelper.getModesSummary(modes);
- assertThat(summary).isEqualTo("2 modes can turn on automatically");
+ assertThat(summary).isEqualTo("Surfing");
}
@Test
- public void getModesSummary_oneModeActive_listsMode() {
+ public void getModesSummary_twoModes_listsModes() {
+ ImmutableList<ZenMode> modes = ImmutableList.of(
+ new TestModeBuilder().setName("Cartwheeling").build(),
+ new TestModeBuilder().setName("Hula-hooping").build()
+ );
+
+ String summary = mSummaryHelper.getModesSummary(modes);
+ assertThat(summary).isEqualTo("Cartwheeling, Hula-hooping");
+ }
+
+ @Test
+ public void getModesSummary_threeModes_listsModes() {
+ ImmutableList<ZenMode> modes = ImmutableList.of(
+ new TestModeBuilder().setName("Prancing").build(),
+ new TestModeBuilder().setName("Hopping").build(),
+ new TestModeBuilder().setName("Skipping").build()
+ );
+
+ String summary = mSummaryHelper.getModesSummary(modes);
+ assertThat(summary).isEqualTo("Prancing, Hopping, Skipping");
+ }
+
+ @Test
+ public void getModesSummary_manyModes_listsThreeModes() {
+ ImmutableList<ZenMode> modes = ImmutableList.of(
+ new TestModeBuilder().setName("Juggling").build(),
+ new TestModeBuilder().setName("Rhyming").build(),
+ new TestModeBuilder().setName("Meandering").build(),
+ new TestModeBuilder().setName("Doodling").build(),
+ new TestModeBuilder().setName("Whistling").build(),
+ new TestModeBuilder().setName("Lounging").build()
+ );
+
+ String summary = mSummaryHelper.getModesSummary(modes);
+ assertThat(summary).isEqualTo("Juggling, Rhyming, Meandering");
+ }
+
+ @Test
+ public void getModesSummary_oneModeActive_listsActiveMode() {
ImmutableList<ZenMode> modes = ImmutableList.of(
TestModeBuilder.MANUAL_DND_ACTIVE,
new TestModeBuilder().setName("Inactive").setActive(false).build());
@@ -525,7 +537,7 @@
}
@Test
- public void getModesSummary_twoModesActive_listsModes() {
+ public void getModesSummary_twoModesActive_listsActiveModes() {
ImmutableList<ZenMode> modes = ImmutableList.of(
TestModeBuilder.MANUAL_DND_ACTIVE,
new TestModeBuilder().setName("Inactive").setActive(false).build(),
@@ -536,7 +548,7 @@
}
@Test
- public void getModesSummary_threeModesActive_listsModes() {
+ public void getModesSummary_threeModesActive_listsActiveModes() {
ImmutableList<ZenMode> modes = ImmutableList.of(
TestModeBuilder.MANUAL_DND_INACTIVE,
new TestModeBuilder().setName("Inactive #1").setActive(false).build(),
@@ -550,7 +562,7 @@
}
@Test
- public void getModesSummary_manyModesActive_listsACouple() {
+ public void getModesSummary_manyModesActive_listsSomeActiveModes() {
ImmutableList<ZenMode> modes = ImmutableList.of(
TestModeBuilder.MANUAL_DND_ACTIVE,
new TestModeBuilder().setName("Inactive #1").setActive(false).build(),
diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java
index b7af71b..d916dcf 100644
--- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java
@@ -44,6 +44,8 @@
import android.platform.test.flag.junit.SetFlagsRule;
import android.service.notification.SystemZenRules;
import android.service.notification.ZenModeConfig;
+import android.text.Spanned;
+import android.text.style.TtsSpan;
import android.widget.TextView;
import androidx.preference.PreferenceManager;
@@ -293,7 +295,14 @@
assertThat(mPreference.isVisible()).isTrue();
assertThat(mPreference.getTitle()).isEqualTo("1:00 AM - 3:00 PM");
- assertThat(mPreference.getSummary()).isEqualTo("Mon - Tue, Thu");
+ Spanned summary = (Spanned) mPreference.getSummary();
+ assertThat(summary.toString()).isEqualTo("Mon - Tue, Thu");
+ TtsSpan[] ttsSpans = summary.getSpans(0, summary.length(), TtsSpan.class);
+ assertThat(ttsSpans).hasLength(1);
+ assertThat(ttsSpans[0].getType()).isEqualTo(TtsSpan.TYPE_TEXT);
+ assertThat(ttsSpans[0].getArgs().getString(TtsSpan.ARG_TEXT)).isEqualTo(
+ "Monday to Tuesday, Thursday");
+
// Destination as written into the intent by SubSettingLauncher
assertThat(
mPreference.getIntent().getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT))
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java
index fcd1e42..7de69a7 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowAccessibilityManager.java
@@ -24,6 +24,8 @@
import android.util.ArrayMap;
import android.view.accessibility.AccessibilityManager;
+import com.android.internal.accessibility.common.ShortcutConstants;
+
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@@ -71,4 +73,14 @@
@NonNull List<AccessibilityShortcutInfo> installedAccessibilityShortcutList) {
mInstalledAccessibilityShortcutList = installedAccessibilityShortcutList;
}
+
+ /**
+ * Implements the hidden method
+ * {@link AccessibilityManager#getAccessibilityShortcutTargets}.
+ */
+ @Implementation
+ public List<String> getAccessibilityShortcutTargets(
+ @ShortcutConstants.UserShortcutType int shortcutType) {
+ return List.of();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingScreenTest.kt b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingScreenTest.kt
new file mode 100644
index 0000000..474e304
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingScreenTest.kt
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.wifi.calling
+
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Test
+
+class WifiCallingScreenTest : CatalystScreenTestCase() {
+
+ override val preferenceScreenCreator = WifiCallingScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_WIFI_CALLING
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(WifiCallingScreen.KEY)
+ }
+
+ override fun migration() {}
+}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
index 4440bc9..f34042d 100644
--- a/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/calling/WifiCallingSettingsForSubTest.java
@@ -90,6 +90,7 @@
private static final String PREFERENCE_NO_OPTIONS_DESC = "no_options_description";
private static final String TEST_EMERGENCY_ADDRESS_CARRIER_APP =
"com.android.settings/.wifi.calling.TestEmergencyAddressCarrierApp";
+ private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key";
private TestFragment mFragment;
private Context mContext;
@@ -138,6 +139,7 @@
doReturn(mContext.getResources()).when(mFragment).getResources();
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(anyInt());
+ doReturn(mock(LifecycleOwner.class)).when(mFragment).getViewLifecycleOwner();
final Bundle bundle = new Bundle();
when(mFragment.getArguments()).thenReturn(bundle);
doNothing().when(mFragment).addPreferencesFromResource(anyInt());
@@ -380,19 +382,22 @@
@Override
public <T extends Preference> T findPreference(CharSequence key) {
- if (SWITCH_BAR.equals(key)) {
+ if (SWITCH_BAR.contentEquals(key)) {
return (T) mSwitchPref;
}
- if (BUTTON_WFC_MODE.equals(key)) {
+ if (BUTTON_WFC_MODE.contentEquals(key)) {
return (T) mButtonWfcMode;
}
- if (BUTTON_WFC_ROAMING_MODE.equals(key)) {
+ if (BUTTON_WFC_ROAMING_MODE.contentEquals(key)) {
return (T) mButtonWfcRoamingMode;
}
- if (PREFERENCE_NO_OPTIONS_DESC.equals(key)) {
+ if (PREFERENCE_NO_OPTIONS_DESC.contentEquals(key)) {
return (T) mDescriptionView;
}
- return (T) mock(ListWithEntrySummaryPreference.class);
+ if (PREFERENCE_EMERGENCY_ADDRESS.contentEquals(key)) {
+ return (T) mUpdateAddress;
+ }
+ return null;
}
@Override
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
index 0982f26..32e3a61 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSwitchBarControllerTest.java
@@ -147,8 +147,8 @@
}
@Test
- public void onSwitchChanged_switchNotEnabled_doNothingForTethering() {
- when(mSwitch.isEnabled()).thenReturn(false);
+ public void onSwitchChanged_switchIsBusy_doNothingForTethering() {
+ mController.mIsSwitchBusy = true;
mController.onCheckedChanged(mSwitch, true);
diff --git a/tests/robotests/testutils/com/android/settings/testutils/SystemProperty.kt b/tests/robotests/testutils/com/android/settings/testutils/SystemProperty.kt
new file mode 100644
index 0000000..9c2574e
--- /dev/null
+++ b/tests/robotests/testutils/com/android/settings/testutils/SystemProperty.kt
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.testutils
+
+/**
+ * Helper class to override system properties.
+ *
+ * [System.setProperty] changes the static state in the JVM, which is shared by all tests. Hence,
+ * there is chance that test cases are dependent/interfered due to system property unexpectedly.
+ * This helper class backs up the old properties when invoking [override] and restore the old
+ * properties in [close] to avoid flaky testing.
+ */
+class SystemProperty(overrides: Map<String, String?> = mapOf()) : AutoCloseable {
+ private val oldProperties = mutableMapOf<String, String?>()
+
+ constructor(key: String, value: String?) : this(mapOf(key to value))
+
+ init {
+ override(overrides)
+ }
+
+ fun override(key: String, value: String?) = override(mapOf(key to value))
+
+ fun override(overrides: Map<String, String?>) {
+ // back up system properties for the overrides
+ for (key in overrides.keys) {
+ // only back up the oldest property
+ if (!oldProperties.containsKey(key)) {
+ oldProperties[key] = System.getProperty(key)
+ }
+ }
+ overrides.overrideProperties()
+ }
+
+ override fun close() {
+ // restore the backed up properties
+ oldProperties.overrideProperties()
+ oldProperties.clear()
+ }
+
+ private fun Map<String, String?>.overrideProperties() {
+ for ((key, value) in this) {
+ if (value != null) {
+ System.setProperty(key, value)
+ } else {
+ System.clearProperty(key)
+ }
+ }
+ }
+}
diff --git a/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt b/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt
index e7fc3ed..a5d0461 100644
--- a/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt
+++ b/tests/screenshot/src/com/android/settings/tests/screenshot/biometrics/fingerprint/Injector.kt
@@ -44,6 +44,7 @@
import com.android.settings.biometrics.fingerprint2.ui.enrollment.viewmodel.FingerprintScrollViewModel
import com.android.settings.testutils2.FakeFingerprintManagerInteractor
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
@@ -73,7 +74,10 @@
var accessibilityInteractor =
object : AccessibilityInteractor {
- override val isAccessibilityEnabled: Flow<Boolean> = flowOf(true)
+ override fun isEnabledFlow(scope: CoroutineScope): Flow<Boolean> = flowOf(true)
+ override val isEnabled: Boolean
+ get() = true
+ override fun announce(clazz: Class<*>, announcement: CharSequence?) {}
}
var foldStateInteractor =
diff --git a/tests/spa_unit/src/com/android/settings/network/SimOnboardingServiceTest.kt b/tests/spa_unit/src/com/android/settings/network/SimOnboardingServiceTest.kt
index 6f9029e..676ac48 100644
--- a/tests/spa_unit/src/com/android/settings/network/SimOnboardingServiceTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/SimOnboardingServiceTest.kt
@@ -16,21 +16,55 @@
package com.android.settings.network
+import android.content.Context
import android.telephony.SubscriptionInfo
+import android.telephony.SubscriptionManager
+import android.telephony.TelephonyManager
+import android.telephony.UiccCardInfo
+import android.telephony.UiccPortInfo
+import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
-import org.junit.Rule
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
import org.junit.Test
import org.junit.runner.RunWith
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.spy
+import org.mockito.kotlin.stub
+
@RunWith(AndroidJUnit4::class)
class SimOnboardingServiceTest {
+ val simOnboardingService = SimOnboardingService()
+
+ private val mockTelephonyManager = mock<TelephonyManager> {
+ on { activeModemCount } doReturn 2
+ on { isMultiSimSupported } doReturn TelephonyManager.MULTISIM_ALLOWED
+ on { uiccCardsInfo } doReturn mepUiccCardInfoList
+ }
+
+ private val mockSubscriptionManager = mock<SubscriptionManager> {
+ on { activeSubscriptionInfoList } doReturn listOf(
+ SUB_INFO_1,
+ SUB_INFO_2
+ )
+ on { availableSubscriptionInfoList } doReturn listOf(
+ SUB_INFO_1,
+ SUB_INFO_2,
+ SUB_INFO_3,
+ )
+ }
+
+ private val context: Context = spy(ApplicationProvider.getApplicationContext()) {
+ on { getSystemService(SubscriptionManager::class.java) } doReturn mockSubscriptionManager
+ on { getSystemService(TelephonyManager::class.java) } doReturn mockTelephonyManager
+ }
@Test
fun addItemForRenaming_addItemWithNewName_findItem() {
- val simOnboardingService = SimOnboardingService()
val newName = "NewName"
-
simOnboardingService.addItemForRenaming(SUB_INFO_1, newName)
assertThat(simOnboardingService.renameMutableMap)
@@ -39,8 +73,6 @@
@Test
fun addItemForRenaming_sameNameAndItemNotInList_removeItem() {
- val simOnboardingService = SimOnboardingService()
-
simOnboardingService.addItemForRenaming(SUB_INFO_1, DISPLAY_NAME_1)
assertThat(simOnboardingService.renameMutableMap)
@@ -49,7 +81,6 @@
@Test
fun addItemForRenaming_sameNameAndItemInList_removeItem() {
- val simOnboardingService = SimOnboardingService()
simOnboardingService.renameMutableMap[SUB_INFO_1.subscriptionId] = "NewName"
simOnboardingService.addItemForRenaming(SUB_INFO_1, DISPLAY_NAME_1)
@@ -58,13 +89,205 @@
.doesNotContainKey(SUB_INFO_1.subscriptionId)
}
+ @Test
+ fun isDsdsConditionSatisfied_isMultiSimEnabled_returnFalse(){
+ simOnboardingService.initData(SUB_ID_3, context, {})
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isFalse()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_isNotMultiSimSupported_returnFalse() {
+ mockTelephonyManager.stub {
+ on { activeModemCount } doReturn 1
+ on {
+ isMultiSimSupported
+ } doReturn TelephonyManager.MULTISIM_NOT_SUPPORTED_BY_HARDWARE
+ }
+ simOnboardingService.initData(SUB_ID_3, context, {})
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isFalse()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_mepAndOneActiveSim_returnTrue() = runBlocking {
+ mockTelephonyManager.stub {
+ on { activeModemCount } doReturn 1
+ }
+ simOnboardingService.initData(SUB_ID_3, context, {})
+ delay(100)
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isTrue()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_mepAndNoActiveSim_returnFalse() = runBlocking {
+ mockTelephonyManager.stub {
+ on { activeModemCount } doReturn 1
+ }
+ mockSubscriptionManager.stub {
+ on { activeSubscriptionInfoList } doReturn listOf()
+ }
+ simOnboardingService.initData(SUB_ID_3, context, {})
+ delay(100)
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isFalse()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_insertEsimAndOneActivePsimNoMep_returnTrue() = runBlocking {
+ mockTelephonyManager.stub {
+ on { getActiveModemCount() } doReturn 1
+ on { uiccCardsInfo } doReturn noMepUiccCardInfoList
+ }
+ simOnboardingService.initData(SUB_ID_3, context, {})
+ delay(100)
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isTrue()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_insertEsimAndNoPsimNoMep_returnFalse() = runBlocking {
+ mockTelephonyManager.stub {
+ on { getActiveModemCount() } doReturn 1
+ on { uiccCardsInfo } doReturn noMepUiccCardInfoList
+ }
+ mockSubscriptionManager.stub {
+ on { activeSubscriptionInfoList } doReturn listOf()
+ }
+ simOnboardingService.initData(SUB_ID_3, context, {})
+ delay(100)
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isFalse()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_insertPsimAndOneActiveEsimNoMep_returnTrue() = runBlocking {
+ mockTelephonyManager.stub {
+ on { getActiveModemCount() } doReturn 1
+ on { uiccCardsInfo } doReturn noMepUiccCardInfoList
+ }
+ mockSubscriptionManager.stub {
+ on { activeSubscriptionInfoList } doReturn listOf(
+ SUB_INFO_2
+ )
+ }
+ simOnboardingService.initData(SUB_ID_1, context, {})
+ delay(100)
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isTrue()
+ }
+
+ @Test
+ fun isDsdsConditionSatisfied_insertPsimAndNoEsimNoMep_returnFalse() = runBlocking {
+ mockTelephonyManager.stub {
+ on { getActiveModemCount() } doReturn 1
+ on { uiccCardsInfo } doReturn noMepUiccCardInfoList
+ }
+ mockSubscriptionManager.stub {
+ on { activeSubscriptionInfoList } doReturn listOf()
+ }
+ simOnboardingService.initData(SUB_ID_1, context, {})
+ delay(100)
+
+ assertThat(simOnboardingService.isDsdsConditionSatisfied()).isFalse()
+ }
+
private companion object {
const val SUB_ID_1 = 1
+ const val SUB_ID_2 = 2
+ const val SUB_ID_3 = 3
+ const val SUB_ID_4 = 4
const val DISPLAY_NAME_1 = "Sub 1"
val SUB_INFO_1: SubscriptionInfo = SubscriptionInfo.Builder().apply {
setId(SUB_ID_1)
setDisplayName(DISPLAY_NAME_1)
}.build()
+
+ val SUB_INFO_2: SubscriptionInfo = SubscriptionInfo.Builder().apply {
+ setId(SUB_ID_2)
+ setEmbedded(true)
+ }.build()
+
+ val SUB_INFO_3: SubscriptionInfo = SubscriptionInfo.Builder().apply {
+ setId(SUB_ID_3)
+ setEmbedded(true)
+ }.build()
+
+ val SUB_INFO_4: SubscriptionInfo = SubscriptionInfo.Builder().apply {
+ setId(SUB_ID_4)
+ }.build()
+
+ private const val REMOVABLE_CARD_ID_1: Int = 25
+ private const val REMOVABLE_CARD_ID_2: Int = 26
+ private const val EUICC_CARD_ID_3: Int = 27
+ private const val EUICC_CARD_ID_4: Int = 28
+
+ val noMepUiccCardInfoList: List<UiccCardInfo> = listOf(
+ createUiccCardInfo(
+ isEuicc = true,
+ cardId = EUICC_CARD_ID_3,
+ physicalSlotIndex = 0,
+ isRemovable = false,
+ isMultipleEnabledProfileSupported = false,
+ logicalSlotIndex = -1,
+ portIndex = -1
+ ),
+ createUiccCardInfo(
+ isEuicc = false,
+ cardId = REMOVABLE_CARD_ID_1,
+ physicalSlotIndex = 1,
+ isRemovable = true,
+ isMultipleEnabledProfileSupported = false,
+ logicalSlotIndex = -1,
+ portIndex = -1
+ )
+ )
+ val mepUiccCardInfoList: List<UiccCardInfo> = listOf(
+ createUiccCardInfo(
+ isEuicc = true,
+ cardId = EUICC_CARD_ID_3,
+ physicalSlotIndex = 0,
+ isRemovable = false,
+ logicalSlotIndex = -1,
+ portIndex = -1
+ ),
+ createUiccCardInfo(
+ isEuicc = false,
+ cardId = REMOVABLE_CARD_ID_1,
+ physicalSlotIndex = 1,
+ isRemovable = true,
+ logicalSlotIndex = -1,
+ portIndex = -1
+ )
+ )
+
+ private fun createUiccCardInfo(
+ isEuicc: Boolean,
+ cardId: Int,
+ physicalSlotIndex: Int,
+ isRemovable: Boolean,
+ logicalSlotIndex: Int,
+ portIndex: Int,
+ isMultipleEnabledProfileSupported:Boolean = true,
+ ): UiccCardInfo {
+ return UiccCardInfo(
+ isEuicc, /* isEuicc */
+ cardId, /* cardId */
+ null, /* eid */
+ physicalSlotIndex, /* physicalSlotIndex */
+ isRemovable, /* isRemovable */
+ isMultipleEnabledProfileSupported, /* isMultipleEnabledProfileSupported */
+ listOf(
+ UiccPortInfo(
+ "123451234567890", /* iccId */
+ portIndex, /* portIdx */
+ logicalSlotIndex, /* logicalSlotIdx */
+ true /* isActive */
+ )
+ )
+ )
+ }
}
}
\ No newline at end of file
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
index 4d53260..75c1913 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/MmsMessagePreferenceControllerTest.kt
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony
import android.content.Context
+import android.telephony.CarrierConfigManager
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import android.telephony.TelephonyManager
import android.telephony.data.ApnSetting
@@ -26,6 +27,7 @@
import com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE
import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
import com.google.common.truth.Truth.assertThat
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.doReturn
@@ -63,6 +65,21 @@
getDefaultDataSubId = { defaultDataSubId },
)
+ @Before
+ fun setUp() {
+ CarrierConfigRepository.resetForTest()
+ CarrierConfigRepository.setBooleanForTest(
+ subId = SUB_1_ID,
+ key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+ value = true,
+ )
+ CarrierConfigRepository.setBooleanForTest(
+ subId = SUB_2_ID,
+ key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+ value = true,
+ )
+ }
+
@Test
fun getAvailabilityStatus_invalidSubscription_unavailable() {
controller.init(INVALID_SUBSCRIPTION_ID)
@@ -165,6 +182,27 @@
}
@Test
+ fun getAvailabilityStatus_carrierConfigEnabledMmsFalse_unavailable() {
+ defaultDataSubId = SUB_2_ID
+ mockTelephonyManager2.stub {
+ on { isDataEnabled } doReturn false
+ on {
+ isMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+ } doReturn true
+ }
+ CarrierConfigRepository.setBooleanForTest(
+ subId = SUB_2_ID,
+ key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+ value = false,
+ )
+ controller.init(SUB_2_ID)
+
+ val availabilityStatus = controller.getAvailabilityStatus()
+
+ assertThat(availabilityStatus).isEqualTo(CONDITIONALLY_UNAVAILABLE)
+ }
+
+ @Test
fun searchIsAvailable_notDefaultDataAndDataOnAndAutoDataSwitchOn_unavailable() {
mockTelephonyManager1.stub {
on { isDataEnabled } doReturn true
@@ -201,6 +239,27 @@
}
@Test
+ fun searchIsAvailable_carrierConfigEnabledMmsFalse_unavailable() {
+ defaultDataSubId = SUB_2_ID
+ mockTelephonyManager2.stub {
+ on { isDataEnabled } doReturn false
+ on {
+ isMobileDataPolicyEnabled(TelephonyManager.MOBILE_DATA_POLICY_AUTO_DATA_SWITCH)
+ } doReturn true
+ }
+ CarrierConfigRepository.setBooleanForTest(
+ subId = SUB_2_ID,
+ key = CarrierConfigManager.KEY_MMS_MMS_ENABLED_BOOL,
+ value = false,
+ )
+ controller.init(SUB_2_ID)
+
+ val availabilityStatus = controller.getAvailabilityStatus()
+
+ assertThat(availabilityStatus).isEqualTo(CONDITIONALLY_UNAVAILABLE)
+ }
+
+ @Test
fun isChecked_whenMmsNotAlwaysAllowed_returnFalse() {
mockTelephonyManager2.stub {
on {
diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/UiccSlotRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/UiccSlotRepositoryTest.kt
index 96aa151..911e1d1 100644
--- a/tests/spa_unit/src/com/android/settings/network/telephony/UiccSlotRepositoryTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/telephony/UiccSlotRepositoryTest.kt
@@ -44,7 +44,7 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isFalse()
}
@@ -61,7 +61,7 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isFalse()
}
@@ -78,7 +78,7 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isTrue()
}
@@ -95,7 +95,7 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isTrue()
}
@@ -116,7 +116,7 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isFalse()
}
@@ -137,13 +137,13 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isTrue()
}
@Test
- fun anyRemovablePhysicalSimEnabled_activePsim_returnsTrue() {
+ fun anyRemovablePhysicalSimSlotActiveAndInserted_activePsim_returnsTrue() {
mockTelephonyManager.stub {
on { uiccSlotsInfo } doReturn
arrayOf(
@@ -152,13 +152,13 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isTrue()
}
@Test
- fun anyRemovablePhysicalSimEnabled_inactivePsim_returnsFalse() {
+ fun anyRemovablePhysicalSimSlotActiveAndInserted_inactivePsim_returnsFalse() {
mockTelephonyManager.stub {
on { uiccSlotsInfo } doReturn
arrayOf(
@@ -167,13 +167,13 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isFalse()
}
@Test
- fun anyRemovablePhysicalSimEnabled_activeEsimAndActivePsim_returnsTrue() {
+ fun anyRemovablePhysicalSimSlotActiveAndInserted_activeEsimAndActivePsim_returnsTrue() {
mockTelephonyManager.stub {
on { uiccSlotsInfo } doReturn
arrayOf(
@@ -184,13 +184,13 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isTrue()
}
@Test
- fun anyRemovablePhysicalSimEnabled_activeEsimAndInactivePsim_returnsFalse() {
+ fun anyRemovablePhysicalSimSlotActiveAndInserted_activeEsimAndInactivePsim_returnsFalse() {
mockTelephonyManager.stub {
on { uiccSlotsInfo } doReturn
arrayOf(
@@ -201,16 +201,16 @@
)
}
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isFalse()
}
@Test
- fun anyRemovablePhysicalSimEnabled_uiccSlotInfoIsNull_returnsFalse() {
+ fun anyRemovablePhysicalSimSlotActiveAndInserted_uiccSlotInfoIsNull_returnsFalse() {
mockTelephonyManager.stub { on { uiccSlotsInfo } doReturn arrayOf(null) }
- val result = repository.anyRemovablePhysicalSimEnabled()
+ val result = repository.anyRemovablePhysicalSimSlotActiveAndInserted()
assertThat(result).isFalse()
}
diff --git a/tests/unit/Android.bp b/tests/unit/Android.bp
index be43f8e..07df3c8 100644
--- a/tests/unit/Android.bp
+++ b/tests/unit/Android.bp
@@ -26,11 +26,14 @@
"androidx.test.ext.junit",
"androidx.test.rules",
"flag-junit",
+ "kotlin-test",
+ "mockito-kotlin2",
"mockito-target-minus-junit4",
"platform-test-annotations",
"platform-test-rules",
"truth",
"kotlinx_coroutines_test",
+ "SettingsLibPreference-testutils",
"Settings-testutils2",
"servicestests-utils",
// Don't add SettingsLib libraries here - you can use them directly as they are in the
diff --git a/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java b/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java
index 342212a..4c07555 100644
--- a/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java
+++ b/tests/unit/src/com/android/settings/applications/appcompat/UserAspectRatioManagerTest.java
@@ -331,9 +331,7 @@
.isEqualTo(getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName));
}
- @Test
- public void testGetUserMinAspectRatioEntry_enabledFullscreenOverride_returnsFullscreen() {
- setIsOverrideToFullscreenEnabled(true);
+ private void assertUnsetIsFullscreen() {
// Fullscreen option is pre-selected
assertThat(getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
.isEqualTo(ResourcesUtils.getResourcesString(
@@ -347,9 +345,7 @@
"user_aspect_ratio_app_default"));
}
- @Test
- public void testGetUserMinAspectRatioEntry_disabledFullscreenOverride_returnsUnchanged() {
- setIsOverrideToFullscreenEnabled(false);
+ private void assertUnsetIsAppDefault() {
// Fullscreen option is not pre-selected
assertThat(getUserMinAspectRatioEntry(USER_MIN_ASPECT_RATIO_UNSET, mPackageName))
.isEqualTo(ResourcesUtils.getResourcesString(
@@ -358,9 +354,43 @@
}
@Test
- public void testIsOverrideToFullscreenEnabled_returnsTrue()
+ public void testGetUserMinAspectRatioEntry_enabledFullscreenCompatChange_returnsFullscreen() {
+ setIsOverrideToFullscreenEnabledBecauseCompatChange(true);
+ assertUnsetIsFullscreen();
+ }
+
+ @Test
+ public void testGetUserMinAspectRatioEntry_enabledFullscreenOverrideUniRes_returnsFullscreen() {
+ setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(true);
+ assertUnsetIsFullscreen();
+ }
+
+ @Test
+ public void testGetUserMinAspectRatioEntry_noFullscreenCompatChange_returnsUnchanged() {
+ setIsOverrideToFullscreenEnabledBecauseCompatChange(false);
+ assertUnsetIsAppDefault();
+ }
+
+ @Test
+ public void testGetUserMinAspectRatioEntry_noFullscreenUnivRes_returnsUnchanged() {
+ setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(false);
+ assertUnsetIsAppDefault();
+ }
+
+ @Test
+ public void testIsOverrideToFullscreenEnabledCompatChange_returnsTrue()
throws PackageManager.NameNotFoundException {
- setIsOverrideToFullscreenEnabled(true);
+ setIsOverrideToFullscreenEnabledBecauseCompatChange(true);
+ assertTrue(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId()));
+
+ mockProperty(PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE, true);
+ assertTrue(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId()));
+ }
+
+ @Test
+ public void testIsOverrideToFullscreenEnabledUnivRes_returnsTrue()
+ throws PackageManager.NameNotFoundException {
+ setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(true);
assertTrue(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId()));
mockProperty(PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE, true);
@@ -370,7 +400,7 @@
@Test
public void testIsOverrideToFullscreenEnabled_optOut_returnsFalse()
throws PackageManager.NameNotFoundException {
- setIsOverrideToFullscreenEnabled(true);
+ setIsOverrideToFullscreenEnabledBecauseCompatChange(true);
mockProperty(PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE, false);
assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId()));
}
@@ -382,6 +412,12 @@
}
@Test
+ public void testIsOverrideToFullscreenEnabledUnivRes_flagDisabled_returnsFalse() {
+ mUtils.setFullscreenCompatChange(true);
+ assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId()));
+ }
+
+ @Test
public void testIsOverrideToFullscreenEnabled_optionDisabled_returnsFalse() {
mUtils.setFullscreenCompatChange(true);
when(mUtils.hasAspectRatioOption(USER_MIN_ASPECT_RATIO_FULLSCREEN, mPackageName))
@@ -389,7 +425,7 @@
assertFalse(mUtils.isOverrideToFullscreenEnabled(mPackageName, mContext.getUserId()));
}
- private void setIsOverrideToFullscreenEnabled(boolean enabled) {
+ private void setIsOverrideToFullscreenEnabledBecauseCompatChange(boolean enabled) {
if (enabled) {
mSetFlagsRule.enableFlags(FLAG_USER_MIN_ASPECT_RATIO_APP_DEFAULT);
mUtils = new FakeUserAspectRatioManager(mContext, mIPm);
@@ -399,6 +435,16 @@
.thenReturn(enabled);
}
+ private void setIsOverrideToFullscreenEnabledBecauseUniversalResizeable(boolean enabled) {
+ if (enabled) {
+ mSetFlagsRule.enableFlags(FLAG_USER_MIN_ASPECT_RATIO_APP_DEFAULT);
+ mUtils = new FakeUserAspectRatioManager(mContext, mIPm);
+ }
+ mUtils.setUniversalResizeable(enabled);
+ when(mUtils.hasAspectRatioOption(USER_MIN_ASPECT_RATIO_FULLSCREEN, mPackageName))
+ .thenReturn(enabled);
+ }
+
private void enableAllDefaultAspectRatioOptions() {
final int[] aspectRatioOptions = new int[] {
USER_MIN_ASPECT_RATIO_UNSET,
@@ -457,6 +503,7 @@
private static class FakeUserAspectRatioManager extends UserAspectRatioManager {
private boolean mFullscreenCompatChange = false;
+ private boolean mIsUniversalResizeable = false;
private FakeUserAspectRatioManager(@NonNull Context context, IPackageManager pm) {
super(context, pm);
@@ -467,8 +514,17 @@
return mFullscreenCompatChange;
}
+ @Override
+ boolean isUniversalResizeable(String pkgName, int userId) {
+ return mIsUniversalResizeable;
+ }
+
void setFullscreenCompatChange(boolean enabled) {
mFullscreenCompatChange = enabled;
}
+
+ void setUniversalResizeable(boolean enabled) {
+ mIsUniversalResizeable = enabled;
+ }
}
}
diff --git a/tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java b/tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
index 7e942d9..9a09bf1 100644
--- a/tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/deviceinfo/BuildNumberPreferenceControllerTest.java
@@ -93,7 +93,7 @@
doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
when(mContext.getSystemService(BiometricManager.class)).thenReturn(mBiometricManager);
when(mBiometricManager.canAuthenticate(mContext.getUserId(),
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ BiometricManager.Authenticators.IDENTITY_CHECK))
.thenReturn(BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE);
mFactory = FakeFeatureFactory.setupForTest();
@@ -213,7 +213,7 @@
public void onActivityResult_confirmPasswordRequestCompleted_launchBiometricPrompt() {
when(mUserManager.isAdminUser()).thenReturn(true);
when(mBiometricManager.canAuthenticate(mContext.getUserId(),
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
+ BiometricManager.Authenticators.IDENTITY_CHECK))
.thenReturn(BiometricManager.BIOMETRIC_SUCCESS);
final boolean activityResultHandled = mController.onActivityResult(
@@ -233,8 +233,8 @@
public void onActivityResult_confirmPasswordRequestCompleted_mandatoryBiometricsError() {
when(mUserManager.isAdminUser()).thenReturn(true);
when(mBiometricManager.canAuthenticate(mContext.getUserId(),
- BiometricManager.Authenticators.MANDATORY_BIOMETRICS))
- .thenReturn(BiometricManager.BIOMETRIC_ERROR_MANDATORY_NOT_ACTIVE);
+ BiometricManager.Authenticators.IDENTITY_CHECK))
+ .thenReturn(BiometricManager.BIOMETRIC_ERROR_IDENTITY_CHECK_NOT_ACTIVE);
final boolean activityResultHandled = mController.onActivityResult(
BuildNumberPreferenceController.REQUEST_CONFIRM_PASSWORD_FOR_DEV_PREF,
diff --git a/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt b/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt
index 04cece8..a8c5e68 100644
--- a/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt
+++ b/tests/unit/src/com/android/settings/fingerprint2/enrollment/viewmodel/FingerprintEnrollFindSensorViewModelV2Test.kt
@@ -39,6 +39,7 @@
import com.android.settings.testutils2.FakeFingerprintManagerInteractor
import com.android.systemui.biometrics.shared.model.toFingerprintSensor
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
@@ -106,7 +107,10 @@
)
accessibilityInteractor =
object : AccessibilityInteractor {
- override val isAccessibilityEnabled: Flow<Boolean> = flowOf(false)
+ override fun isEnabledFlow(scope: CoroutineScope): Flow<Boolean> = flowOf(true)
+ override val isEnabled: Boolean
+ get() = true
+ override fun announce(clazz: Class<*>, announcement: CharSequence?) {}
}
foldStateInteractor =
object : FoldStateInteractor {
diff --git a/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt b/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt
index 95f69da..385de30 100644
--- a/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt
+++ b/tests/unit/src/com/android/settings/fuelgauge/batteryusage/AppOptModeSharedPreferencesUtilsTest.kt
@@ -228,7 +228,7 @@
@Test
fun updateBatteryOptimizationMode_updateToOptimizedMode_verifyAction() {
whenever(testBatteryOptimizeUtils?.isOptimizeModeMutable).thenReturn(true)
- whenever(testBatteryOptimizeUtils?.getAppOptimizationMode(true))
+ whenever(testBatteryOptimizeUtils?.getAppOptimizationMode())
.thenReturn(MODE_UNRESTRICTED)
val currentOptMode =
@@ -246,9 +246,9 @@
}
@Test
- fun updateBatteryOptimizationMode_optimizationModeNotChanged_verifyAction() {
+ fun updateBatteryOptimizationMode_optimizationModeImmutable_verifyAction() {
whenever(testBatteryOptimizeUtils?.isOptimizeModeMutable).thenReturn(false)
- whenever(testBatteryOptimizeUtils?.getAppOptimizationMode(true))
+ whenever(testBatteryOptimizeUtils?.appOptimizationMode)
.thenReturn(MODE_UNRESTRICTED)
val currentOptMode =
@@ -268,7 +268,7 @@
@Test
fun updateBatteryOptimizationMode_updateToSameOptimizationMode_verifyAction() {
whenever(testBatteryOptimizeUtils?.isOptimizeModeMutable).thenReturn(true)
- whenever(testBatteryOptimizeUtils?.getAppOptimizationMode(true)).thenReturn(MODE_RESTRICTED)
+ whenever(testBatteryOptimizeUtils?.appOptimizationMode).thenReturn(MODE_RESTRICTED)
val currentOptMode =
AppOptModeSharedPreferencesUtils.updateBatteryOptimizationMode(
@@ -286,7 +286,7 @@
private fun insertAppOptModeEventForTest(expirationTime: Long, mode: Int = MODE_OPTIMIZED) {
whenever(testBatteryOptimizeUtils?.isOptimizeModeMutable).thenReturn(true)
- whenever(testBatteryOptimizeUtils?.getAppOptimizationMode(true)).thenReturn(mode)
+ whenever(testBatteryOptimizeUtils?.appOptimizationMode).thenReturn(mode)
AppOptModeSharedPreferencesUtils.updateAppOptModeExpirationInternal(
context,
mutableListOf(UID),
diff --git a/tests/unit/src/com/android/settings/language/LanguageSettingScreenTest.kt b/tests/unit/src/com/android/settings/language/LanguageSettingScreenTest.kt
new file mode 100644
index 0000000..7b519a2
--- /dev/null
+++ b/tests/unit/src/com/android/settings/language/LanguageSettingScreenTest.kt
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.settings.language
+
+import android.content.ComponentName
+import android.content.Context
+import android.content.ContextWrapper
+import android.content.pm.PackageManager
+import android.content.res.Resources
+import com.android.settings.Settings.LanguageSettingsActivity
+import com.android.settings.flags.Flags
+import com.android.settingslib.preference.CatalystScreenTestCase
+import com.google.common.truth.Truth.assertThat
+import org.junit.Assert
+import org.junit.Test
+import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.kotlin.doReturn
+import org.mockito.kotlin.mock
+import org.mockito.kotlin.stub
+
+class LanguageSettingScreenTest: CatalystScreenTestCase() {
+ override val preferenceScreenCreator = LanguageSettingScreen()
+
+ override val flagName: String
+ get() = Flags.FLAG_CATALYST_LANGUAGE_SETTING
+
+ @Test
+ fun key() {
+ assertThat(preferenceScreenCreator.key).isEqualTo(LanguageSettingScreen.KEY)
+ }
+
+ override fun migration() {}
+}
diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java
index 246fad6..8b44c98 100644
--- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java
+++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressFeminineControllerTest.java
@@ -31,7 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.widget.TickButtonPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressFeminineController mController;
- private TickButtonPreference mFemininePreference;
- private TickButtonPreference mMasculinePreference;
- private TickButtonPreference mNotSpecifiedPreference;
- private TickButtonPreference mNeutralPreference;
+ private SelectorWithWidgetPreference mFemininePreference;
+ private SelectorWithWidgetPreference mMasculinePreference;
+ private SelectorWithWidgetPreference mNotSpecifiedPreference;
+ private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
- mNotSpecifiedPreference = new TickButtonPreference(mContext);
+ mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
- mFemininePreference = new TickButtonPreference(mContext);
+ mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
- mMasculinePreference = new TickButtonPreference(mContext);
+ mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
- mNeutralPreference = new TickButtonPreference(mContext);
+ mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsFeminine_FeminineIsSelected() {
- TickButtonPreference selectedPreference =
- (TickButtonPreference) mPreferenceScreen.getPreference(2);
+ SelectorWithWidgetPreference selectedPreference =
+ (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(2);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_FEMININE);
diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java
index f5ed395..62ba899 100644
--- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java
+++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressMasculineControllerTest.java
@@ -31,7 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.widget.TickButtonPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressMasculineController mController;
- private TickButtonPreference mFemininePreference;
- private TickButtonPreference mMasculinePreference;
- private TickButtonPreference mNotSpecifiedPreference;
- private TickButtonPreference mNeutralPreference;
+ private SelectorWithWidgetPreference mFemininePreference;
+ private SelectorWithWidgetPreference mMasculinePreference;
+ private SelectorWithWidgetPreference mNotSpecifiedPreference;
+ private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
- mNotSpecifiedPreference = new TickButtonPreference(mContext);
+ mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
- mFemininePreference = new TickButtonPreference(mContext);
+ mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
- mMasculinePreference = new TickButtonPreference(mContext);
+ mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
- mNeutralPreference = new TickButtonPreference(mContext);
+ mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsMasculine_MasculineIsSelected() {
- TickButtonPreference selectedPreference =
- (TickButtonPreference) mPreferenceScreen.getPreference(3);
+ SelectorWithWidgetPreference selectedPreference =
+ (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(3);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_MASCULINE);
diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java
index 0e53198..8fd836b 100644
--- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java
+++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNeutralControllerTest.java
@@ -31,7 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.widget.TickButtonPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressNeutralController mController;
- private TickButtonPreference mFemininePreference;
- private TickButtonPreference mMasculinePreference;
- private TickButtonPreference mNotSpecifiedPreference;
- private TickButtonPreference mNeutralPreference;
+ private SelectorWithWidgetPreference mFemininePreference;
+ private SelectorWithWidgetPreference mMasculinePreference;
+ private SelectorWithWidgetPreference mNotSpecifiedPreference;
+ private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
- mNotSpecifiedPreference = new TickButtonPreference(mContext);
+ mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
- mFemininePreference = new TickButtonPreference(mContext);
+ mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
- mMasculinePreference = new TickButtonPreference(mContext);
+ mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
- mNeutralPreference = new TickButtonPreference(mContext);
+ mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsNotSpecified_NeutralIsSelected() {
- TickButtonPreference selectedPreference =
- (TickButtonPreference) mPreferenceScreen.getPreference(4);
+ SelectorWithWidgetPreference selectedPreference =
+ (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(4);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NEUTRAL);
diff --git a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java
index 96bac08..4e9c3ee 100644
--- a/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java
+++ b/tests/unit/src/com/android/settings/localepicker/TermsOfAddressNotSpecifiedControllerTest.java
@@ -31,7 +31,7 @@
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
-import com.android.settings.widget.TickButtonPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.Before;
import org.junit.Ignore;
@@ -53,10 +53,10 @@
private PreferenceCategory mPreferenceCategory;
private PreferenceScreen mPreferenceScreen;
private TermsOfAddressNotSpecifiedController mController;
- private TickButtonPreference mFemininePreference;
- private TickButtonPreference mMasculinePreference;
- private TickButtonPreference mNotSpecifiedPreference;
- private TickButtonPreference mNeutralPreference;
+ private SelectorWithWidgetPreference mFemininePreference;
+ private SelectorWithWidgetPreference mMasculinePreference;
+ private SelectorWithWidgetPreference mNotSpecifiedPreference;
+ private SelectorWithWidgetPreference mNeutralPreference;
private GrammaticalInflectionManager mGrammaticalInflectionManager;
@Before
@@ -74,13 +74,13 @@
mPreferenceScreen = mPreferenceManager.createPreferenceScreen(mContext);
mPreferenceCategory = new PreferenceCategory(mContext);
mPreferenceCategory.setKey(KEY_CATEGORY_TERMS_OF_ADDRESS);
- mNotSpecifiedPreference = new TickButtonPreference(mContext);
+ mNotSpecifiedPreference = new SelectorWithWidgetPreference(mContext);
mNotSpecifiedPreference.setKey(KEY_NOT_SPECIFIED);
- mFemininePreference = new TickButtonPreference(mContext);
+ mFemininePreference = new SelectorWithWidgetPreference(mContext);
mFemininePreference.setKey(KEY_FEMININE);
- mMasculinePreference = new TickButtonPreference(mContext);
+ mMasculinePreference = new SelectorWithWidgetPreference(mContext);
mMasculinePreference.setKey(KEY_MASCULINE);
- mNeutralPreference = new TickButtonPreference(mContext);
+ mNeutralPreference = new SelectorWithWidgetPreference(mContext);
mNeutralPreference.setKey(KEY_NEUTRAL);
mPreferenceScreen.addPreference(mPreferenceCategory);
mPreferenceScreen.addPreference(mNotSpecifiedPreference);
@@ -95,8 +95,8 @@
@Test
@Ignore("b/339543490")
public void displayPreference_setGrammaticalGenderIsNotSpecified_NotSpecifiedIsSelected() {
- TickButtonPreference selectedPreference =
- (TickButtonPreference) mPreferenceScreen.getPreference(1);
+ SelectorWithWidgetPreference selectedPreference =
+ (SelectorWithWidgetPreference) mPreferenceScreen.getPreference(1);
selectedPreference.performClick();
assertThat(selectedPreference.getKey()).isEqualTo(KEY_NOT_SPECIFIED);
diff --git a/tests/unit/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
index adc8dc0..ab57f4b 100644
--- a/tests/unit/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceControllerTest.java
@@ -18,7 +18,6 @@
import static androidx.lifecycle.Lifecycle.Event.ON_START;
-import static com.android.settings.network.telephony.MobileNetworkUtils.getRafFromNetworkType;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.CDMA;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.EVDO;
import static com.android.settings.network.telephony.TelephonyConstants.RadioAccessFamily.GSM;
@@ -37,6 +36,7 @@
import android.content.Context;
import android.os.PersistableBundle;
import android.telephony.CarrierConfigManager;
+import android.telephony.RadioAccessFamily;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -304,7 +304,7 @@
public void onPreferenceChange_updateSuccess() {
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
doReturn(true).when(mTelephonyManager).setPreferredNetworkTypeBitmask(
- getRafFromNetworkType(
+ RadioAccessFamily.getRafFromNetworkType(
TelephonyManagerConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA));
mController.updateState(mPreference);
@@ -321,7 +321,8 @@
public void onPreferenceChange_updateFail() {
mockEnabledNetworkMode(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA);
doReturn(false).when(mTelephonyManager).setPreferredNetworkTypeBitmask(
- getRafFromNetworkType(TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
+ RadioAccessFamily.getRafFromNetworkType(
+ TelephonyManagerConstants.NETWORK_MODE_LTE_GSM_WCDMA));
mController.updateState(mPreference);
mController.onViewCreated(new TestLifecycleOwner());
@@ -438,7 +439,7 @@
}
private void mockAccessFamily(int networkMode) {
- doReturn(MobileNetworkUtils.getRafFromNetworkType(networkMode))
+ doReturn((long) RadioAccessFamily.getRafFromNetworkType(networkMode))
.when(mTelephonyManager)
.getSupportedRadioAccessFamily();
}
diff --git a/tests/unit/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
index f22ad3b..663945d 100644
--- a/tests/unit/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceControllerTest.java
@@ -30,6 +30,7 @@
import android.content.Context;
import android.os.PersistableBundle;
+import android.telephony.RadioAccessFamily;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -111,7 +112,7 @@
verify(mTelephonyManager, times(1)).setAllowedNetworkTypesForReason(
TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER,
- MobileNetworkUtils.getRafFromNetworkType(
+ RadioAccessFamily.getRafFromNetworkType(
TelephonyManagerConstants.NETWORK_MODE_LTE_TDSCDMA));
}
}
diff --git a/tests/unit/src/com/android/settings/regionalpreferences/FirstDayOfWeekItemListControllerTest.java b/tests/unit/src/com/android/settings/regionalpreferences/FirstDayOfWeekItemListControllerTest.java
index 3b72cba..1881e01 100644
--- a/tests/unit/src/com/android/settings/regionalpreferences/FirstDayOfWeekItemListControllerTest.java
+++ b/tests/unit/src/com/android/settings/regionalpreferences/FirstDayOfWeekItemListControllerTest.java
@@ -25,16 +25,15 @@
import android.os.Looper;
import android.provider.Settings;
-import com.android.internal.app.LocalePicker;
-import com.android.settings.widget.TickButtonPreference;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.android.internal.app.LocalePicker;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -91,8 +90,9 @@
@Test
public void displayPreference_setSelectPreferredFirstDayOfWeekIsDefault() {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(0);
- pref.performClick();
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceCategory.getPreference(0);
+ pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -103,8 +103,9 @@
@Test
public void displayPreference_setSelectPreferredFirstDayOfWeekIsSunday() {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(1);
- pref.performClick();
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceCategory.getPreference(1);
+ pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -114,8 +115,9 @@
@Test
public void displayPreference_setSelectPreferredFirstDayOfWeekIsMonday() {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(2);
- pref.performClick();
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceCategory.getPreference(2);
+ pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
diff --git a/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java b/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java
index 50e21fe..91ecbf9 100644
--- a/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java
+++ b/tests/unit/src/com/android/settings/regionalpreferences/NumberingSystemItemControllerTest.java
@@ -38,7 +38,7 @@
import com.android.internal.app.LocalePicker;
import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.widget.TickButtonPreference;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
import org.junit.After;
import org.junit.Before;
@@ -82,7 +82,8 @@
NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
bundle.putString(
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
- TickButtonPreference preference = new TickButtonPreference(mApplicationContext);
+ SelectorWithWidgetPreference preference =
+ new SelectorWithWidgetPreference(mApplicationContext);
preference.setKey("I_am_the_key");
mPreferenceScreen.addPreference(preference);
mController = new NumberingSystemItemController(mApplicationContext, bundle);
@@ -110,7 +111,8 @@
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
bundle.putString(
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, Locale.US.toLanguageTag());
- TickButtonPreference preference = new TickButtonPreference(mApplicationContext);
+ SelectorWithWidgetPreference preference =
+ new SelectorWithWidgetPreference(mApplicationContext);
preference.setKey("test_key");
mPreferenceScreen.addPreference(preference);
mController = new NumberingSystemItemController(mApplicationContext, bundle);
@@ -133,8 +135,10 @@
NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
bundle.putString(
NumberingSystemItemController.KEY_SELECTED_LANGUAGE, "ar-BH");
- TickButtonPreference defaultPreference = new TickButtonPreference(mApplicationContext);
- TickButtonPreference numberPreference = new TickButtonPreference(mApplicationContext);
+ SelectorWithWidgetPreference defaultPreference =
+ new SelectorWithWidgetPreference(mApplicationContext);
+ SelectorWithWidgetPreference numberPreference =
+ new SelectorWithWidgetPreference(mApplicationContext);
defaultPreference.setKey("default");
numberPreference.setKey("latn");
mPreferenceScreen.addPreference(defaultPreference);
diff --git a/tests/unit/src/com/android/settings/regionalpreferences/TemperatureUnitListControllerTest.java b/tests/unit/src/com/android/settings/regionalpreferences/TemperatureUnitListControllerTest.java
index 0417443..deedb64 100644
--- a/tests/unit/src/com/android/settings/regionalpreferences/TemperatureUnitListControllerTest.java
+++ b/tests/unit/src/com/android/settings/regionalpreferences/TemperatureUnitListControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.regionalpreferences;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.spy;
import android.content.Context;
@@ -24,16 +25,15 @@
import android.os.Looper;
import android.provider.Settings;
-import com.android.internal.app.LocalePicker;
-import com.android.settings.widget.TickButtonPreference;
-
-import androidx.preference.PreferenceManager;
-import androidx.preference.Preference;
import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
+import com.android.internal.app.LocalePicker;
+import com.android.settingslib.widget.SelectorWithWidgetPreference;
+
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -88,8 +88,9 @@
@Test
public void displayPreference_setSelectPreferredTemperatureUnitIsDefault() {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(0);
- pref.performClick();
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceCategory.getPreference(0);
+ pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -101,8 +102,9 @@
@Test
public void displayPreference_setSelectPreferredTemperatureUnitIsCelsius() {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(1);
- pref.performClick();
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceCategory.getPreference(1);
+ pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
@@ -112,8 +114,9 @@
@Test
public void displayPreference_setSelectPreferredTemperatureUnitIsFahrenhe() {
- TickButtonPreference pref = (TickButtonPreference) mPreferenceCategory.getPreference(2);
- pref.performClick();
+ SelectorWithWidgetPreference pref =
+ (SelectorWithWidgetPreference) mPreferenceCategory.getPreference(2);
+ pref.onClick();
String record = Settings.System.getString(
mContext.getContentResolver(), Settings.System.LOCALE_PREFERENCES);
diff --git a/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java b/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
index 0e51733..a3f82b5 100644
--- a/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
+++ b/tests/unit/src/com/android/settings/security/SecurityDashboardActivityTest.java
@@ -31,6 +31,7 @@
import android.content.Intent;
import android.content.pm.PackageManager;
+import androidx.test.annotation.UiThreadTest;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
@@ -90,6 +91,7 @@
}
@Test
+ @UiThreadTest
public void noAvailableAlternativeFragmentAvailable_defaultFragmentSet() {
when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
.thenReturn(false);
@@ -99,6 +101,7 @@
}
@Test
+ @UiThreadTest
public void alternativeFragmentAvailable_alternativeFragmentSet() {
when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
.thenReturn(true);
@@ -110,6 +113,7 @@
}
@Test
+ @UiThreadTest
public void noAvailableAlternativeFragmentAvailable_alternativeFragmentNotValid() {
when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
.thenReturn(false);
@@ -118,6 +122,7 @@
}
@Test
+ @UiThreadTest
public void alternativeFragmentAvailable_alternativeFragmentIsValid() {
when(mSecuritySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment())
.thenReturn(true);
@@ -128,6 +133,7 @@
}
@Test
+ @UiThreadTest
public void onCreate_whenSafetyCenterEnabled_redirectsToSafetyCenter() {
when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(true);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
@@ -139,6 +145,7 @@
}
@Test
+ @UiThreadTest
public void onCreate_whenSafetyCenterDisabled_doesntRedirectToSafetyCenter() {
when(mSafetyCenterManagerWrapper.isEnabled(any(Context.class))).thenReturn(false);