Merge "Move accessibility package to sdk 26"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0a8bcb6..1e5964e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -202,6 +202,31 @@
android:value="true" />
</activity>
+ <activity android:name=".Settings$ConnectedDeviceDashboardActivityOld"
+ android:taskAffinity="com.android.settings"
+ android:label="@string/connected_devices_dashboard_title"
+ android:icon="@drawable/ic_devices_other"
+ android:parentActivityName="Settings">
+ <intent-filter android:priority="1">
+ <action android:name="android.settings.NFC_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.VOICE_LAUNCH" />
+ </intent-filter>
+ <intent-filter android:priority="10">
+ <action android:name="com.android.settings.action.SETTINGS"/>
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld"/>
+ <meta-data android:name="com.android.settings.category"
+ android:value="com.android.settings.category.ia.homepage"/>
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true" />
+ </activity>
+
<activity android:name="AirplaneModeVoiceActivity"
android:label="@string/wireless_networks_settings_title"
android:theme="@*android:style/Theme.DeviceDefault.Light.Voice"
@@ -251,6 +276,8 @@
android:value="com.android.settings.wifi.WifiSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
+ <meta-data android:name="android.metadata.SLICE_URI"
+ android:value="content://com.android.settings.slices/wifi" />
</activity>
<!-- Keep compatibility with old shortcuts. -->
@@ -1889,31 +1916,6 @@
android:value="com.android.settings.ApnEditor" />
</activity>
- <activity android:name="Settings$DevelopmentSettingsActivity"
- android:label="@string/development_settings_title"
- android:icon="@drawable/ic_settings_development"
- android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings">
- <!-- Enable if we need to revert to the old development settings
- <intent-filter android:priority="1">
- <action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
- <action android:name="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- -->
- <intent-filter android:priority="50">
- <action android:name="com.android.settings.action.SETTINGS" />
- </intent-filter>
- <meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
- <meta-data android:name="com.android.settings.summary"
- android:resource="@string/summary_empty"/>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.development.DevelopmentSettings" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity>
-
<activity android:name="Settings$DevelopmentSettingsDashboardActivity"
android:label="@string/development_settings_title"
android:icon="@drawable/ic_settings_development"
@@ -3308,6 +3310,18 @@
</intent-filter>
</activity>
+ <provider android:name=".SettingsSliceProvider"
+ android:authorities="com.android.settings.slices"
+ android:exported="true">
+ </provider>
+
+ <receiver
+ android:name=".SliceBroadcastReceiver" >
+ <intent-filter>
+ <action android:name="com.android.settings.slice.action.WIFI_CHANGED"/>
+ </intent-filter>
+ </receiver>
+
<!-- This is the longest AndroidManifest.xml ever. -->
</application>
</manifest>
diff --git a/res/layout/search_slice_item.xml b/res/layout/search_slice_item.xml
new file mode 100644
index 0000000..1607209
--- /dev/null
+++ b/res/layout/search_slice_item.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2017 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:minHeight="?android:attr/listPreferredItemHeight"
+ android:paddingTop="16dp"
+ android:paddingBottom="16dp"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:background="?android:attr/selectableItemBackground"
+ android:clipToPadding="false">
+
+ <include layout="@layout/search_icon_view"/>
+
+ <android.app.slice.widget.SliceView
+ android:id="@android:id/content"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 937c9fc..f610f60 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -627,7 +627,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"لا يسمح مشرف الجهاز باستخدام كلمة مرور تم استخدامها مؤخرًا"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"غير مسموح باستخدام الترتيب التصاعدي أو التنازلي أو المكرر للأرقام"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"موافق"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"تأكيد"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"إلغاء"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"محو"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"إلغاء"</string>
@@ -712,16 +712,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"سيتم إلغاء توصيل <xliff:g id="DEVICE_NAME">%1$s</xliff:g> من صوت السماعة بدون استخدام اليدين."</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"سيتم إلغاء توصيل <xliff:g id="DEVICE_NAME">%1$s</xliff:g> من جهاز الإرسال."</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"سيتم قطع الدخول إلى الإنترنت عبر <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"سيتم قطع اتصال <xliff:g id="DEVICE_NAME">%1$s</xliff:g> من مشاركة الاتصال بالإنترنت لهذا الجهاز اللوحي."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"سيتم قطع اتصال <xliff:g id="DEVICE_NAME">%1$s</xliff:g> من مشاركة الاتصال بالإنترنت لهذا الجهاز."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"سيتم قطع اتصال <xliff:g id="DEVICE_NAME">%1$s</xliff:g> من مشاركة اتصال الإنترنت على هذا الجهاز اللوحي."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"سيتم قطع اتصال <xliff:g id="DEVICE_NAME">%1$s</xliff:g> من مشاركة اتصال الإنترنت على هذا الهاتف."</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"جهاز بلوتوث المقترن"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"اتصال"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"اتصال بجهاز البلوتوث"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"استخدام مع"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"إعادة تسمية"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"السماح بعمليات نقل الملفات الواردة"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"متصل بالجهاز لدخول الإنترنت"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"مشاركة الاتصال المحلي بالإنترنت مع الجهاز"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"متصل بالجهاز للدخول إلى الإنترنت"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"تتم مشاركة اتصال الإنترنت المحلي مع الجهاز"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"إعدادات الإرساء"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"استخدام الإرساء للإعدادات الصوتية"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"كهاتف بسماعة خارجية"</string>
@@ -774,8 +774,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"غير متاح لأنه تم إيقاف فحص شبكات Wi‑Fi"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"لاستخدام الميزة، اختر مقدِّم خدمة تقييم شبكة"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"تجنب الاتصالات الضعيفة"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"عدم استخدام شبكات Wi-Fi ما لم يكن لها اتصال إنترنت جيد"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"استخدام الشبكات ذات اتصال الإنترنت الجيد فقط"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"عدم استخدام شبكة Wi-Fi إلا إذا كانت توفِّر اتصالاً جيدًا بالإنترنت"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"استخدام الشبكات التي توفِّر اتصالاً جيدًا بالإنترنت فقط"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"الاتّصال بالشبكات المفتوحة"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"الاتصال تلقائيًا بالشبكات العامة العالية الجودة"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"لاستخدام الميزة، اختر مقدِّم خدمة تقييم شبكة"</string>
@@ -791,9 +791,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"تحسين Wi-Fi"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"تقليل استخدام البطارية إلى الحد الأدنى عند تشغيل Wi-Fi"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"تقييد طاقة البطارية لاتصال Wi‑Fi"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"التبديل إلى بيانات الجوّال في حالة انقطاع اتصال شبكة Wi‑Fi بالإنترنت."</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"التبديل إلى بيانات الجوّال في حالة انقطاع اتصال شبكة Wi‑Fi بالإنترنت."</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"التبديل إلى بيانات الجوال تلقائيًا"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"يمكنك استخدام بيانات شبكة الجوّال عند عدم اتصال شبكة Wi‑Fi بالإنترنت؛ وقد يتم تطبيق رسوم مقابل استخدام بيانات شبكة الجوال."</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"يمكنك استخدام بيانات شبكة الجوّال إذا تعذّر الدخول إلى الإنترنت عبر شبكة Wi‑Fi، وقد يتم فرض رسوم على استخدام البيانات."</string>
<string name="wifi_add_network" msgid="6234851776910938957">"إضافة شبكة"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"تفضيلات Wi-Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"ستتم إعادة تشغيل شبكة Wi‑Fi تلقائيًا"</string>
@@ -826,10 +826,10 @@
<string name="wifi_wps_complete" msgid="2388138550456729134">"نجحت عملية WPS. جارٍ الاتصال بالشبكة…"</string>
<string name="wifi_wps_connected" msgid="7153432445748931183">"تم الاتصال بشبكة Wi-Fi <xliff:g id="NETWORK_NAME">%s</xliff:g>."</string>
<string name="wifi_wps_in_progress" msgid="3372311348221357944">"إعداد WPS قيد التقدم فعلاً ويمكن أن يستغرق اكتماله فترة قد تصل إلى دقيقتين"</string>
- <string name="wifi_wps_failed_generic" msgid="5668775022238832527">"أخفقت عملية WPS. يرجى إعادة المحاولة خلال بضع دقائق."</string>
+ <string name="wifi_wps_failed_generic" msgid="5668775022238832527">"تعذّر إتمام عملية WPS. يرجى إعادة المحاولة خلال بضع دقائق."</string>
<string name="wifi_wps_failed_wep" msgid="2702820087105284461">"إعداد أمان جهاز التوجيه اللاسلكي (WEP) ليس متوافقًا"</string>
<string name="wifi_wps_failed_tkip" msgid="4282401586860713349">"إعداد أمان جهاز التوجيه اللاسلكي (TKIP) ليس متوافقًا"</string>
- <string name="wifi_wps_failed_auth" msgid="1174614355181181958">"أخفقت المصادقة. يُرجى إعادة المحاولة."</string>
+ <string name="wifi_wps_failed_auth" msgid="1174614355181181958">"تعذّرت المصادقة. يُرجى إعادة المحاولة."</string>
<string name="wifi_wps_failed_overlap" msgid="5159533685596844778">"تم اكتشاف جلسة WPS أخرى، يُرجى إعادة المحاولة خلال بضع دقائق."</string>
<string name="wifi_wps_failed_wifi_disconnected" msgid="3829472117754104164">"تم قطع الاتصال بشبكة Wi‑Fi. وتم إلغاء إعداد WPS."</string>
<string name="wifi_ssid" msgid="5519636102673067319">"اسم الشبكة"</string>
@@ -877,9 +877,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"هل تريد تسجيل الدخول للاتصال؟"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"يتطلب <xliff:g id="APP_NAME">%1$s</xliff:g> منك تسجيل الدخول عبر الإنترنت قبل الاتصال بالشبكة."</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"اتصال"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"لا تتضمن هذه الشبكة اتصالاً بالإنترنت. هل تريد البقاء متصلاً؟"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"لا توفِّر هذه الشبكة اتصالاً بالإنترنت. هل تريد متابعة الاتصال؟"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"عدم السؤال مرة أخرى لهذه الشبكة"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"شبكة Wi‑Fi غير متصلة بالإنترنت"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"شبكة Wi‑Fi غير متصلة بالإنترنت"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"يمكنك التبديل إلى شبكة الجوّال عندما يكون اتصال Wi‑Fi سيئًا، وقد يتم فرض رسوم على استخدام بيانات شبكة الجوّال."</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"التبديل إلى شبكة الجوال"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"الإبقاء على الاتصال بشبكة Wi‑Fi"</string>
@@ -904,7 +904,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"إعدادات Wi-Fi المتقدمة"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"عنوان Mac"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"عنوان IP"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"معلومات الشبكة"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"تفاصيل الشبكة"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"قناع الشبكة الفرعية"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"نظام أسماء النطاقات"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"عناوين IPv6"</string>
@@ -938,16 +938,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"هل تريد إلغاء الدعوة للاتصال بـ <xliff:g id="PEER_NAME">%1$s</xliff:g>؟"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"حذف هذه المجموعة؟"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"نقطة اتصال Wi‑Fi"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"لا تتم مشاركة اتصال الإنترنت أو المحتوى مع الأجهزة الأخرى"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"تتم مشاركة اتصال الإنترنت لهذا الجهاز اللوحي عبر نقطة الاتصال"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"تتم مشاركة اتصال الإنترنت لهذا الهاتف عبر نقطة الاتصال"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"يشارك التطبيق المحتوى. لمشاركة اتصال الإنترنت، يجب إيقاف نقطة الاتصال، ثم تشغيلها."</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"لا تتم مشاركة اتصال الإنترنت أو المحتوى مع الأجهزة الأخرى"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"تتم مشاركة اتصال الإنترنت على هذا الجهاز اللوحي عبر نقطة الاتصال"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"تتم مشاركة اتصال الإنترنت على هذا الهاتف عبر نقطة الاتصال"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"يشارك التطبيق المحتوى. لمشاركة اتصال الإنترنت، يجب إيقاف نقطة الاتصال، ثم تشغيلها."</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"اسم نقطة الاتصال"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"جارٍ تشغيل <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"يمكن توصيل الأجهزة الأخرى بشبكة <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"كلمة مرور نقطة الاتصال"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"نطاق AP"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"يمكنك استخدام نقطة اتصال لإنشاء شبكة Wi‑Fi لأجهزتك الأخرى. وتوفر نقطة الاتصال اتصال الإنترنت باستخدام اتصال بيانات الجوّال. وقد يتم تطبيق رسوم بيانات الجوّال الإضافية."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"يمكنك استخدام نقطة اتصال لإنشاء شبكة Wi‑Fi لأجهزتك الأخرى. حيث توفِّر نقطة الاتصال إمكانية الاتصال بالإنترنت باستخدام اتصال بيانات الجوّال. وقد يتم فرض رسوم إضافية على بيانات الجوّال."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"يمكن للتطبيقات إنشاء نقطة اتصال لمشاركة المحتوى مع الأجهزة المجاورة."</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"جارٍ تشغيل نقطة الاتصال…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"جارٍ إيقاف نقطة الاتصال…"</string>
@@ -995,8 +995,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"عند تشغيل الاتصال عبر Wi-Fi، يمكن للهاتف توجيه المكالمات عبر شبكات Wi-Fi أو عبر شبكة مشغّل شبكة الجوّال، حسب تفضيلك وحسب الإشارة الأقوى. وقبل تشغيل هذه الميزة، راجع رسوم مشغل شبكة الجوّال والتفاصيل الأخرى حول شبكة الجوّال."</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"تحديث عنوان الطوارئ"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"العنوان الذي تستخدمه خدمات الطوارئ باعتباره موقعك في حالة إجراء مكالمة طوارئ باستخدام شبكة Wi‑Fi"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"عنوان الطوارئ"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"يتم اعتباره موقعك الجغرافي عند إجراء مكالمة طوارئ عبر Wi‑Fi"</string>
<string name="display_settings_title" msgid="1708697328627382561">"عرض"</string>
<string name="sound_settings" msgid="5534671337768745343">"الصوت"</string>
<string name="all_volume_title" msgid="4296957391257836961">"مستويات الصوت"</string>
@@ -1053,7 +1053,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"محو السجلّ"</string>
<string name="display_settings" msgid="7965901687241669598">"الشاشة"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"التدوير التلقائي للشاشة"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"ألوان ساطعة"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"الألوان"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"طبيعي"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"مُحسن"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"مُشبع"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"تبديل الاتجاه تلقائيًا عند تدوير الجهاز اللوحي"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"تبديل الاتجاه تلقائيًا عند تدوير الهاتف"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"تبديل الاتجاه تلقائيًا عند تدوير الجهاز اللوحي"</string>
@@ -1170,14 +1173,16 @@
<item quantity="other">رمز رقم التعريف الشخصي لبطاقة SIM غير صحيح، ويتبقى لديك <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات.</item>
<item quantity="one">رمزPIN لبطاقة SIM غير صحيح، ولديك محاولة واحدة (<xliff:g id="NUMBER_0">%d</xliff:g>) يجب أن تتصل بعدها بمشغّل شبكة الجوّال لإلغاء قفل الجهاز.</item>
</plurals>
- <string name="pin_failed" msgid="1848423634948587645">"أخفقت عملية \"رقم التعريف الشخصي\" لبطاقة SIM!"</string>
+ <string name="pin_failed" msgid="1848423634948587645">"تعذّر إتمام عملية \"رقم التعريف الشخصي\" لبطاقة SIM!"</string>
<string name="device_info_settings" product="tablet" msgid="1119755927536987178">"حالة الجهاز اللوحي"</string>
<string name="device_info_settings" product="default" msgid="475872867864762157">"حالة الهاتف"</string>
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"تحديثات النظام"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"إصدار Android"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"مستوى رمز تصحيح أمان Android"</string>
<string name="model_info" msgid="1952009518045740889">"الطراز"</string>
+ <string name="model_summary" msgid="8306235877567782987">"الطراز: %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"الطراز والأجهزة"</string>
<string name="hardware_revision" msgid="8893547686367095527">"إصدار الأجهزة"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"معرّف الجهاز"</string>
@@ -1194,11 +1199,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"إعدادات وحدة التخزين"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"إلغاء تركيب وحدة تخزين USB، وعرض سعة التخزين المتاحة"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"إلغاء تحميل بطاقة SD، عرض سعة التخزين المتاحة"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN (رقم دليل الجوال)"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"رقم هاتفي"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"رقم الهاتف"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"رقم دليل الجوّال على SIM"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"رقم الهاتف على شريحة SIM"</string>
<string name="status_min_number" msgid="3519504522179420597">"دقيقة"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"إصدار PRL"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"نوع شبكة الجوال"</string>
@@ -1308,7 +1323,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"غير ذلك"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"النظام"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"استكشاف <xliff:g id="NAME">^1</xliff:g>"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"تشمل الملفات الأخرى الملفات المشتركة التي تم حفظها بواسطة التطبيقات والملفات التي تم تنزيلها عبر الإنترنت أو البلوتوث وملفات Android وغيرها. \n\nللاطلاع على المحتويات المرئية لبطاقة <xliff:g id="NAME">^1</xliff:g> هذه، انقر على \"استكشاف\"."</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"تشمل الملفات الأخرى الملفات المشتركة التي تم حفظها بواسطة التطبيقات والملفات التي تم تنزيلها من مواقع الإنترنت أو عبر البلوتوث وملفات Android وما إلى ذلك. \n\nللاطلاع على المحتويات المرئية على بطاقة <xliff:g id="NAME">^1</xliff:g> هذه، انقر على \"استكشاف\"."</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"يتضمّن النظام الملفات المستخدمة لتشغيل إصدار Android <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"ربما يكون لدى <xliff:g id="USER_0">^1</xliff:g> صور أو موسيقى أو تطبيقات أو بيانات أخرى محفوظة، ويتم استخدام <xliff:g id="SIZE">^2</xliff:g> من السعة التخزينية. \n\nللاطلاع على التفاصيل، يمكنك التبديل إلى <xliff:g id="USER_1">^1</xliff:g>."</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"إعداد <xliff:g id="NAME">^1</xliff:g>"</string>
@@ -1434,15 +1449,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"يتعذر توصيل نقاط الاتصال المحمولة أو استخدامها أثناء تشغيل توفير البيانات"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"تقييد USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"مشاركة اتصال الإنترنت للجهاز عبر USB"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"مشاركة اتصال الإنترنت للجهاز اللوحي عبر USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"مشاركة اتصال الإنترنت على الهاتف عبر USB"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"مشاركة اتصال الإنترنت على الجهاز اللوحي عبر USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"ربط البلوتوث"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"مشاركة اتصال الإنترنت للجهاز اللوحي عبر البلوتوث"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"مشاركة اتصال الإنترنت للهاتف عبر البلوتوث"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"عدم مشاركة اتصال الإنترنت في <xliff:g id="DEVICE_NAME">%1$d</xliff:g> هذا عبر بلوتوث"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"مشاركة اتصال الإنترنت على الجهاز اللوحي عبر البلوتوث"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"مشاركة اتصال الإنترنت على الهاتف عبر البلوتوث"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"مشاركة اتصال الإنترنت على جهاز <xliff:g id="DEVICE_NAME">%1$d</xliff:g> هذا عبر البلوتوث"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"لا يمكن ربط أكثر من <xliff:g id="MAXCONNECTION">%1$d</xliff:g> من الأجهزة."</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"سيتم إلغاء ربط <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"يمكنك استخدام نقطة الاتصال والتوصيل لتوفير اتصال بالإنترنت للأجهزة الأخرى من خلال اتصال بيانات الجوّال. كما يمكن للتطبيقات إنشاء نقطة اتصال لمشاركة المحتوى مع الأجهزة المجاورة."</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"يمكنك استخدام نقطة الاتصال والتوصيل لتوفير اتصال بالإنترنت للأجهزة الأخرى من خلال اتصال بيانات الجوّال، كما يمكن للتطبيقات إنشاء نقطة اتصال لمشاركة المحتوى مع الأجهزة المجاورة."</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"مساعدة"</string>
<string name="network_settings_title" msgid="2876509814832830757">"شبكة الجوّال"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"خطة الجوّال"</string>
@@ -1517,7 +1532,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"جارٍ التحميل…"</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"معلومات الأمان"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"معلومات الأمان"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"ليس لديك اتصال بيانات. لعرض هذه المعلومات الآن، انتقل إلى %s من أي كمبيوتر متصل بالإنترنت."</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"ليس لديك اتصال بيانات. لعرض هذه المعلومات الآن، انتقل إلى %s من أي كمبيوتر متصل بالإنترنت."</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"جارٍ التحميل…"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"تعيين قفل شاشة"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"يجب تعيين كلمة مرور لأغراض أمنية"</string>
@@ -1727,7 +1742,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"تفاصيل التطبيق"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"التطبيق المثبَّت من <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"المزيد من المعلومات على <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"عمليات التطبيق"</string>
<string name="app_ops_running" msgid="7706949900637284122">"جارية التنفيذ"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(لم يسبق الاستخدام مطلقًا)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"ليست هناك تطبيقات افتراضية."</string>
@@ -1779,6 +1793,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"اللغات والإدخال"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"ليس لديك إذن بتغيير لغة الجهاز."</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"اللغات والإدخال"</string>
<string name="input_assistance" msgid="7577795275222555487">"المساعدة في الإدخال"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"لوحة المفاتيح وأساليب الإدخال"</string>
@@ -2223,14 +2238,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"الخدمات"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"المدة"</string>
<string name="mem_details_title" msgid="6548392825497290498">"تفاصيل الذاكرة"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"إحصاءات الذاكرة"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"استخدام الذاكرة"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"Kernel"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"أصلية"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"وحدات ذاكرة تخزين Kernel مؤقتة"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"تبديل ZRam"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"مجانًا"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"الإجمالي"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"٣ ساعات"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"٦ ساعات"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"۱۲ ساعة"</string>
@@ -2387,7 +2394,7 @@
<string name="accessibility_sync_disabled" msgid="1741194106479011384">"تم تعطيل المزامنة"</string>
<string name="accessibility_sync_in_progress" msgid="4501160520879902723">"جارٍ المزامنة"</string>
<string name="accessibility_sync_error" msgid="8703299118794272041">"خطأ في المزامنة"</string>
- <string name="sync_failed" msgid="1696499856374109647">"أخفقت المزامنة"</string>
+ <string name="sync_failed" msgid="1696499856374109647">"تعذّرت المزامنة"</string>
<string name="sync_active" msgid="8476943765960863040">"المزامنة نشطة"</string>
<string name="account_sync_settings_title" msgid="5131314922423053588">"مزامنة"</string>
<string name="sync_is_failing" msgid="1591561768344128377">"تواجه المزامنة حاليًا بعض المشاكل. وسوف تكون متاحة خلال وقت قصير."</string>
@@ -2576,8 +2583,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"نسيان الشبكة الافتراضية الخاصة"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"هل تريد استبدال الشبكة الافتراضية الخاصة الحالية؟"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"هل تريد تشغيل الشبكة الافتراضية الخاصة باستمرار؟"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"عند تشغيل هذا الإعداد، لن تتمكن من الاتصال بالإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة (VPN)"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"سيتم استبدال شبكتك الافتراضية الخاصة (VPN) الحالية ولن تتمكن من استخدام اتصال الإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"عند تشغيل هذا الإعداد، لن تتمكن من الاتصال بالإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة (VPN)"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"سيتم استبدال شبكتك الافتراضية الخاصة (VPN) الحالية ولن تتمكن من الاتصال بالإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة (VPN)"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"أنت متصل حاليًا بشبكة افتراضية خاصة (VPN) مضبوطة على وضع التشغيل الدائم. وإذا اتصلت بشبكة افتراضية خاصة أخرى، فسيتم استبدال شبكتك الافتراضية الخاصة الحالية، كما سيتم إيقاف وضع التشغيل الدائم."</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"أنت متصل حاليًا بشبكة افتراضية خاصة (VPN). وإذا اتصلت بشبكة افتراضية خاصة أخرى، فسيتم استبدال شبكتك الافتراضية الخاصة الحالية."</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"تشغيل"</string>
@@ -2653,12 +2660,12 @@
</plurals>
<string name="ssl_ca_cert_warning_message" msgid="8216218659139190498">"يُمكن لأي جهة خارجية مراقبة نشاط الشبكة، بما في ذلك الرسائل الإلكترونية والتطبيقات ومواقع الويب الآمنة.\n\nويُمكن لبيانات اعتماد موثوقة ومثبتة على جهاز الكمبيوتر إتاحة إجراء ذلك."</string>
<plurals name="ssl_ca_cert_settings_button" formatted="false" msgid="2426799352517325228">
- <item quantity="zero">الاطلاع على الشهادات</item>
- <item quantity="two">الاطلاع على الشهادتين</item>
- <item quantity="few">الاطلاع على الشهادات</item>
- <item quantity="many">الاطلاع على الشهادات</item>
- <item quantity="other">الاطلاع على الشهادات</item>
- <item quantity="one">الاطلاع على الشهادة</item>
+ <item quantity="zero">الاطّلاع على الشهادات</item>
+ <item quantity="two">الاطّلاع على الشهادتين</item>
+ <item quantity="few">الاطّلاع على الشهادات</item>
+ <item quantity="many">الاطّلاع على الشهادات</item>
+ <item quantity="other">الاطّلاع على الشهادات</item>
+ <item quantity="one">الاطّلاع على الشهادة</item>
</plurals>
<string name="user_settings_title" msgid="6151874007858148344">"المستخدمون"</string>
<string name="user_list_title" msgid="7937158411137563543">"المستخدمون والملفات الشخصية"</string>
@@ -2820,6 +2827,8 @@
<string name="color_purple" msgid="3888532466427762504">"أرجواني"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"لم يتم إدراج بطاقات SIM"</string>
<string name="sim_status_title" msgid="6744870675182447160">"وضع شريحة SIM"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"رد الاتصال عبر شريحة SIM الافتراضية"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"شريحة SIM للمكالمات الصادرة"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"إعدادات المكالمات الأخرى"</string>
@@ -2833,6 +2842,8 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"شريحة SIM المفضلة لـ"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"طرح السؤال كل مرة"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"يلزم التحديد"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"الإعدادات"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="zero">عرض %d عنصر مخفي</item>
@@ -2843,7 +2854,7 @@
<item quantity="one">عرض %d عنصر مخفي</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"تصغير"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"الشبكة والإنترنت"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"الشبكة والإنترنت"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"الجوّال"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"استخدام البيانات"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"نقطة اتصال"</string>
@@ -2903,6 +2914,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"دفع، نقر، دفعات"</string>
<string name="keywords_backup" msgid="470070289135403022">"نسخ احتياطية، نسخة احتياطية"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"إيماءة"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"إعداد علامة NFC عبر Wi-Fi"</string>
<string name="write_tag" msgid="8571858602896222537">"كتابة"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"انقر على كلمة علامة لكتابة..."</string>
@@ -2940,14 +2959,14 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"تنبيه"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"اهتزاز"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"أصوات تشغيل الجهاز"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"لم يتم تشغيل أي قواعد تلقائية"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="zero">تم تشغيل <xliff:g id="ON_COUNT">%d</xliff:g> قاعدة تلقائية</item>
- <item quantity="two">تم تشغيل قاعدتين تلقائيتين (<xliff:g id="ON_COUNT">%d</xliff:g>)</item>
- <item quantity="few">تم تشغيل <xliff:g id="ON_COUNT">%d</xliff:g> قواعد تلقائية</item>
- <item quantity="many">تم تشغيل <xliff:g id="ON_COUNT">%d</xliff:g> قاعدة تلقائية</item>
- <item quantity="other">تم تشغيل <xliff:g id="ON_COUNT">%d</xliff:g> قاعدة تلقائية</item>
- <item quantity="one">تم تشغيل قاعدة تلقائية واحدة</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"مطلقًا"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="zero"><xliff:g id="ON_COUNT">%d</xliff:g> قاعدة</item>
+ <item quantity="two">قاعدتان (<xliff:g id="ON_COUNT">%d</xliff:g>)</item>
+ <item quantity="few"><xliff:g id="ON_COUNT">%d</xliff:g> قواعد</item>
+ <item quantity="many"><xliff:g id="ON_COUNT">%d</xliff:g> قاعدة</item>
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> قاعدة</item>
+ <item quantity="one">قاعدة واحدة</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"الرجاء عدم الإزعاج"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"السُلوك"</string>
@@ -2955,9 +2974,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"بلا صوت"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"بلا صوت (كتم الصوت تمامًا)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"بلا صوت غير <xliff:g id="CATEGORIES">%1$s</xliff:g>"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"القواعد التلقائية"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"كتم الصوت باستثناء صوت المنبهات والوسائط وتعليقات النظام (المنبهات فقط)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"التشغيل تلقائيًا"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"القواعد التلقائية"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"تعيين قواعد عدم الإزعاج"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"تقييد الأصوات والاهتزازات في أوقات معينة"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"الأولوية فقط"</string>
@@ -2965,6 +2984,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"كتم الصوت تمامًا"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"حظر الإشعارات المرئية"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"السماح بالإشارات المرئية"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"إضافة"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"أصوات الملف الشخصي للعمل"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"استخدام أصوات الملف الشخصي"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"يتم استخدام الأصوات نفسها للملف الشخصي وملف العمل الشخصي"</string>
@@ -3107,7 +3142,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"اسم القاعدة"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"إدخال اسم القاعدة"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"اسم القاعدة قيد الاستخدام فعلاً"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"إضافة المزيد"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"إضافة قاعدة"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"إضافة قاعدة حدث"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"إضافة قاعدة زمنية"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"حذف قاعدة"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"اختيار نوع القاعدة"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"هل تريد حذف <xliff:g id="RULE">%1$s</xliff:g>؟"</string>
@@ -3115,9 +3152,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"نوع القاعدة"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"غير معروف"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"تهيئة القاعدة"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"قاعدة خاصة بزمن"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"الوقت"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"تم ضبط القاعدة التلقائية على تشغيل وضع \"عدم الإزعاج\" أثناء أوقات محددة"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"قاعدة خاصة بحدث"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"الحدث"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"تم ضبط القاعدة التلقائية على تشغيل وضع \"عدم الإزعاج\" أثناء أحداث محددة"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"أثناء الأحداث لـ"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"أثناء الأحداث للتقويم <xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
@@ -3148,8 +3185,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"من جهات الاتصال المميزة بنجمة فقط"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"من لا أحد"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"التنبيهات"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"الوسائط وتعليقات النظام"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"التذكيرات"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"الأحداث"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"جميع المتصلين"</string>
@@ -3182,15 +3218,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"التغيير إلى التنبيهات فقط حتى <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"تغيير إلى المقاطعة دائمًا"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"حظرها عندما تكون الشاشة مشغّلة"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"منع الإشعارات التي يتمّ تجاهلها في وضع \"عدم الإزعاج\" من الظهور بشكل جزئي أو كامل على الشاشة"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"حظرها عندما تكون الشاشة غير مشغلّة"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"منع الإشعارات التي يتم تجاهلها في وضع \"عدم الإزعاج\" من تشغيل الشاشة أو إحداث وميض عبر مصباح الإشعارات"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"منع الإشعارات التي يتم تجاهلها في وضع \"عدم الإزعاج\" من تشغيل الشاشة"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"إيقاف"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"عندما تكون الشاشة في وضع التشغيل"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"عندما تكون الشاشة في وضع الإيقاف"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"عندما تكون الشاشة في وضع التشغيل أو الإيقاف"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"عندما تكون الشاشة قيد التشغيل"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"السماح للإشعارات التي يتجاهلها وضع \"الرجاء عدم الإزعاج\" بالظهور بسرعة على الشاشة"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"عندما تكون الشاشة متوقفة"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"السماح للإشعارات التي يتجاهلها وضع \"الرجاء عدم الإزعاج\" بتشغيل الشاشة وإحداث وميض ضوئي"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"السماح للإشعارات التي يتجاهلها وضع \"الرجاء عدم الإزعاج\" بتشغيل الشاشة"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"إعدادات الإشعارات"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"موافق"</string>
<string name="device_feedback" msgid="3238056036766293294">"إرسال تعليقات حول هذا الجهاز"</string>
@@ -3542,7 +3574,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"نقطة الاتصال تعمل"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"نقطة اتصال Wi-Fi المتنقلة <xliff:g id="ID_1">%1$s</xliff:g> نشطة، وتم تعطيل Wi-Fi في هذا الجهاز."</string>
<string name="condition_airplane_title" msgid="287356299107070503">"وضع الطائرة قيد التشغيل"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"تم تعطيل Wi-Fi وبلوتوث وشبكة الجوال، ولا يمكنك إجراء مكالمات هاتفية أو الاتصال بالإنترنت."</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"تم إيقاف شبكة Wi-Fi والبلوتوث وشبكة الجوّال، ولا يمكنك إجراء مكالمات هاتفية أو الاتصال بالإنترنت."</string>
<string name="condition_zen_title" msgid="2679168532600816392">"تم تشغيل \"عدم الإزعاج\" (<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"تم تشغيل وضع توفير شحن البطارية"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"تم خفض مستوى الأداء. تم تعطيل خدمات المواقع وبيانات الخلفية."</string>
@@ -3582,8 +3614,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"أداة مراقبة إمكانية الاتصال"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"ستجمع أداة مراقبة إمكانية الاتصال سجلات عند اكتشاف مشكلة متعلقة بإمكانية الاتصال وترسل إشعارًا إلى المستخدم لإرسال تقرير بالخطأ"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"يُرجى إعادة تشغيل الجهاز لتطبيق التغيير الذي تم إجراؤه على أداة مراقبة إمكانية الاتصال"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"Camera HAL HDR+"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"لتطبيق تغيير Camera HAL HDR+، يمكنك إعادة تشغيل الجهاز"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"مُستشعِر الليزر في الكاميرا"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"تحديثات النظام التلقائية"</string>
<string name="usage" msgid="2977875522080448986">"الاستخدام"</string>
@@ -3757,13 +3787,6 @@
<item quantity="one">ثانية واحدة</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"الانتظار <xliff:g id="ESTIMATE">%1$s</xliff:g> تقريبًا"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"كمبيوتر"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"سماعة رأس"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"هاتف"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"تصوير"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"سماعة أذن"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"جهاز إدخال طرفي"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"بلوتوث"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"إدارة سعة التخزين"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"للمساعدة في تفريغ مساحة التخزين، يزيل مدير سعة التخزين من جهاز الصور ومقاطع الفيديو التي تم الاحتفاظ بنسخة احتياطية منها."</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"إزالة الصور ومقاطع الفيديو"</string>
@@ -3798,17 +3821,19 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"للاطلاع على الوقت ورموز الإشعارات والمعلومات الأخرى، يمكنك إلقاء نظرة على جهازك."</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"التحقق من الإشعارات عند إيقاف الشاشة"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"تمرير البصمة للحصول على الإشعارات"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"تمرير سريع لبصمة الإصبع"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"للاطّلاع على الإشعارات، مرّر سريعًا للأسفل على مستشعر بصمات الإصبع على الجزء الخلفي لهاتفك."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"للاطّلاع على الإشعارات، مرّر سريعًا للأسفل على مستشعر بصمات الإصبع على الجزء الخلفي من جهازك اللوحي."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"للاطّلاع على الإشعارات، مرّر سريعًا للأسفل على مستشعر بصمات الإصبع على الجزء الخلفي من جهازك."</string>
- <string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="1677291167470357802">"الاطلاع على الإشعارات بسرعة"</string>
+ <string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="1677291167470357802">"الاطّلاع على الإشعارات بسرعة"</string>
<string name="fingerprint_swipe_for_notifications_suggestion_summary" msgid="127592803294414082">"تمرير سريع لأسفل على مستشعر بصمات الإصبع"</string>
<string name="gesture_setting_on" msgid="3455094265233870280">"تشغيل"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"إيقاف"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"تم إلغاء قفل برنامج التحميل مسبقاً"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"الاتصال بالإنترنت أولاً"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"الاتصال بالإنترنت أو الاتصال بمشغِّل شبكة الجوّال"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"الاتصال بالإنترنت أولاً"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"الاتصال بالإنترنت أو الاتصال بمشغِّل شبكة الجوّال"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"عدم التوفر على الأجهزة التي يقفلها مشغل شبكة الجوال"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"يُرجى إعادة تشغيل الجهاز لتمكين ميزة حماية الجهاز."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"تمت إتاحة <xliff:g id="SIZE">%1$s</xliff:g> كإجمالي\n\nتم تنفيذ العملية آخر مرة في <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"التطبيقات الفورية"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"فتح الروابط في التطبيقات، حتى إذا لم تكن التطبيقات مثبّتة"</string>
@@ -3830,7 +3855,7 @@
<string name="enterprise_privacy_settings_summary_generic" msgid="5853292305730761128">"تتولى مؤسستك إدارة التغييرات والإعدادات."</string>
<string name="enterprise_privacy_settings_summary_with_name" msgid="4266234968317996188">"تتولى <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> إدارة التغييرات والإعدادات."</string>
<string name="enterprise_privacy_header" msgid="7402406406883832509">"لتوفير إمكانية الوصول إلى بيانات العمل، يمكن لمؤسستك تغيير الإعدادات وتثبيت برنامج على جهازك.\n\nلمعرفة مزيد من التفاصيل، يمكنك الاتصال بمشرف المؤسسة."</string>
- <string name="enterprise_privacy_exposure_category" msgid="7313392680107938517">"أنواع المعلومات التي يمكن لمؤسستك الاطلاع عليها"</string>
+ <string name="enterprise_privacy_exposure_category" msgid="7313392680107938517">"أنواع المعلومات التي يمكن لمؤسستك الاطّلاع عليها"</string>
<string name="enterprise_privacy_exposure_changes_category" msgid="9079283547182933771">"التغييرات التي يجريها مشرف المؤسسة"</string>
<string name="enterprise_privacy_device_access_category" msgid="5423434164248819058">"إمكانية وصولك إلى هذا الجهاز"</string>
<string name="enterprise_privacy_enterprise_data" msgid="2773968662865848413">"البيانات المقترنة مع حساب العمل، مثل البريد الإلكتروني والتقويم"</string>
@@ -3944,6 +3969,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>تأكد من أنك تثق بهذا التطبيق</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> يستخدم البيانات المعروضة على الشاشة لتحديد ما يمكن ملؤه تلقائيًا."</string>
<string name="device_theme" msgid="4571803018917608588">"مظهر الجهاز"</string>
<string name="default_theme" msgid="7085644992078579076">"تلقائي"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"اسم الشبكة"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"عرض اسم الشبكة في شريط الحالة"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"إدارة سعة التخزين: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"إيقاف"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"تشغيل"</string>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index ab0c4ff..3f725bf 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"L\'administrateur de l\'appareil ne permet pas l\'utilisation d\'un mot de passe récent"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"Les suites croissantes, décroissantes ou répétitives de chiffres ne sont pas autorisées"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"OK"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"Confirmer"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"Annuler"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"Effacer"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"Annuler"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> sera déconnecté de l\'audio en mains libres."</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> sera déconnecté du périphérique d\'entrée"</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"L\'accès à Internet via <xliff:g id="DEVICE_NAME">%1$s</xliff:g> va être interrompu."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ne partagera plus la connexion Internet de la tablette."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> sera déconnecté et ne partagera plus la connexion Internet du téléphone."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ne partagera plus la connexion Internet de la tablette."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ne partagera plus la connexion Internet du téléphone."</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"Appareil Bluetooth associé"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"Connexion"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"Connecter à un appareil Bluetooth"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"Utiliser pour"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"Renommer"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"Autoriser le transfert de fichiers entrants"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Connecté à l\'appareil pour accès Internet"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Connexion Internet locale partagée"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"Connecté à l\'appareil pour accès Internet"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"Connexion Internet locale partagée avec appareil"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"Paramètres station d\'accueil"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"Utiliser la station d’accueil pour l\'audio"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"Comme téléphone à haut-parleur"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"Cette fonction n\'est pas accessible, car la recherche de réseaux Wi-Fi est désactivée"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"Pour utiliser cette option, sélectionnez un fournisseur d\'avis sur le réseau"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"Éviter les connexions instables"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Ne pas utiliser de réseau Wi-Fi, sauf en cas de connexion Internet de bonne qualité"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"N\'utiliser que réseaux dotés d\'une connexion Internet stable"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"Ne pas utiliser de réseau Wi-Fi, sauf en cas de connexion Internet de bonne qualité"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"N\'utiliser que réseaux offrant une connexion Internet stable"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"Se connecter auto. aux réseaux ouverts"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"Se connecter auto. aux réseaux publics de haute qualité"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"Pour utiliser cette option, sélectionnez un fournisseur d\'avis sur le réseau"</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"Optimisation du Wi-Fi"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"Minimiser la consommation de la batterie lorsque le Wi-Fi est activé"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"Limiter énergie util. par Wi‑Fi"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"Utiliser les données cellulaires si vous n\'avez plus accès à Internet par réseau Wi‑Fi."</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"Utiliser les données cellulaires si vous n\'avez plus accès à Internet par réseau Wi‑Fi."</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"Passer automatiquement au réseau cellulaire"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"Utiliser le réseau de données cellulaires lorsque le réseau Wi-Fi n\'a pas accès à Internet. Des frais d\'utilisation de données peuvent s\'appliquer."</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"Utiliser le réseau de données cellulaires lorsque le réseau Wi-Fi n\'a pas accès à Internet. Des frais d\'utilisation de données peuvent s\'appliquer."</string>
<string name="wifi_add_network" msgid="6234851776910938957">"Ajouter un réseau"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"Préférences Wi-Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"Le Wi-Fi se réactive automatiquement"</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"Se connecter au point d\'accès pour la connexion?"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"<xliff:g id="APP_NAME">%1$s</xliff:g> requiert connexion pour autoriser l\'accès réseau."</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"CONNEXION"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"Ce réseau ne dispose d\'aucun accès à Internet. Voulez-vous quand même l\'utiliser?"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"Ce réseau ne dispose d\'aucun accès à Internet. Voulez-vous quand même l\'utiliser?"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"Ne plus me demander pour ce réseau"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"Le réseau Wi‑Fi n\'est pas connecté à Internet"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"Le Wi‑Fi n\'est pas connecté à Internet"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"Vous pouvez passer au réseau cellulaire lorsque la connexion Wi‑Fi est faible. Des frais de données peuvent s\'appliquer."</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"Passer au réseau cellulaire"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"Rester connecté au Wi-Fi"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"Paramètres Wi-Fi avancés"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"Adresse MAC"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"Adresse IP"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"Détails du réseau"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"Détails du réseau"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"Masque de sous-réseau"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"Adresses IPv6"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"Voulez-vous annuler l\'invitation à se connecter avec <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"Voulez-vous vraiment supprimer ce groupe?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"Point d\'accès Wi‑Fi"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"Connexion Internet ou contenu non partagés avec d\'autres appareils"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"La connexion Internet de la tablette est partagée par point d\'accès"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"La connexion Internet du téléphone est partagée par point d\'accès"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"L\'application partage du contenu. Pour partager la connexion Internet, désactivez puis réactivez le point d\'accès."</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"Connexion Internet ou contenu non partagés avec d\'autres appareils"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"La connexion Internet de la tablette est partagée à l\'aide d\'un point d\'accès"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"La connexion Internet du téléphone est partagée à l\'aide d\'un point d\'accès"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"L\'application partage du contenu. Pour partager la connexion Internet, désactivez puis réactivez le point d\'accès."</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"Nom du point d\'acces"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"Activation du point d\'accès <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> en cours…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"D\'autres appareils peuvent se connecter à <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"Mot de passe du point d\'accès"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"Bande du point d\'accès"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"Un point d\'accès vous permet de créer un réseau Wi-Fi pour vos autres appareils. Il les connecte à Internet en utilisant votre connexion de données cellulaires. Des frais cellulaires supplémentaires peuvent s\'appliquer."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"Un point d\'accès vous permet de créer un réseau Wi-Fi pour vos autres appareils. Il les connecte à Internet en utilisant votre connexion de données cellulaires. Des frais supplémentaires peuvent s\'appliquer."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"Les applications peuvent créer un point d\'accès pour partager du contenu avec les appareils à proximité."</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"Activation du point d\'accès Wi-Fi en cours…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"Désactivation du point d\'accès Wi-Fi en cours…"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"Lorsque les appels Wi-Fi sont activés, votre téléphone peut transférer les appels par réseau Wi-Fi ou le réseau de votre fournisseur de services, en fonction de votre préférence et du signal le plus puissant. Avant d\'activer cette fonctionnalité, renseignez-vous auprès de votre fournisseur pour en savoir plus sur les frais et d\'autres détails."</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"Mise à jour l\'adresse d\'urgence"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"L\'adresse utilisée par les services d\'urgence pour déterminer votre position si vous faites un appel au service d\'urgence en utilisant le Wi-Fi"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"Adresse d\'urgence"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"Cette adresse sera définie comme votre position géographique lorsque vous effectuerez des appels d\'urgence par Wi-Fi"</string>
<string name="display_settings_title" msgid="1708697328627382561">"Affichage"</string>
<string name="sound_settings" msgid="5534671337768745343">"Son"</string>
<string name="all_volume_title" msgid="4296957391257836961">"Volume"</string>
@@ -1005,7 +1005,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"Effacer l\'historique"</string>
<string name="display_settings" msgid="7965901687241669598">"Affichage"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"Rotation auto de l\'écran"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"Couleurs vives"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"Couleurs"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"Naturelles"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"Intenses"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"Saturées"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"Changer automatiquement d\'orientation lors de la rotation de la tablette"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"Changer automatiquement d\'orientation lors de la rotation"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"Changer automatiquement d\'orientation lors de la rotation de la tablette"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"Mises à jour du système"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"Version d\'Android"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"Niveau du correctif de sécurité Android"</string>
<string name="model_info" msgid="1952009518045740889">"Modèle"</string>
+ <string name="model_summary" msgid="8306235877567782987">"Modèle : %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"Modèle et matériel"</string>
<string name="hardware_revision" msgid="8893547686367095527">"Version du matériel"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"Equipment ID"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"Paramètres de stockage"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"Désinstaller la mémoire de stockage USB, afficher l\'espace disponible"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"Désinstaller la carte SD, afficher la mémoire disponible"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"Mon numéro de téléphone"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"Numéro de téléphone"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"NRM sur la carte SIM"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"N° de tél. sur la carte SIM"</string>
<string name="status_min_number" msgid="3519504522179420597">"MIN"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"Version de la liste d\'itinérance préférée"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"Type de réseau mobile"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"Autre"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"Système"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"Explorer « <xliff:g id="NAME">^1</xliff:g> »"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"Les autres fichiers comprennent les fichiers partagés enregistrés par les applications, les fichiers téléchargés d\'Internet ou par Bluetooth, les fichiers systèmes d\'Android et ainsi de suite.\n\nPour voir le contenu visible de cet appareil « <xliff:g id="NAME">^1</xliff:g> », touchez Explorer."</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"Les autres fichiers comprennent les fichiers partagés enregistrés par les applications, les fichiers téléchargés d\'Internet ou par Bluetooth, les fichiers systèmes d\'Android et ainsi de suite.\n\nPour voir le contenu visible de cet appareil <xliff:g id="NAME">^1</xliff:g>, touchez Explorer."</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"Le répertoire Système comprend des fichiers utilisés pour faire fonctionner Android version <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"L\'utilisateur « <xliff:g id="USER_0">^1</xliff:g> » a peut-être enregistré des photos, de la musique, des applications et d\'autres données qui occupent <xliff:g id="SIZE">^2</xliff:g> d\'espace. \n\nPour afficher des informations détaillées, utilisez le compte d\'utilisateur « <xliff:g id="USER_1">^1</xliff:g> »."</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"Configurer votre « <xliff:g id="NAME">^1</xliff:g> »"</string>
@@ -1382,15 +1397,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"Impossible de partager la connexion ou d\'utiliser des points d\'accès mobiles lorsque la fonction Économiseur de données est activée"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"Partage de connexion par USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"Partager la connexion Internet du téléphone par connexion USB"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"Partager la connexion Internet de la tablette par connexion USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"Partager la connexion Internet du téléphone par connexion USB"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"Partager la connexion Internet de la tablette par connexion USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"Par Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"Partager la connexion Internet de la tablette par Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"Partager la connexion Internet du téléphone par Bluetooth"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"Partager la connexion Internet de <xliff:g id="DEVICE_NAME">%1$d</xliff:g> par Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"Partager la connexion Internet de la tablette par Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"Partager la connexion Internet du téléphone par Bluetooth"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"Partager la connexion Internet de <xliff:g id="DEVICE_NAME">%1$d</xliff:g> par Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"Partage connexion impossible au-delà de <xliff:g id="MAXCONNECTION">%1$d</xliff:g> appareils."</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"Le partage de connexion avec <xliff:g id="DEVICE_NAME">%1$s</xliff:g> va être annulé."</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"Utilisez un point d\'accès et le partage de connexion pour fournir un accès Internet à d\'autres appareils par l\'intermédiaire de votre connexion cellulaire. Les applications peuvent aussi créer un point d\'accès pour partager du contenu avec d\'autres appareils à proximité."</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"Utilisez un point d\'accès et le partage de connexion pour fournir un accès Internet à d\'autres appareils par l\'intermédiaire de votre connexion cellulaire. Les applications peuvent aussi créer un point d\'accès pour partager du contenu avec d\'autres appareils à proximité."</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"Aide"</string>
<string name="network_settings_title" msgid="2876509814832830757">"Réseau cellulaire"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"Forfait de données cellulaires"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"Chargement en cours..."</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"Informations de sécurité"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Informations de sécurité"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"Vous n\'avez pas de connexion Internet. Pour consulter ces informations maintenant, accédez à %s depuis un ordinateur connecté à Internet."</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"Vous n\'avez pas de connexion Internet. Pour consulter ces renseignements maintenant, accédez à %s sur un ordinateur connecté à Internet."</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Chargement en cours..."</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"Configurer le verrouillage de l\'écran"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"Pour plus de sécurité, définissez un mot de passe"</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"Détails de l\'application"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"Source de l\'application : <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"Plus d\'information sur <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"Fonctionnement des applications"</string>
<string name="app_ops_running" msgid="7706949900637284122">"En cours d\'exécution"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(Jamais utilisé)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"Pas d\'applications par défaut."</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"Langues et modes d\'entrée"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"Vous n\'êtes pas autorisé à modifier la langue de l\'appareil."</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"Langues et modes d\'entrée"</string>
<string name="input_assistance" msgid="7577795275222555487">"Assistance d\'entrée"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"Clavier et modes de saisie"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"Services"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"Durée"</string>
<string name="mem_details_title" msgid="6548392825497290498">"Détails de la mémoire"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"États de la mémoire"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"Utilisation de la mémoire"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"Noyau"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"Natif"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"Caches du noyau"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"Échange de zRAM"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"Disponible"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"Total"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3 heures"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6 heures"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"12 heures"</string>
@@ -2492,8 +2499,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"Oublier le profil RPV"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"Remplacer le RPV existant?"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"Définir le RPV permanent?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"Si vous activez ce paramètre, vous ne disposerez d\'aucune connexion Internet jusqu\'à ce que le RPV parvienne à se connecter"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"Votre RPV existant sera remplacé, et vous ne disposerez d\'aucune connexion Internet jusqu\'à ce que le RPV parvienne à se connecter"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"Si vous activez ce paramètre, vous ne disposerez d\'aucune connexion Internet jusqu\'à ce que le RPV parvienne à se connecter"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"Votre RPV existant sera remplacé, et vous ne disposerez d\'aucune connexion Internet jusqu\'à ce que le RPV parvienne à se connecter"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"Vous êtes déjà connecté à un RPV permanent. Si vous vous connectez à un autre RPV, le RPV actuel sera remplacé et le mode permanent sera désactivé."</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"Vous êtes déjà connecté à un RPV. Si vous vous connectez à un RPV différent, votre RPV actuel sera remplacé."</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"Activer"</string>
@@ -2720,6 +2727,8 @@
<string name="color_purple" msgid="3888532466427762504">"Mauve"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"Aucune carte SIM insérée"</string>
<string name="sim_status_title" msgid="6744870675182447160">"État de la carte SIM"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"Rappeler avec la carte SIM par défaut"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"Carte SIM pour les appels sortants"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"Autres paramètres d\'appel"</string>
@@ -2733,13 +2742,15 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"Carte SIM préférée pour"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"Toujours demander"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"Veuillez indiquer votre préférence"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"Paramètres"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="one">Afficher %d élément masqué</item>
<item quantity="other">Afficher %d éléments masqués</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Réduire"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"Réseau et Internet"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"Réseau et Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"cellulaire"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"utilisation de données"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"point d\'accès sans fil"</string>
@@ -2799,6 +2810,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"payer, toucher, paiements"</string>
<string name="keywords_backup" msgid="470070289135403022">"sauvegarde, sauvegarder"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"geste"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Créer une balise NFC par Wi-Fi"</string>
<string name="write_tag" msgid="8571858602896222537">"Écrire"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"Touchez une balise pour pour écrire..."</string>
@@ -2836,10 +2855,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"Alerte"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"Vibreur"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"Activation par les sons"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"Aucune règle automatique activée"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="one"><xliff:g id="ON_COUNT">%d</xliff:g> règle automatique activée</item>
- <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> règles automatiques activées</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Jamais"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="one"><xliff:g id="ON_COUNT">%d</xliff:g> règle</item>
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> règles</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne pas déranger"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportement"</string>
@@ -2847,9 +2866,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Aucun son"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Aucun son (silence total)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Aucun son sauf <xliff:g id="CATEGORIES">%1$s</xliff:g>"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"Règles automatiques"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"Aucun son, sauf pour les alarmes, les médias et les rétroactions système (alarmes seulement)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"Activer automatiquement"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"Règles automatiques"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Créer règles Ne pas déranger"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limiter sons et vibrations à certains moments"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"Prioritaires seulement"</string>
@@ -2857,6 +2876,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"Aucune interruption"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g> : <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"Bloquer dérangements visuels"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"Autoriser les signaux visuels"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"Ajouter"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"Sons du profil professionnel"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"Utiliser sons du profil perso"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"Les sons du profil professionnel sont les mêmes que ceux du profil personnel"</string>
@@ -2983,7 +3018,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"Nom de la règle"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"Entrez le nom de la règle"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"Ce nom de règle est déjà utilisé"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"Ajouter"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"Ajouter une règle"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"Ajouter une règle d\'événement"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"Ajouter une règle de temps"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"Supprimer la règle"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"Sélectionner le type de règle"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"Supprimer la règle « <xliff:g id="RULE">%1$s</xliff:g> »?"</string>
@@ -2991,9 +3028,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"Type de règle"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"Inconnue"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"Configurer la règle"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"Règle basée sur l\'heure"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"Heure"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"Règle automatique pour activer le mode « Ne pas déranger » à certaines heures"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"Règle d\'événement"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"Événement"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"Règle automatique pour activer le mode « Ne pas déranger » pendant les événements indiqués"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"Pendant les événements suivants :"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"Pendant les événements de l\'agenda <xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
@@ -3024,8 +3061,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Des contacts favoris seulement"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Aucun"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmes"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"Médias et rétroactions système"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"Rappels"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Événements"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Tous les appelants"</string>
@@ -3050,15 +3086,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Ne recevoir que les alarmes jusqu\'à <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"Activer le mode Toujours interrompre"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"Bloquer lorsque l\'écran est allumé"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"Empêcher les notifications désactivées par le mode Ne pas déranger de s\'afficher à l\'écran"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"Bloquer lorsque l\'écran est éteint"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"Empêcher les notifications désactivées par le mode Ne pas déranger d\'activer l\'écran ou de faire clignoter le voyant de notification"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"Empêcher les notifications désactivées par le mode Ne pas déranger d\'activer l\'écran"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"Désactivé"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"Lorsque l\'écran est allumé"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Lorsque l\'écran est éteint"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Quand l\'écran est allumé ou éteint"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"Lorsque l\'écran est activé"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Autoriser les notifications désactivées par le mode Ne pas déranger de s\'afficher à l\'écran"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"Lorsque l\'écran est éteint"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Autoriser les notifications désactivées par le mode Ne pas déranger d\'activer l\'écran et de faire clignoter le voyant"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Autoriser les notifications désactivées par le mode Ne pas déranger d\'activer l\'écran"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Paramètres de notification"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Commentaires sur cet appareil"</string>
@@ -3378,7 +3410,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"Le point d\'accès est activé"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"Le point d\'accès Wi-Fi mobile « <xliff:g id="ID_1">%1$s</xliff:g> » est actif. Le Wi-Fi est désactivé pour cet appareil."</string>
<string name="condition_airplane_title" msgid="287356299107070503">"Le mode Avion est activé"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"Le Wi-Fi, le Bluetooth et le réseau cellulaire sont désactivés. Vous ne pouvez pas faire d\'appels téléphoniques ni vous connecter à Internet."</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"Le Wi-Fi, le Bluetooth et le réseau cellulaire sont désactivés. Vous ne pouvez pas faire d\'appels téléphoniques ni vous connecter à Internet."</string>
<string name="condition_zen_title" msgid="2679168532600816392">"Mode « Ne pas déranger » activé (<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"Économie d\'énergie activée"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"Les performances sont réduites. Les services de localisation et les données en arrière-plan sont désactivés."</string>
@@ -3410,8 +3442,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"ConnectivityMonitor"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"ConnectivityMonitor recueille des journaux lorsqu\'il détecte un problème lié à la connectivité, puis invite l\'utilisateur à soumettre un bogue."</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"Pour appliquer les changements de ConnectivityMonitor, redémarrez l\'appareil"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"Mode HAL HDR+ de l\'appareil photo"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"Pour appliquer les changements HAL HDR+ de l\'appareil photo, redémarrez l\'appareil"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"Capteur laser de l\'appareil photo"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"Mises à jour automatiques du système"</string>
<string name="usage" msgid="2977875522080448986">"Utilisation"</string>
@@ -3561,13 +3591,6 @@
<item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> secondes</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"Durée d\'attente : environ <xliff:g id="ESTIMATE">%1$s</xliff:g>"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Ordinateur"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Écouteurs"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Téléphone"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imagerie"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Écouteurs"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Périphérique d\'entrée"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"Gérer l\'espace de stockage"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"Pour vous aider à libérer de l\'espace, le Gestionnaire de stockage supprime les photos et les vidéos sauvegardées sur votre appareil."</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"Supprimer les photos et les vidéos"</string>
@@ -3602,6 +3625,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"Pour vérifier l\'heure, les icônes de notification et d\'autres renseignements, saisissez votre appareil."</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"Consulter les notifications lorsque l\'écran est éteint"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"Balayer lecteur d\'empreintes pour voir notif."</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"Balayez empreinte digitale"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"Pour consulter vos notifications, passez votre doigt de haut en bas sur le capteur d\'empreintes digitales à l\'arrière du téléphone."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"Pour consulter vos notifications, passez votre doigt de haut en bas sur le capteur d\'empreintes digitales à l\'arrière de la tablette."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"Pour consulter vos notifications, passez votre doigt de haut en bas sur le capteur d\'empreintes digitales à l\'arrière de l\'appareil."</string>
@@ -3610,9 +3634,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"Activé"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"Désactivé"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"Le programme d\'amorçage est déjà déverrouillé"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"Connectez-vous d\'abord à Internet"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"Connect. à Internet ou contactez votre fournisseur de services"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"Connectez-vous d\'abord à Internet"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"Connectez à Internet ou contactez votre fournisseur de services"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"Non disp. sur les appareils verrouillés par un f. de services"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"Veuillez redémarrer l\'appareil pour activer la fonction de protection d\'appareil."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"<xliff:g id="SIZE">%1$s</xliff:g> libéré(s) au total\n\n Dernière exécution : <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"Applications instantanées"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"Ouvrir les liens dans les applications, même si elles ne sont pas installées"</string>
@@ -3720,6 +3745,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>Assurez-vous de faire confiance à cette application</b> <br/> <br/> <xliff:g id=app_name example=Google Remplissage automatique>%1$s</xliff:g>utilise les éléments affichés à l\'écran pour déterminer les champs qui peuvent bénéficier de l\'entrée automatique."</string>
<string name="device_theme" msgid="4571803018917608588">"Thème de l\'appareil"</string>
<string name="default_theme" msgid="7085644992078579076">"Par défaut"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"Nom du réseau"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"Afficher le nom du réseau dans la barre d\'état"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"Gestionnaire de stockage : <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"Désactivé"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"Activé"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 6914357..7504796 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -223,7 +223,7 @@
<string name="radio_info_smsc_label" msgid="6399460520126501354">"SMSC:"</string>
<string name="radio_info_smsc_update_label" msgid="7258686760358791539">"अपडेट करें"</string>
<string name="radio_info_smsc_refresh_label" msgid="6902302130315125102">"रीफ़्रेश करें"</string>
- <string name="radio_info_toggle_dns_check_label" msgid="6625185764803245075">"DNS जांच टॉगल करें"</string>
+ <string name="radio_info_toggle_dns_check_label" msgid="6625185764803245075">"DNS जाँच टॉगल करें"</string>
<string name="oem_radio_info_label" msgid="6163141792477958941">"OEM-खास जानकारी/सेटिंग"</string>
<string name="band_mode_title" msgid="4071411679019296568">"रेडियो बैंड मोड सेट करें"</string>
<string name="band_mode_loading" msgid="3555063585133586152">"बैंड सूची लोड कर रहा है..."</string>
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"डिवाइस व्यवस्थापक हाल ही के पासवर्ड का उपयोग करने की अनुमति नहीं देता"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"अंकों के बढ़ते, घटते या दोहराए जाने वाले क्रम की अनुमति नहीं है"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"ठीक है"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"पुष्टि करें"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"रद्द करें"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"साफ़ करें"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"रद्द करें"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को हैंड्सफ़्री ऑडियो से डिस्कनेक्ट कर दिया जाएगा."</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"इनपुट डिवाइस से <xliff:g id="DEVICE_NAME">%1$s</xliff:g> को डिस्कनेक्ट कर दिया जाएगा."</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> द्वारा इंटरनेट पहुंच को डिस्कनेक्ट कर दिया जाएगा."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को इस टैबलेट का इंटरनेट कनेक्शन शेयर करने से डिस्कनेक्ट कर दिया जाएगा."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को इस फ़ोन का इंटरनेट कनेक्शन शेयर करने से डिस्कनेक्ट कर दिया जाएगा."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को इस टैबलेट का इंटरनेट कनेक्शन शेयर करने से रोक दिया जाएगा."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को इस फ़ोन का इंटरनेट कनेक्शन शेयर करने से रोक दिया जाएगा."</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"युग्मित ब्लूटूथ डिवाइस"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"जोड़ दें"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"ब्लूटूथ डिवाइस से कनेक्ट करें"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"इसके लिए उपयोग करें"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"नाम बदलें"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"इनकमिंग फ़ाइल स्थानांतरण की अनुमति दें"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"इंटरनेट पहुंच के लिए डिवाइस से कनेक्ट"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"डिवाइस से स्थानीय इंटरनेट कनेक्शन शेयर किया जा रहा है"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"इंटरनेट के लिए डिवाइस से कनेक्ट है"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"डिवाइस से इंटरनेट शेयर हो रहा है"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"डॉक सेटिंग"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"ऑडियो के लिए डॉक का उपयोग करें"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"स्पीकर फ़ोन के रूप में"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"अनुपलब्ध है क्योंकि वाई-फ़ाई स्कैनिंग बंद कर दी गई है"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"उपयोग करने के लिए, कोई नेटवर्क रेटिंग प्रदाता चुनें"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"खराब कनेक्शन से बचें"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"जब तक वाई-फ़ाई नेटवर्क में अच्छा इंटरनेट कनेक्शन न हो, तब तक उसका उपयोग न करें"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"उन्हीं नेटवर्क का उपयोग करें जिनमें अच्छा इंटरनेट कनेक्शन है"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"जब तक इंटरनेट कनेक्शन अच्छा न हो, वाई-फ़ाई नेटवर्क का इस्तेमाल न करें"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"उन्हीं नेटवर्क का इस्तेमाल करें, जिनमें अच्छा इंटरनेट कनेक्शन है"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"खुले नेटवर्क से कनेक्ट करें"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"अच्छा इंटरनेट देने वाले सार्वजनिक नेटवर्क से अपने आप कनेक्ट करें"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"उपयोग करने के लिए, कोई नेटवर्क रेटिंग प्रदाता चुनें"</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"वाई-फ़ाई ऑप्टिमाइज़ेशन"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"वाई-फ़ाई के चालू रहने पर बैटरी उपयोग को न्यूनतम करें"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"वाई-फ़ाई का बैटरी उपयोग कम करें"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"अगर वाई-फ़ाई नहीं चल रहा हो, तो मोबाइल डेटा पर स्विच करें."</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"अगर वाई-फ़ाई नहीं चल रहा हो, तो मोबाइल डेटा पर स्विच करें."</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"मोबाइल डेटा पर अपने आप स्विच करें"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"जब वाई-फ़ाई के ज़रिये इंटरनेट की सुविधा ना हो तो मोबाइल डेटा का इस्तेमाल करें. डेटा शुल्क लागू हो सकता है."</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"जब वाई-फ़ाई के ज़रिए इंटरनेट न उपलब्ध हो, तो मोबाइल डेटा इस्तेमाल करें. डेटा के लिए भुगतान करना पड़ सकता है."</string>
<string name="wifi_add_network" msgid="6234851776910938957">"नेटवर्क जोड़ें"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"वाई-फ़ाई संबंधी प्राथमिकताएं"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"वाई-फ़ाई अपने आप वापस चालू हो जाता है"</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"कनेक्ट करने के लिए साइन इन करें?"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"<xliff:g id="APP_NAME">%1$s</xliff:g> के लिए नेटवर्क से कनेक्ट करने से पहले साइन करें."</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"कनेक्ट करें"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"इस नेटवर्क में कोई इंटरनेट ऐक्सेस नहीं है. कनेक्ट रहें?"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"इस नेटवर्क में कोई इंटरनेट एक्सेस नहीं है. जुड़े रहें?"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"इस नेटवर्क के लिए फिर से ना पूछें"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"वाई-फ़ाई इंटरनेट से नहीं जुड़ा है"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"वाई-फ़ाई इंटरनेट से नहीं जुड़ा है"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"जब भी वाई-फ़ाई कनेक्शन खराब हो तब आप मोबाइल नेटवर्क का इस्तेमाल कर सकते हैं. डेटा खर्च शुल्क लागू किया जा सकता है."</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"मोबाइल पर स्विच करें"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"वाई-फ़ाई पर रहें"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"बेहतर वाई-फ़ाई"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"MAC पता"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"आईपी पता"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"नेटवर्क की जानकारी"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"नेटवर्क के बारे में जानकारी"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"सबनेट मास्क"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"IPv6 पते"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"क्या आप <xliff:g id="PEER_NAME">%1$s</xliff:g> से कनेक्ट होने का आमंत्रण रद्द करना चाहते हैं?"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"इस समूह को भूलें?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"वाई-फ़ाई हॉटस्पॉट"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"दूसरे डिवाइस से इंटरनेट या सामग्री को साझा नहीं किया जा रहा है"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"हॉटस्पॉट के ज़रिए इस टैबलेट का इंटरनेट कनेक्शन साझा किया जा रहा है"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"हॉटस्पॉट के ज़रिए इस फ़ोन का इंटरनेट कनेक्शन साझा किया जा रहा है"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"ऐप्लिकेशन सामग्री साझा कर रहा है. इंटरनेट कनेक्शन साझा करने के लिए, हॉटस्पॉट बंद करें, फिर उसे चालू करें"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"दूसरे डिवाइस से इंटरनेट या सामग्री को शेयर नहीं किया जा रहा है"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"हॉटस्पॉट के ज़रिए इस टैबलेट का इंटरनेट कनेक्शन शेयर किया जा रहा है"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"हॉटस्पॉट के ज़रिए इस फ़ोन का इंटरनेट कनेक्शन शेयर किया जा रहा है"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"ऐप सामग्री शेयर कर रहा है. इंटरनेट कनेक्शन शेयर करने के लिए, हॉटस्पॉट बंद करके फिर उसे चालू करें"</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"हॉटस्पॉट का नाम"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> चालू किया जा रहा है..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"दूसरे डिवाइस <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> से कनेक्ट हो सकते हैं"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"हॉटस्पॉट का पासवर्ड"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"AP बैंड"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"हॉटस्पॉट का इस्तेमाल करके अपने दूसरे डिवाइस के लिए वाई-फ़ाई नेटवर्क बनाएं. हॉटस्पॉट आपके मोबाइल डेटा कनेक्शन का इस्तेमाल करके इंटरनेट की सुविधा देता है. अतिरिक्त मोबाइल डेटा शुल्क लागू हो सकते हैं."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"अपने दूसरे डिवाइस के लिए हॉटस्पॉट का इस्तेमाल करके वाई-फ़ाई नेटवर्क बनाएं. हॉटस्पॉट आपके मोबाइल डेटा कनेक्शन के ज़रिए इंटरनेट की सुविधा देता है. मोबाइल डेटा के लिए अतिरिक्त भुगतान करना पड़ सकता है."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"ऐप्लिकेशन आस-पास के डिवाइस से सामग्री साझा करने के लिए कोई हॉटस्पॉट बना सकते हैं."</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"हॉटस्पॉट को चालू किया जा रहा है…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"हॉटस्पॉट को बंद किया जा रहा है…"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"वाई-फ़ाई कॉलिंग चालू होने पर, आपका फ़ोन वाई-फ़ाई या मोबाइल और इंटरनेट सेवा देने वाली कंपनी के नेटवर्क के ज़रिए कॉल कर सकता है. यह इस बात पर निर्भर करेगा कि आप क्या चाहते हैं और इनमें से कौन सा सिग्नल बेहतर काम कर रहा है. इस सुविधा को चालू करने से पहले, शुल्क और अन्य जानकारी के बारे में अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से बात करें."</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"आपातकालीन पता अपडेट करें"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"जब आप वाई-फ़ाई का इस्तेमाल करके 911 पर कॉल करते है तब आपातकालीन सेवाओं के ज़रिये आपकी जगह के तौर पर इस्तेमाल किया जाने वाला पता"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"आपातकालीन पता"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"जब आप वाई-फ़ाई पर आपातकालीन कॉल करते हैं, तब आपकी मौजूदा जगह को आपके पते के तौर पर इस्तेमाल किया जाता है"</string>
<string name="display_settings_title" msgid="1708697328627382561">"स्क्रीन सेटिंग देखें"</string>
<string name="sound_settings" msgid="5534671337768745343">"आवाज़"</string>
<string name="all_volume_title" msgid="4296957391257836961">"आवाज़"</string>
@@ -1004,8 +1004,11 @@
<string name="search_settings_no_results" msgid="8799027492641230999">"कोई परिणाम नहीं"</string>
<string name="search_clear_history" msgid="4196658962573162457">"इतिहास साफ़ करें"</string>
<string name="display_settings" msgid="7965901687241669598">"स्क्रीन सेटिंग"</string>
- <string name="accelerometer_title" msgid="7854608399547349157">"स्क्रीन अपनेआप घुमाएं"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"चमकीले रंग"</string>
+ <string name="accelerometer_title" msgid="7854608399547349157">"स्क्रीन अपने आप घुमाएं"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"रंग"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"बिना किसी बदलाव के"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"बढ़ाया गया"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"सैचुरेट किया गया"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"टैबलेट घुमाने पर स्क्रीन की दिशा अपने आप बदलें"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"फ़ोन घुमाने पर स्क्रीन की दिशा अपने आप बदलें"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"टैबलेट घुमाने पर स्क्रीन की दिशा अपने आप बदलें"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"सिस्टम के बारे में नई जानकारी"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"Android वर्शन"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"Android सुरक्षा पैच का स्तर"</string>
<string name="model_info" msgid="1952009518045740889">"मॉडल"</string>
+ <string name="model_summary" msgid="8306235877567782987">"मॉडल: %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"मॉडल और हार्डवेयर"</string>
<string name="hardware_revision" msgid="8893547686367095527">"हार्डवेयर वर्शन"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"डिवाइस आईडी"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"मेमोरी सेटिंग"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"USB मेमोरी अनमाउंट करें, उपलब्ध मेमोरी देखें"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"SD कार्ड अनमाउंट करें, उपलब्ध मेमोरी देखें"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"मेरा फ़ोन नंबर"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"फ़ोन नंबर"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"सिम का MDN"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"सिम का फ़ोन नंबर"</string>
<string name="status_min_number" msgid="3519504522179420597">"MIN"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"PRL वर्शन"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"मोबाइल नेटवर्क प्रकार"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"अन्य"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"सिस्टम"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"<xliff:g id="NAME">^1</xliff:g> एक्सप्लोर करें"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"अन्य में, ऐप्लिकेशन द्वारा सहेजी गई साझा फ़ाइलें, इंटरनेट या ब्लूटूथ से डाउनलोड की गई फ़ाइलें, Android फ़ाइलें आदि शामिल होती हैं. \n\nइस <xliff:g id="NAME">^1</xliff:g> की दृश्यमान सामग्री देखने के लिए, एक्सप्लोर करें पर टैप करें."</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"अन्य चीज़ों में ऐप के ज़रिए सेव की गई, इंटरनेट या ब्लूटूथ से डाउनलोड की गई और Android की फ़ाइलों के साथ ही अन्य फ़ाइलें शामिल हैं. \n\nइस <xliff:g id="NAME">^1</xliff:g> पर उपलब्ध सामग्री देखने के लिए \'बेहतर जानें\' पर टैप करें."</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"सिस्टम में ऐसी फ़ाइलें शामिल हैं जिनका उपयोग Android वर्शन <xliff:g id="VERSION">%s</xliff:g> को चलाने के लिए किया जाता है"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"हो सकता है कि <xliff:g id="USER_0">^1</xliff:g> ने <xliff:g id="SIZE">^2</xliff:g> जगह का उपयोग करके फ़ोटो, संगीत, ऐप्लिकेशन या अन्य डेटा सहेजा हो. \n\nविवरण देखने के लिए, <xliff:g id="USER_1">^1</xliff:g> पर स्विच करें."</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"अपना <xliff:g id="NAME">^1</xliff:g> सेट करें"</string>
@@ -1382,15 +1397,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"डेटा बचाने की सेटिंग चालू होने पर इंटरनेट शेयर नहीं किया जा सकता या पोर्टेबल हॉटस्पॉट का इस्तेमाल नहीं किया जा सकता"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"USB से इंटरनेट पर शेयर करें"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"USB के ज़रिए फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"USB के ज़रिए टैबलेट का इंटरनेट कनेक्शन साझा करें"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"यूएसबी के ज़रिए फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"यूएसबी के ज़रिए टैबलेट का इंटरनेट कनेक्शन शेयर करें"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"ब्लूटूथ से इंटरनेट पर शेयर करें."</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"ब्लूटूथ के ज़रिए टैबलेट का इंटरनेट कनेक्शन साझा करें"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"ब्लूटूथ के ज़रिए फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g> का इंटरनेट कनेक्शन ब्लूटूथ से साझा हो रहा है"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"ब्लूटूथ के ज़रिए टैबलेट का इंटरनेट कनेक्शन शेयर करें"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"ब्लूटूथ के ज़रिए फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g> का इंटरनेट कनेक्शन ब्लूटूथ से शेयर हो रहा है"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"<xliff:g id="MAXCONNECTION">%1$d</xliff:g> डिवाइस से अधिक को टेदर नहीं कर सकता."</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> को अनटेदर किया जाएगा."</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"अपने मोबाइल डेटा कनेक्शन के ज़रिए दूसरे डिवाइस को इंटरनेट देने के लिए हॉटस्पॉट और इंटरनेट पर शेयर करने का उपयोग करें. ऐप आस-पास के डिवाइस से सामग्री शेयर करने के लिए हॉटस्पॉट भी बना सकते हैं."</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"अपने मोबाइल डेटा कनेक्शन के ज़रिए दूसरे डिवाइस को इंटरनेट देने के लिए हॉटस्पॉट और इंटरनेट पर शेयर करने का इस्तेमाल करें. ऐप आस-पास के डिवाइस से सामग्री शेयर करने के लिए हॉटस्पॉट भी बना सकते हैं."</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"सहायता"</string>
<string name="network_settings_title" msgid="2876509814832830757">"मोबाइल नेटवर्क"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"मोबाइल प्लान"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"लोड हो रहा है..."</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"सुरक्षा की जानकारी"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"सुरक्षा की जानकारी"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"आपके पास डेटा कनेक्शन नहीं है. इस जानकारी को अभी देखने के लिए, इंटरनेट से कनेक्ट किसी भी कंप्यूटर से %s पर जाएं."</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"आपके पास डेटा कनेक्शन नहीं है. इस जानकारी को अभी देखने के लिए, इंटरनेट से जुड़े किसी भी कंप्यूटर से %s पर जाएं."</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"लोड हो रहा है..."</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"स्क्रीन लॉक सेट करें"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"सुरक्षा के लिए, पासवर्ड सेट करें"</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"ऐप का विवरण"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"<xliff:g id="APP_STORE">%1$s</xliff:g> से इंस्टॉल किया गया ऐप्लिकेशन"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"<xliff:g id="APP_STORE">%1$s</xliff:g> के बारे में और जानकारी"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"ऐप्स संचालन"</string>
<string name="app_ops_running" msgid="7706949900637284122">"चल रहा है"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(कभी उपयोग नहीं किया)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"कोई डिफ़ॉल्ट ऐप नहीं."</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"भाषाएं और इनपुट"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"आप डिवाइस की भाषा नहीं बदल सकते."</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"भाषाएं और इनपुट"</string>
<string name="input_assistance" msgid="7577795275222555487">"इनपुट सहायता"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"कीबोर्ड और इनपुट के तरीके"</string>
@@ -1737,7 +1752,7 @@
<string name="auto_punctuate_summary" msgid="4372126865670574837">"\".\" सम्मिलित करने के लिए Space कुंजी दो बार दबाएं"</string>
<string name="show_password" msgid="4837897357002495384">"पासवर्ड दिखाएं"</string>
<string name="show_password_summary" msgid="3365397574784829969">"लिखते समय वर्ण दिखाएं"</string>
- <string name="spellchecker_security_warning" msgid="9060897418527708922">"यह स्पेलिंग जांचने वाला निजी डेटा, जैसे पासवर्ड और क्रेडिट कार्ड नंबर के साथ आपके लिखे सभी लेख इकट्ठा कर सकता है. यह एप्लिकेशन <xliff:g id="SPELLCHECKER_APPLICATION_NAME">%1$s</xliff:g> से आता है. इस स्पेलिंग जांचने वाले का इस्तेमाल करें?"</string>
+ <string name="spellchecker_security_warning" msgid="9060897418527708922">"यह स्पेलिंग जाँचने वाला निजी डेटा, जैसे पासवर्ड और क्रेडिट कार्ड नंबर के साथ आपके लिखे सभी लेख इकट्ठा कर सकता है. यह एप्लिकेशन <xliff:g id="SPELLCHECKER_APPLICATION_NAME">%1$s</xliff:g> से आता है. इस स्पेलिंग जाँचने वाले का इस्तेमाल करें?"</string>
<string name="spellchecker_quick_settings" msgid="246728645150092058">"सेटिंग"</string>
<string name="spellchecker_language" msgid="6041050114690541437">"भाषा"</string>
<string name="keyboard_and_input_methods_category" msgid="6035224122054465137">"कीबोर्ड और इनपुट"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"सेवाएं"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"अवधि"</string>
<string name="mem_details_title" msgid="6548392825497290498">"मेमोरी का विवरण"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"मेमोरी की स्थितियां"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"मेमोरी उपयोग"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"कर्नल"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"स्थानीय"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"कर्नल कैश मेमोरी"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"ZRam स्वैप"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"नि:शुल्क"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"कुल"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3 घंटे"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6 घंटे"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"12 घंटे"</string>
@@ -2354,7 +2361,7 @@
<string name="cryptkeeper_wrong_pattern" msgid="8423835922362956999">"गलत पैटर्न"</string>
<string name="cryptkeeper_wrong_password" msgid="5200857195368904047">"गलत पासवर्ड"</string>
<string name="cryptkeeper_wrong_pin" msgid="755720788765259382">"गलत पिन"</string>
- <string name="checking_decryption" msgid="8287458611802609493">"जांच की जा रही है..."</string>
+ <string name="checking_decryption" msgid="8287458611802609493">"जाँच की जा रही है..."</string>
<string name="starting_android" msgid="4001324195902252681">"Android प्रारंभ किया जा रहा है..."</string>
<string name="delete" msgid="4219243412325163003">"मिटाएं"</string>
<string name="misc_files" msgid="6720680815969643497">"विविध फ़ाइलें"</string>
@@ -2427,7 +2434,7 @@
<string name="data_usage_cycle_editor_positive" msgid="8821760330497941117">"सेट करें"</string>
<string name="data_usage_warning_editor_title" msgid="3704136912240060339">"डेटा खर्च की चेतावनी सेट करें"</string>
<string name="data_usage_limit_editor_title" msgid="9153595142385030015">"डेटा खर्च की सीमा सेट करें"</string>
- <string name="data_usage_limit_dialog_title" msgid="3023111643632996097">"डेटा र्खच सीमित करना"</string>
+ <string name="data_usage_limit_dialog_title" msgid="3023111643632996097">"डेटा खर्च सीमित करना"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="4983487893343645667">"जैसे ही आपका टैबलेट डेटा, आपकी सेट की हुई सीमा पर पहुंचेगा, आपका टैबलेट उसे बंद कर देगा.\n\nचूंकि डेटा खर्च आपके टैबलेट से मापा जाता है और आपकी मोबाइल और इंटरनेट सेवा देने वाली कंपनी, इस्तेमाल किए गए डेटा का हिसाब अलग तरीके से लगा सकती है. इसलिए सीमा को कम पर सेट करने के बारे में विचार करें."</string>
<string name="data_usage_limit_dialog_mobile" product="default" msgid="3926320594049434225">"जैसे ही आपका मोबाइल डेटा आपकी सेट की हुई सीमा पर पहुंचेगा, आपका फ़ोन उसे बंद कर देगा.\n\nचूंकि डेटा खर्च आपके फ़ोन से मापा जाता है और आपकी मोबाइल और इंटरनेट सेवा देने वाली कंपनी, इस्तेमाल किए गए डेटा का हिसाब अलग तरीके से लगा सकती है. इसलिए सीमा को कम पर सेट करने के बारे में विचार करें."</string>
<string name="data_usage_restrict_background_title" msgid="2201315502223035062">"पृष्ठभूमि डेटा प्रतिबंधित करें?"</string>
@@ -2492,8 +2499,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"VPN भूल जाएं"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"मौजूदा VPN को बदलें?"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"हमेशा-चालू VPN सेट करें?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"यह सेटिंग चालू करने से, आपके पास तब तक इंटरनेट कनेक्शन नहीं होगा जब तक कि VPN सफलतापूर्वक कनेक्ट नहीं हो जाता"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"आपका मौजूदा VPN बदल दिया जाएगा और आपके पास तब तक इंटरनेट कनेक्शन नहीं होगा जब तक कि VPN सफलतापूर्वक कनेक्ट नहीं हो जाता"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"यह सेटिंग चालू होने पर, आपके पास तब तक इंटरनेट कनेक्शन नहीं होगा, जब तक कि VPN अच्छी तरह कनेक्ट नहीं हो जाता"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"आपका मौजूदा VPN बदल दिया जाएगा. आपके पास तब तक इंटरनेट कनेक्शन नहीं होगा, जब तक कि VPN कनेक्ट नहीं हो जाता"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"आप हमेशा चालू रहने वाले किसी VPN से पहले से कनेक्ट हैं. यदि आप किसी दूसरे से कनेक्ट करते हैं तो मौजूदा VPN बदल दिया जाएगा और हमेशा-चालू मोड बंद हो जाएगा."</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"आप पहले से ही किसी VPN से कनेक्ट हैं. यदि आप किसी दूसरे से कनेक्ट करते हैं, तो आपका माैजूदा VPN बदल दिया जाएगा."</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"चालू करें"</string>
@@ -2534,7 +2541,7 @@
<string name="user_credential_title" msgid="1954061209643070652">"क्रेडेंशियल की पूरी जानकारी"</string>
<string name="user_credential_removed" msgid="6514189495799401838">"क्रेडेंशियल निकाला गया: <xliff:g id="CREDENTIAL_NAME">%s</xliff:g>"</string>
<string name="user_credential_none_installed" msgid="3729607560420971841">"कोई यूज़र क्रेडेंशियल इंस्टॉल नहीं है"</string>
- <string name="spellcheckers_settings_title" msgid="399981228588011501">"शब्द जांच"</string>
+ <string name="spellcheckers_settings_title" msgid="399981228588011501">"शब्द जाँच"</string>
<string name="current_backup_pw_prompt" msgid="7735254412051914576">"अपना वर्तमान पूर्ण बैकअप पासवर्ड यहां लिखें"</string>
<string name="new_backup_pw_prompt" msgid="8755501377391998428">"पूर्ण बैकअप के लिए यहां नया पासवर्ड लिखें"</string>
<string name="confirm_new_backup_pw_prompt" msgid="3238728882512787864">"यहां अपना नया पूर्ण बैकअप पासवर्ड फिर से लिखें"</string>
@@ -2557,8 +2564,8 @@
</plurals>
<string name="ssl_ca_cert_warning_message" msgid="8216218659139190498">"एक तृतीय पक्ष ईमेल, ऐप्स और सुरक्षित वेबसाइटों सहित आपकी नेटवर्क गतिविधि को मॉनीटर करने में सक्षम है.\n\nआपके डिवाइस पर इंस्टॉल किए गए एक विश्वसनीय क्रेंडेशियल के कारण ऐसा संभव हो रहा है."</string>
<plurals name="ssl_ca_cert_settings_button" formatted="false" msgid="2426799352517325228">
- <item quantity="one">प्रमाणपत्रों की जांच करें</item>
- <item quantity="other">प्रमाणपत्रों की जांच करें</item>
+ <item quantity="one">प्रमाणपत्रों की जाँच करें</item>
+ <item quantity="other">प्रमाणपत्रों की जाँच करें</item>
</plurals>
<string name="user_settings_title" msgid="6151874007858148344">"उपयोगकर्ता"</string>
<string name="user_list_title" msgid="7937158411137563543">"उपयोगकर्ता और प्रोफ़ाइल"</string>
@@ -2720,6 +2727,8 @@
<string name="color_purple" msgid="3888532466427762504">"बैंगनी"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"कोई सिम कार्ड नहीं डाला गया"</string>
<string name="sim_status_title" msgid="6744870675182447160">"सिम स्थिति"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"डिफ़ॉल्ट सिम से कॉल करें"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"किया जाने वाला कॉल (आउटगोइंग) के लिए सिम"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"अन्य कॉल सेटिंग"</string>
@@ -2733,13 +2742,15 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"इसके लिए पसंदीदा सिम"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"हर बार पूछें"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"चयन आवश्यक है"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"सेटिंग"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="one">छिपे हुए %d आइटम दिखाएं</item>
<item quantity="other">छिपे हुए %d आइटम दिखाएं</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"छोटा करें"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"नेटवर्क और इंटरनेट"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"नेटवर्क और इंटरनेट"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"मोबाइल"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"डेटा खर्च"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"हॉटस्पॉट"</string>
@@ -2799,6 +2810,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"भुगतान करें, टैप करें, भुगतान"</string>
<string name="keywords_backup" msgid="470070289135403022">"बैकअप, बैक अप"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"जेस्चर"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"वाई-फ़ाई NFC टैग सेट करें"</string>
<string name="write_tag" msgid="8571858602896222537">"लिखें"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"लिखने के लिए टैग टैप करें..."</string>
@@ -2836,10 +2855,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"अलर्ट"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"कंपन (वाइब्रेशन)"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"चालू होने की ध्वनि"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"कोई भी ऑटोमैटिक नियम चालू नहीं है"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="one"><xliff:g id="ON_COUNT">%d</xliff:g> ऑटोमैटिक नियम चालू किए गए</item>
- <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> ऑटोमैटिक नियम चालू किए गए</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"कभी नहीं"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="one"><xliff:g id="ON_COUNT">%d</xliff:g> नियम</item>
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> नियम</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"परेशान न करें"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"व्यवहार"</string>
@@ -2847,9 +2866,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"कोई आवाज़ नहीं"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"कोई आवाज़ नहीं (एकदम मौन)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"<xliff:g id="CATEGORIES">%1$s</xliff:g> के अलावा कोई आवाज़ नहीं"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"अॉटोमैटिक नियम"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"अलार्म, मीडिया और सिस्टम वाले सुझाव के अलावा कोई आवाज़ नहीं (सिर्फ़ अलार्म)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"अपने आप चालू करें"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"अपने आप लागू होने वाले नियम"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"परेशान न करें के नियम सेट करें"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"निश्चित समय पर ध्वनियों और कंपनों को सीमित करें"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"सिर्फ़ प्राथमिकता"</string>
@@ -2857,6 +2876,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"पूरी तरह शांत"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"मैसेज पर स्क्रीन चमकने से रोकें"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"संकेत दिखाए जाने की अनुमति दें"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"जोड़ें"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"कार्य प्रोफ़ाइल की ध्वनियां"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"व्यक्तिगत प्रोफाइल ध्वनि काम में लें"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"कार्य और व्यक्तिगत प्रोफ़ाइल के लिए ध्वनियां एक समान होती हैं"</string>
@@ -2983,7 +3018,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"नियम का नाम"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"नियम का नाम डालें"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"नियम नाम पहले से उपयोग में है"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"ज़्यादा जोड़ें"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"नियम जोड़ें"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"इवेंट से जुड़े नियम जोड़ें"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"समय से जुड़े नियम जोड़ें"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"नियम मिटाएं"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"नियम का प्रकार चुनें"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"<xliff:g id="RULE">%1$s</xliff:g> नियम मिटाएं?"</string>
@@ -2991,9 +3028,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"नियम का प्रकार"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"अज्ञात"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"नियम कॉन्फ़िगर करें"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"समय का नियम"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"समय"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"विशिष्ट समय के दौरान स्वचालित नियम को परेशान ना करें को चालू करने पर सेट किया गया है"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"इवेंट का नियम"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"इवेंट"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"विशिष्ट इवेंट के दौरान स्वचालित नियम को परेशान ना करें को चालू करने पर सेट किया गया है"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"इसके लिए इवेंट के दौरान"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"<xliff:g id="CALENDAR">%1$s</xliff:g> के लिए इवेंट के दौरान"</string>
@@ -3024,8 +3061,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"सिर्फ़ तारांकित संपर्कों से"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"कोई नहीं"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"अलार्म"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"मीडिया और सिस्टम वाले सुझाव"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"रिमाइंडर"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"इवेंट"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"सभी कॉल करने वाले (कॉलर)"</string>
@@ -3050,15 +3086,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"केवल <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> तक के लिए अलार्म को बदलें"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"हमेशा बाधित करें में बदलें"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"स्क्रीन चालू होने पर रोकें"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"परेशान न करें की वजह से म्यूट हुई सूचनाओं को स्क्रीन पर तांक-झांक करने या अलग विंडो में खुलने से रोकें"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"स्क्रीन बंद होने पर रोकें"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"परेशान न करें की वजह से म्यूट हुई सूचनाओं को स्क्रीन को चालू करने या सूचना की रोशनी को पल्स करने से रोकें"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"परेशान न करें के ज़रिये म्यूट हुई सूचनाओं को स्क्रीन चालू करने से रोकें"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"बंद"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"स्क्रीन के चालू होने पर"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"स्क्रीन के बंद होने पर"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"स्क्रीन के चालू या बंद होने पर"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"जब स्क्रीन चालू हो"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"\'परेशान न करें\' के ज़रिये म्यूट हुई सूचनाओं को स्क्रीन पर दिखने दें"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"जब स्क्रीन बंद हो"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"\'परेशान न करें\' के ज़रिए म्यूट हुई सूचनाओं को स्क्रीन चालू करने दें और लाइट चालू/बंद करने दें"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"\'परेशान न करें\' के ज़रिये म्यूट हुई सूचनाओं को स्क्रीन चालू करने दें"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"सूचना सेटिंग"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"ठीक है"</string>
<string name="device_feedback" msgid="3238056036766293294">"इस डिवाइस के बारे में फ़ीडबैक भेजें"</string>
@@ -3378,7 +3410,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"हॉटस्पॉट चालू है"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"पोर्टेबल वाई-फ़ाई हॉटस्पॉट <xliff:g id="ID_1">%1$s</xliff:g> सक्रिय है, इस डिवाइस के लिए वाई-फ़ाई बंद है."</string>
<string name="condition_airplane_title" msgid="287356299107070503">"हवाई जहाज़ मोड चालू है"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"वाई-फ़ाई, ब्लूटूथ और मोबाइल नेटवर्क बंद हैं. आप फ़ोन कॉल नहीं कर सकते या इंटरनेट से कनेक्ट नहीं कर सकते."</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"वाई-फ़ाई, ब्लूटूथ और मोबाइल नेटवर्क बंद हैं. आप कॉल नहीं कर सकते और इंटरनेट से भी कनेक्ट नहीं कर सकते."</string>
<string name="condition_zen_title" msgid="2679168532600816392">"परेशान न करें चालू है (<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"बैटरी सेवर चालू है"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"प्रदर्शन कम कर दिया गया है. जगह की जानकारी और बैकग्राउंड डेटा बंद हैं."</string>
@@ -3410,8 +3442,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"कनेक्टिविटी मॉनीटर"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"कनेक्टिविटी से जुड़ी किसी समस्या का पता चलने पर, कनेक्टिविटी मॉनीटर लॉग इकट्ठा करता है और उपयोगकर्ता को गड़बड़ी की जानकारी दर्ज करने के लिए सूचना देता है"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"कनेक्टिविटी मॉनीटर वाले बदलाव लागू करने के लिए, डिवाइस फिर से चालू करें"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"कैमरा HAL HDR+"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"कैमरा HAL HDR+ में किये गए बदलाव लागू करने के लिए, डिवाइस को फिर से चालू करें"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"कैमरा लेज़र सेंसर"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"स्वचालित सिस्टम अपडेट"</string>
<string name="usage" msgid="2977875522080448986">"उपयोग"</string>
@@ -3466,8 +3496,8 @@
<string name="battery_saver_desc_turn_on_auto_pct" msgid="7472323223085636533">"%1$s बैटरी शेष रहने पर अपने आप चालू करें"</string>
<string name="not_battery_optimizing" msgid="5362861851864837617">"बैटरी ऑप्टिमाइज़ेशन का उपयोग नहीं कर रहा है"</string>
<string name="lockscreen_remote_input" msgid="969871538778211843">"अगर डिवाइस लॉक है, तो सूचनाओं का जवाब या अन्य लेख लिखने से रोकें"</string>
- <string name="default_spell_checker" msgid="8506899870026026660">"डिफ़ॉल्ट वर्तनी-जांचकर्ता"</string>
- <string name="choose_spell_checker" msgid="6596539862291699367">"वर्तनी-जांचकर्ता चुनें"</string>
+ <string name="default_spell_checker" msgid="8506899870026026660">"डिफ़ॉल्ट वर्तनी-जाँचकर्ता"</string>
+ <string name="choose_spell_checker" msgid="6596539862291699367">"वर्तनी-जाँचकर्ता चुनें"</string>
<string name="spell_checker_not_selected" msgid="8871083796179200696">"नहीं चुना गया"</string>
<string name="notification_log_no_title" msgid="5678029849672024215">"(कुछ नहीं)"</string>
<string name="notification_log_details_delimiter" msgid="3116559361552416747">": "</string>
@@ -3561,13 +3591,6 @@
<item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> सेकंड</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"~<xliff:g id="ESTIMATE">%1$s</xliff:g> प्रतीक्षा करें"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"कंप्यूटर"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"हेडसेट"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"फ़ोन"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"इमेजिंग"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"हेडफ़ोन"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"इनपुट पेरिफ़ेरल"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"ब्लूटूथ"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"जगह प्रबंधित करें"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"मेमोरी में जगह खाली करने में मदद करने के लिए, मेमोरी प्रबंधक आपके डिवाइस से बैकअप ली गई फ़ोटो और वीडियो निकाल देता है."</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"फ़ोटो और वीडियो निकालें"</string>
@@ -3602,6 +3625,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"समय, नोटिफ़िकेशन आइकॉन और अन्य जानकारी देखने के लिए, अपने डिवाइस का इस्तेमाल करें."</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"स्क्रीन बंद होने पर सूचनाएं देखें"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"सूचनाओं के लिए फ़िंगरप्रिंट स्वाइप करें"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"फ़िंगरप्रिंट स्वाइप करें"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"अपने सूचना देखने के लिए, अपने फ़ोन के पीछे फ़िंगरप्रिंट सेंसर पर नीचे की तरफ़ स्वाइप करें."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"अपने सूचना देखने के लिए, अपने टैबलेट के पीछे फ़िंगरप्रिंट सेंसर पर नीचे की तरफ़ स्वाइप करें."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"अपनी सूचनाएं देखने के लिए, अपने डिवाइस के पीछे फ़िंगरप्रिंट सेंसर पर नीचे की तरफ़ स्वाइप करें."</string>
@@ -3610,9 +3634,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"चालू"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"बंद"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"बूटलोडर पहले से ही अनलाॅक किया हुआ है"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"पहले इंटरनेट से कनेक्ट करें"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"इंटरनेट से जुड़ें या अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से संपर्क करें"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"पहले इंटरनेट से कनेक्ट करें"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"इंटरनेट से जोड़ें या मोबाइल सेवा देने वाली कंपनी से संपर्क करें"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लॉक किए गए डिवाइस पर नहीं पाया जा सकता"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"डिवाइस सुरक्षा सुविधा चालू करने के लिए कृपया डिवाइस रीस्टार्ट करें."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"<xliff:g id="SIZE">%1$s</xliff:g> कुल उपलब्ध कराया गया\n\nपिछली बार <xliff:g id="DATE">%2$s</xliff:g> को चलाया गया"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"झटपट ऐप्स"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"सभी लिंक एप्लिकेशन में खोलें, भले ही वे इंस्टॉल न हों"</string>
@@ -3720,6 +3745,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>सुनिश्चित करें कि आप इस ऐप्लिकेशन पर भरोसा करते हैं</b> <br/> <br/> <xliff:g id=app_name example=Google ऑटोमैटिक भरना>%1$s</xliff:g> ऑटोमैटिक भरी जा सकने वाली चीज़ें निर्धारित करने के लिए आपकी स्क्रीन पर मौजूद चीज़ों का उपयोग करता है."</string>
<string name="device_theme" msgid="4571803018917608588">"डिवाइस की थीम"</string>
<string name="default_theme" msgid="7085644992078579076">"डिफ़ॉल्ट"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"नेटवर्क का नाम"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"स्टेटस बार में नेटवर्क का नाम दिखाएं"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"जगह प्रबंधक: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"बंद"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"चालू"</string>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index a16f6d5..279ab44 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"端末管理により、最近使用したパスワードは使用できません"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"一連の数字を昇順や降順にしたり、繰り返したりすることはできません"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"OK"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"確認"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"キャンセル"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"消去"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"キャンセル"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>はハンズフリー音声デバイスから切断されます。"</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>は入力デバイスから切断されます。"</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>経由のインターネットアクセスを切断します。"</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"このタブレットのインターネット接続の共有から<xliff:g id="DEVICE_NAME">%1$s</xliff:g>を切断します。"</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"このモバイル端末のインターネット接続の共有から<xliff:g id="DEVICE_NAME">%1$s</xliff:g>を切断します。"</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"このタブレットのインターネット接続の共有から <xliff:g id="DEVICE_NAME">%1$s</xliff:g> を切断します。"</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"このスマートフォンのインターネット接続の共有から <xliff:g id="DEVICE_NAME">%1$s</xliff:g> を切断します。"</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"ペア設定したBluetoothデバイス"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"接続"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"Bluetoothデバイスに接続"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"使用目的"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"名前を変更"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"ファイル転送の受信を許可"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"インターネットアクセス用に接続"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"ローカルインターネット接続をデバイスと共有"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"インターネット アクセス用にデバイスに接続"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"ローカル インターネット接続をデバイスと共有"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"ホルダーの設定"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"音声をホルダーに出力"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"スピーカーフォン"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"Wi‑Fi のスキャンが OFF になっているため利用できません"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"この機能を使用するには、ネットワーク評価プロバイダを選択してください"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"接続不良のとき無効にする"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"安定したインターネット接続があるときのみWi-Fiネットワークを使用する"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"インターネット接続が安定したネットワークのみ使用する"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"安定したインターネット接続があるときのみ Wi-Fi ネットワークを使用する"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"インターネット接続が安定したネットワークのみ使用する"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"オープン ネットワークに接続する"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"高品質の公共ネットワークに自動的に接続する"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"この機能を使用するには、ネットワーク評価プロバイダを選択してください"</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"Wi-Fi最適化"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"Wi-FiがONのときに電池使用を節約する"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"Wi-Fiの電池使用量を制限する"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"Wi-Fi でインターネットにアクセスできない場合にモバイルデータに切り替える"</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"Wi-Fi でインターネットにアクセスできない場合にモバイルデータに切り替える"</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"モバイルデータへの自動切り替え"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"Wi-Fi でインターネットにアクセスできない場合にモバイルデータを使用します。データ使用量が加算されることがあります。"</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"Wi-Fi でインターネットにアクセスできない場合にモバイルデータを使用します。データ通信料が発生する可能性があります。"</string>
<string name="wifi_add_network" msgid="6234851776910938957">"ネットワークを追加"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"Wi‑Fi 設定"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"Wi‑Fi は自動的に ON になります"</string>
@@ -772,7 +772,7 @@
<string name="wifi_empty_list_user_restricted" msgid="7322372065475939129">"Wi-Fiネットワークを変更する権限がありません。"</string>
<string name="wifi_more" msgid="3195296805089107950">"その他"</string>
<string name="wifi_setup_wps" msgid="8128702488486283957">"自動設定(WPS)"</string>
- <string name="wifi_show_advanced" msgid="3409422789616520979">"詳細設定項目"</string>
+ <string name="wifi_show_advanced" msgid="3409422789616520979">"詳細設定"</string>
<string name="wifi_advanced_toggle_description_expanded" msgid="2380600578544493084">"詳細オプションのプルダウン リストです。折りたたむにはダブルタップします。"</string>
<string name="wifi_advanced_toggle_description_collapsed" msgid="1463812308429197263">"詳細オプションのプルダウン リストです。展開するにはダブルタップします。"</string>
<string name="wifi_wps_setup_title" msgid="8207552222481570175">"Wi-Fi保護設定"</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"ログインして接続しますか?"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"<xliff:g id="APP_NAME">%1$s</xliff:g>では、オンラインでログインしないとネットワーク接続できません。"</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"接続する"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"このネットワークはインターネットに接続していません。接続を維持しますか?"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"このネットワークはインターネットに接続していません。接続を維持しますか?"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"このネットワークについて次回から表示しない"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"Wi‑Fi がインターネットに接続されていません"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"Wi-Fi はインターネットに接続していません"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"Wi-Fi の接続状況が悪い場合にモバイル ネットワークに切り替えることができます。データ使用量について請求が発生することがあります。"</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"モバイルデータに切り替え"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"Wi‑Fi を継続"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"Wi-Fi詳細設定"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"MACアドレス"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"IPアドレス"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"ネットワーク情報"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"ネットワークの詳細"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"サブネット マスク"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"IPv6 アドレス"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"<xliff:g id="PEER_NAME">%1$s</xliff:g>との接続への招待をキャンセルしますか?"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"このグループを削除しますか?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"Wi-Fi アクセス ポイント"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"インターネット接続やコンテンツを他の端末と共有しない"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"このタブレットのインターネット接続をアクセス ポイント経由で共有"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"このスマートフォンのインターネット接続をアクセス ポイント経由で共有"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"アプリがコンテンツを共有しています。インターネット接続を共有するには、アクセス ポイントをオフにしてから再度オンにします"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"インターネット接続やコンテンツを他の端末と共有しない"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"このタブレットのインターネット接続をアクセス ポイント経由で共有"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"このスマートフォンのインターネット接続をアクセス ポイント経由で共有"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"アプリがコンテンツを共有しています。インターネット接続を共有するには、アクセス ポイントを OFF にしてから再度 ON にします"</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"アクセス ポイント名"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> を ON にしています..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"他の端末が <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> に接続できます"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"アクセス ポイントのパスワード"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"AP 帯域幅"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"アクセス ポイントを使って他の端末との Wi‑Fi ネットワークを作成します。アクセス ポイントはモバイルデータ接続によるインターネット接続を提供します。モバイルデータ通信料が追加で発生する可能性があります。"</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"アクセス ポイントを使って他の端末との Wi‑Fi ネットワークを作成します。アクセス ポイントはモバイルデータ通信によるインターネット接続を提供します。モバイルデータ通信料が追加で発生する可能性があります。"</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"アプリを使ってアクセス ポイントを作成し、コンテンツを近くの端末と共有できます。"</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"アクセスポイントをONにしています…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"アクセスポイントをOFFにしています…"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"Wi-Fi発信をONにすると、ユーザーの設定と信号の強度に応じて、スマートフォンからWi-Fiネットワークか携帯通信会社ネットワークのいずれかを経由して通話をルーティングできるようになります。この機能をONにする場合は、事前に料金などの条件について携帯通信会社にご確認ください。"</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"緊急対応の住所の更新"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"Wi‑Fi を使用して緊急通報を行った場合に、緊急サービスが現在地として使用する住所"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"緊急対応の住所"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"Wi‑Fi を使用して緊急通報を行った場合に、現在地として使用されます"</string>
<string name="display_settings_title" msgid="1708697328627382561">"表示"</string>
<string name="sound_settings" msgid="5534671337768745343">"音"</string>
<string name="all_volume_title" msgid="4296957391257836961">"音量"</string>
@@ -1005,7 +1005,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"履歴を削除"</string>
<string name="display_settings" msgid="7965901687241669598">"ディスプレイ"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"画面の自動回転"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"鮮明な色"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"カラー"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"ナチュラル"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"ブースト"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"彩度調整"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"画面の向きに合わせて縦横表示を切り替える"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"画面の向きに合わせて縦横表示を切り替える"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"画面の向きに合わせて縦横表示を切り替える"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"システムアップデート"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"Androidバージョン"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"Androidセキュリティパッチレベル"</string>
<string name="model_info" msgid="1952009518045740889">"モデル"</string>
+ <string name="model_summary" msgid="8306235877567782987">"モデル: %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"モデルとハードウェア"</string>
<string name="hardware_revision" msgid="8893547686367095527">"ハードウェア バージョン"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"装置ID"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"ストレージの設定"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"USBストレージのマウントを解除し、使用できるストレージを表示"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"SDカードの取り外し、空き容量の表示"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"電話番号"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"電話番号"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"SIM の MDN"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"SIM の電話番号"</string>
<string name="status_min_number" msgid="3519504522179420597">"MIN"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"PRLバージョン:"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"モバイルネットワークの種類"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"その他"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"システム"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"<xliff:g id="NAME">^1</xliff:g>の内容を見る"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"その他のファイルには、アプリが保存した共有ファイル、インターネットや Bluetooth 経由でダウンロードしたファイル、Android ファイルなどが含まれます。\n\nこの <xliff:g id="NAME">^1</xliff:g>の表示可能な内容を確認するには、[外部メディア] をタップします。"</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"その他のファイルには、アプリが保存した共有ファイル、インターネットや Bluetooth 経由でダウンロードしたファイル、Android ファイルなどが含まれます。\n\nこの <xliff:g id="NAME">^1</xliff:g>の表示可能な内容を確認するには、[外部メディア] をタップします。"</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"システムには、Android バージョン <xliff:g id="VERSION">%s</xliff:g> の実行に使用されるファイルが含まれています"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"<xliff:g id="USER_0">^1</xliff:g>が保存した写真、音楽、アプリなどのデータはストレージの <xliff:g id="SIZE">^2</xliff:g> を使用しています。\n\n詳細を表示するには、<xliff:g id="USER_1">^1</xliff:g>に切り替えてください。"</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"<xliff:g id="NAME">^1</xliff:g>のセットアップ"</string>
@@ -1382,15 +1397,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"データセーバーが ON のときは、テザリングやポータブル アクセス ポイントを使用できません"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"USB テザリング"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"スマートフォンのインターネット接続を USB 経由で共有する"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"タブレットのインターネット接続を USB 経由で共有する"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"スマートフォンのインターネット接続を USB 経由で共有"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"タブレットのインターネット接続を USB 経由で共有"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"Bluetoothテザリング"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"タブレットのインターネット接続を Bluetooth で共有"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"スマートフォンのインターネット接続を Bluetooth で共有する"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"この <xliff:g id="DEVICE_NAME">%1$d</xliff:g> のインターネット接続を Bluetooth で共有"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"タブレットのインターネット接続を Bluetooth で共有"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"スマートフォンのインターネット接続を Bluetooth で共有"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"この <xliff:g id="DEVICE_NAME">%1$d</xliff:g> のインターネット接続を Bluetooth で共有"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"テザリングできるデバイスは<xliff:g id="MAXCONNECTION">%1$d</xliff:g>個までです。"</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>のテザリングを解除します。"</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"アクセス ポイントとテザリングを使用して、モバイルデータ通信により他の端末にインターネット接続を提供します。アプリを使ってアクセス ポイントを作成し、コンテンツを近くの端末と共有することもできます。"</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"アクセス ポイントとテザリングを使用して、モバイルデータ通信により他の端末にインターネット接続を提供します。アプリを使ってアクセス ポイントを作成し、コンテンツを近くの端末と共有することもできます。"</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"ヘルプ"</string>
<string name="network_settings_title" msgid="2876509814832830757">"モバイル ネットワーク"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"モバイルプラン"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"読み込み中..."</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"安全に関する情報"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"安全に関する情報"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"データ接続されていません。この情報を表示するにはインターネットに接続されているパソコンから%sにアクセスしてください。"</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"データ接続されていません。この情報を表示するにはインターネットに接続されているパソコンから %s にアクセスしてください。"</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"読み込み中..."</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"画面ロックの設定"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"セキュリティを強化するには、パスワードを設定してください"</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"アプリの詳細"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"<xliff:g id="APP_STORE">%1$s</xliff:g> からインストールしたアプリ"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"<xliff:g id="APP_STORE">%1$s</xliff:g>上の詳細情報"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"アプリの操作状況"</string>
<string name="app_ops_running" msgid="7706949900637284122">"実行中"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(未使用)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"既定のアプリがありません。"</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"言語と入力"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"端末の言語を変更する権限がありません。"</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"言語と入力"</string>
<string name="input_assistance" msgid="7577795275222555487">"入力アシスタント"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"キーボードと入力方法"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"サービス"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"期間"</string>
<string name="mem_details_title" msgid="6548392825497290498">"メモリ情報"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"メモリのステータス"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"メモリ使用"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"カーネル"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"ネイティブ"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"カーネルキャッシュ"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"zramスワップ"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"未使用"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"合計"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3時間"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6時間"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"12時間"</string>
@@ -2496,8 +2503,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"VPN を削除"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"既存の VPN を置き換えますか?"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"常時接続 VPN を設定しますか?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"この設定を有効にすると、VPN に接続するまではインターネットに接続できなくなります"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"既存の VPN が置き換えられ、VPN に接続するまではインターネットに接続できなくなります"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"この設定を ON にすると、VPN に接続するまではインターネットに接続できなくなります"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"既存の VPN が置き換えられ、VPN に接続するまではインターネットに接続できなくなります"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"すでに常時接続 VPN に接続しています。別の VPN に接続する場合は、既存の VPN が置き換えられ、常時接続モードは無効になります。"</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"すでに VPN に接続しています。別の VPN に接続する場合は、既存の VPN が置き換えられます。"</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"有効にする"</string>
@@ -2724,6 +2731,8 @@
<string name="color_purple" msgid="3888532466427762504">"パープル"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"SIMカードが挿入されていません"</string>
<string name="sim_status_title" msgid="6744870675182447160">"SIMのステータス"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"デフォルトのSIMからコールバック"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"発信用のSIM"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"その他の通話設定"</string>
@@ -2737,13 +2746,15 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"優先SIM:"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"その都度確認"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"選択してください"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"設定"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="other">%d 件の非表示のアイテムを表示</item>
<item quantity="one">%d 件の非表示のアイテムを表示</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"折りたたむ"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"ネットワークとインターネット"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"ネットワークとインターネット"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"モバイル"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"データ使用量"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"アクセス ポイント"</string>
@@ -2803,6 +2814,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"支払い, タップ, ペイメント"</string>
<string name="keywords_backup" msgid="470070289135403022">"バックアップ, バック アップ"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"操作"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Wi-Fi NFCタグのセットアップ"</string>
<string name="write_tag" msgid="8571858602896222537">"書き込む"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"書き込むにはタグをタップしてください..."</string>
@@ -2840,10 +2859,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"アラート"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"バイブレーション"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"電源オンの音"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"ON になっている自動ルールはありません"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="other">ON になっている自動ルールが <xliff:g id="ON_COUNT">%d</xliff:g> 件あります</item>
- <item quantity="one">ON になっている自動ルールが 1 件あります</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"なし"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> 件のルール</item>
+ <item quantity="one">1 件のルール</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"マナーモード"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"動作"</string>
@@ -2851,9 +2870,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"無音"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"無音(サイレント)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"<xliff:g id="CATEGORIES">%1$s</xliff:g>以外は無音"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"自動ルール"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"アラーム、メディア、システム フィードバック以外は無音(アラームのみ)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"自動的に ON"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"自動ルール"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"マナーモード ルールの設定"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"所定の時間に音とバイブレーションを制限する"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"優先する通知のみ"</string>
@@ -2861,6 +2880,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"サイレント"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"視覚的な通知のブロック"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"視覚的な割り込みを許可"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"追加"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"仕事用プロファイルの音"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"個人用プロファイルの音の使用"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"仕事用プロファイルと個人用プロファイルの音は同じです"</string>
@@ -2987,7 +3022,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"ルール名"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"ルール名を入力"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"ルール名は既に使用されています"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"追加"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"ルールを追加"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"予定ルールの追加"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"時間ルールの追加"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"ルールを削除"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"ルールタイプの選択"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"「<xliff:g id="RULE">%1$s</xliff:g>」ルールを削除しますか?"</string>
@@ -2995,9 +3032,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"ルールの種類"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"不明"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"ルールを設定"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"時間ルール"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"時間"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"自動ルールでは指定時間内はマナーモードを ON に設定します"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"予定ルール"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"予定"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"自動ルールでは指定した予定の間はマナーモードを ON に設定します"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"対象となる予定"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"対象となる予定: <xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
@@ -3028,8 +3065,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"スター付きの連絡先のみ"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"なし"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"アラーム"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"メディア、システム フィードバック"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"リマインダー"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"予定"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"すべての発信者"</string>
@@ -3054,15 +3090,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>までアラームのみに変更します"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"常に割り込みに変更します"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"画面が ON のときにブロックする"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"マナーモードでサイレントに設定した通知を受信したときに、画面上にポップアップ表示されなくなります"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"画面が OFF のときにブロックする"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"マナーモードでサイレントに設定した通知を受信したときに、画面が ON になったり光が点滅したりしなくなります"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"マナーモードでサイレントに設定した通知を受信したときに画面が ON にならなくなります"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"OFF"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"画面が ON のとき"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"画面が OFF のとき"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"画面が ON または OFF のとき"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"画面が ON のとき"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"マナーモードでサイレントに設定した通知を受信したときに、画面にポップアップ表示されます"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"画面が OFF のとき"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"マナーモードでサイレントに設定した通知を受信したときに、画面が ON になり、光が点滅します"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"マナーモードでサイレントに設定した通知を受信したときに、画面が ON になります"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"通知設定"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"この端末についてフィードバックを送信"</string>
@@ -3382,7 +3414,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"アクセス ポイントが ON"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"ポータブル Wi-Fi アクセス ポイント(<xliff:g id="ID_1">%1$s</xliff:g>)が有効です。この端末では Wi-Fi が OFF になっています。"</string>
<string name="condition_airplane_title" msgid="287356299107070503">"機内モードが ON"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"Wi-Fi、Bluetooth、モバイル ネットワークが OFF になっています。電話の発信やインターネットへの接続はできません。"</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"Wi-Fi、Bluetooth、モバイル ネットワークが OFF になっています。電話の発信やインターネットへの接続はできません。"</string>
<string name="condition_zen_title" msgid="2679168532600816392">"マナーモードが ON(<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"バッテリー セーバー ON"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"パフォーマンスが制限されています。位置情報サービスとバックグラウンド データは OFF です。"</string>
@@ -3414,8 +3446,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"ConnectivityMonitor"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"ConnectivityMonitor は、接続の問題が検出されたときにログを収集し、バグを報告するようユーザーに通知を表示します"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"ConnectivityMonitor の変更を適用するには、端末を再起動してください"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"カメラ HAL HDR+"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"カメラ HAL HDR+ の変更を適用するには、端末を再起動してください"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"カメラのレーザー センサー"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"自動システム アップデート"</string>
<string name="usage" msgid="2977875522080448986">"使用量"</string>
@@ -3565,13 +3595,6 @@
<item quantity="one">1秒</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"~<xliff:g id="ESTIMATE">%1$s</xliff:g>(予想待ち時間)"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"コンピュータ"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"ヘッドセット"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"スマートフォン"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"画像"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"ヘッドフォン"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"入力用周辺機器"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"ストレージの管理"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"ストレージの空き容量を増やすため、ストレージ マネージャはバックアップした写真や動画をお使いの端末から削除します。"</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"写真と動画を削除"</string>
@@ -3606,6 +3629,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"時刻、通知アイコンなどの情報を確認するには、端末を持ち上げます。"</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"画面が OFF のときも通知を確認します"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"指紋センサーをスワイプして通知を表示"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"指紋センサーのスワイプ"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"通知を確認するには、スマートフォンの背面にある指紋認証センサーを下にスワイプします。"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"通知を確認するには、タブレットの背面にある指紋認証センサーを下にスワイプします。"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"通知を確認するには、端末の背面にある指紋認証センサーを下にスワイプします。"</string>
@@ -3614,9 +3638,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"ON"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"OFF"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"ブートローダーは既にロック解除されています"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"最初にインターネットに接続してください"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"インターネットに接続するか、携帯通信会社にお問い合わせください"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"最初にインターネットに接続してください"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"インターネットに接続するか携帯通信会社にお問い合わせください"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"携帯通信会社によってロックされている端末では利用できません"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"端末保護機能を有効にするには、端末を再起動してください。"</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"計 <xliff:g id="SIZE">%1$s</xliff:g> が利用可能になりました\n\n最終実行: <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"Instant Apps"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"アプリがインストールされていなくても、アプリ内のリンクを開くことができます"</string>
@@ -3724,6 +3749,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>このアプリが信頼できることを確認してください</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> は画面上の内容に基づいて、入力可能な情報を判別します。"</string>
<string name="device_theme" msgid="4571803018917608588">"端末のテーマ"</string>
<string name="default_theme" msgid="7085644992078579076">"デフォルト"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"ネットワーク名"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"ステータスバーにネットワーク名を表示する"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"ストレージ マネージャ: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"OFF"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"ON"</string>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index efb8572..c96fe1c 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"기기 관리자가 최근 비밀번호 사용을 허용하지 않습니다."</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"연속으로 올라가거나 내려가는 숫자 또는 반복되는 숫자의 배열은 허용되지 않습니다."</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"확인"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"확인"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"취소"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"지우기"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"취소"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 핸즈프리 오디오의 연결이 끊어집니다."</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>와(과) 입력 장치의 연결이 끊어집니다."</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>을(를) 통한 인터넷 액세스 연결이 해제됩니다."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>이(가) 이 태블릿의 인터넷 연결 공유에서 해제됩니다."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>이(가) 이 휴대전화의 인터넷 연결 공유에서 해제됩니다."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>이(가) 이 태블릿의 인터넷 연결 공유에서 해제됩니다."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>이(가) 이 휴대전화의 인터넷 연결 공유에서 해제됩니다."</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"페어링된 블루투스 기기"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"연결"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"블루투스 장치에 연결"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"용도"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"이름 바꾸기"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"파일 수신 허용"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"인터넷 액세스를 위해 기기에 연결됨"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"로컬 인터넷 연결을 기기와 공유 중"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"인터넷 액세스를 위해 기기에 연결됨"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"로컬 인터넷 연결을 기기와 공유 중"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"도크 설정"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"오디오에 도크 사용"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"스피커폰으로 사용"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"Wi‑Fi 검색이 사용 중지되어 사용할 수 없습니다."</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"사용하려면 네트워크 평가 제공업체를 선택하세요."</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"불량 네트워크 방지"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"인터넷 연결이 원활하지 않은 경우 Wi-Fi 네트워크를 사용하지 않음"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"인터넷 연결이 안정적인 네트워크만 사용합니다."</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"인터넷 연결이 원활하지 않은 경우 Wi-Fi 네트워크를 사용하지 않습니다"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"인터넷 연결이 안정적인 네트워크만 사용합니다"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"개방형 네트워크에 연결"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"고품질 공용 네트워크에 자동으로 연결"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"사용하려면 네트워크 평가 제공업체를 선택하세요."</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"Wi-Fi 최적화"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"Wi-Fi가 사용 중일 때 배터리 사용량 최소화"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"Wi‑Fi에 사용되는 배터리 제한"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"Wi‑Fi 인터넷 액세스가 끊기면 모바일 데이터로 전환합니다."</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"Wi‑Fi 인터넷 액세스가 끊기면 모바일 데이터로 전환"</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"모바일 데이터로 자동 전환"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"Wi‑Fi 인터넷 액세스가 끊기면 모바일 데이터를 사용합니다. 데이터 사용 요금이 부과될 수 있습니다."</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"Wi‑Fi 인터넷 액세스가 끊기면 모바일 데이터를 사용합니다. 데이터 사용 요금이 부과될 수 있습니다."</string>
<string name="wifi_add_network" msgid="6234851776910938957">"네트워크 추가"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"Wi‑Fi 환경설정"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"Wi‑Fi가 자동으로 다시 사용 설정됩니다."</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"로그인하여 연결하시겠습니까?"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"온라인에 로그인한 다음 네트워크에 연결하도록 <xliff:g id="APP_NAME">%1$s</xliff:g>이(가) 요청합니다."</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"연결"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"이 네트워크에는 인터넷이 연결되어 있지 않습니다. 연결 상태를 유지하시겠습니까?"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"이 네트워크에는 인터넷이 연결되어 있지 않습니다. 연결 상태를 유지하시겠습니까?"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"이 네트워크를 다시 요청하지 마세요."</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"Wi‑Fi가 인터넷에 연결되어 있지 않음"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"Wi‑Fi가 인터넷에 연결되어 있지 않음"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"Wi-Fi 연결 상태가 좋지 않다면 언제든지 모바일 네트워크로 전환할 수 있습니다. 데이터 사용 요금이 부과될 수도 있습니다."</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"모바일로 전환"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"Wi‑Fi 계속 사용"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"고급 Wi-Fi"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"MAC 주소"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"IP 주소"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"네트워크 정보"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"네트워크 세부정보"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"서브넷 마스크"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"IPv6 주소"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"<xliff:g id="PEER_NAME">%1$s</xliff:g>와(과) 연결하려는 초대를 취소하시겠습니까?"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"이 그룹을 삭제할까요?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"Wi‑Fi 핫스팟"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"다른 기기와 인터넷 또는 콘텐츠를 공유하지 않음"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"핫스팟을 통해 태블릿의 인터넷 연결 공유 중"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"핫스팟을 통해 휴대전화의 인터넷 연결 공유 중"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"앱에서 콘텐츠를 공유하지 않습니다. 인터넷 연결을 공유하려면 핫스팟을 껐다가 켜세요."</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"다른 기기와 인터넷 또는 콘텐츠를 공유하지 않습니다"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"핫스팟을 통해 태블릿의 인터넷 연결 공유 중"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"핫스팟을 통해 휴대전화의 인터넷 연결 공유 중"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"앱에서 콘텐츠를 공유하지 않습니다. 인터넷 연결을 공유하려면 핫스팟을 껐다가 켜세요"</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"핫스팟 이름"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> 켜는 중..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"다른 기기에서 <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>에 연결할 수 있습니다."</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"핫스팟 비밀번호"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"AP 대역"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"핫스팟을 사용하여 다른 기기에서 사용할 수 있는 Wi‑Fi 네트워크를 만드세요. 핫스팟은 내 모바일 데이터 연결을 사용하여 인터넷을 제공합니다. 추가 모바일 데이터 요금이 부과될 수 있습니다."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"핫스팟을 사용하여 다른 기기에서 사용할 수 있는 Wi‑Fi 네트워크를 만드세요. 핫스팟은 내 모바일 데이터 연결을 사용하여 인터넷을 제공합니다. 추가 모바일 데이터 요금이 부과될 수 있습니다."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"앱에서 핫스팟을 만들어 주변 기기와 콘텐츠를 공유할 수 있습니다."</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"핫스팟 켜는 중…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"핫스팟 끄는 중…"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"Wi-Fi 통화가 켜져 있으면 휴대전화에서 환경설정과 신호 강도에 따라 Wi-Fi 네트워크나 데이터 네트워크를 통해 통화를 연결할 수 있습니다. 이 기능을 사용하기 전에 이동통신사에 문의하여 요금과 기타 세부정보를 알아보세요."</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"긴급 주소 업데이트"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"Wi-Fi를 통해 긴급 전화를 걸 때 응급 서비스에서 내 위치로 사용할 주소"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"긴급 주소"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"Wi‑Fi를 통해 긴급 전화를 걸 때 내 위치로 사용됨"</string>
<string name="display_settings_title" msgid="1708697328627382561">"디스플레이"</string>
<string name="sound_settings" msgid="5534671337768745343">"소리"</string>
<string name="all_volume_title" msgid="4296957391257836961">"볼륨"</string>
@@ -1005,7 +1005,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"기록 삭제"</string>
<string name="display_settings" msgid="7965901687241669598">"디스플레이"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"자동 화면 회전"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"선명한 색상"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"색상"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"자연스럽게"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"부스트"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"선명하게"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"태블릿 회전 시 자동으로 방향 바꾸기"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"휴대전화 회전 시 자동으로 방향 바꾸기"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"태블릿 회전 시 자동으로 방향 바꾸기"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"시스템 업데이트"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"Android 버전"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"Android 보안 패치 수준"</string>
<string name="model_info" msgid="1952009518045740889">"모델"</string>
+ <string name="model_summary" msgid="8306235877567782987">"모델: %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"모델 및 하드웨어"</string>
<string name="hardware_revision" msgid="8893547686367095527">"하드웨어 버전"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"장비 ID"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"저장소 설정"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"USB 저장소를 마운트 해제하고 사용 가능한 저장공간을 봅니다."</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"SD 카드 마운트 해제, 사용 가능한 저장공간 보기"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"내 휴대전화 번호"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"전화번호"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"SIM의 MDN"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"SIM의 전화번호"</string>
<string name="status_min_number" msgid="3519504522179420597">"MIN"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"PRL 버전"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"모바일 네트워크 유형"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"기타"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"시스템"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"<xliff:g id="NAME">^1</xliff:g> 탐색"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"기타 포함되는 항목으로는 앱에서 저장한 공유 파일, 인터넷이나 블루투스에서 다운로드한 파일, Android 파일 등이 있습니다. \n\n<xliff:g id="NAME">^1</xliff:g>의 표시되는 콘텐츠를 보려면 탐색을 탭하세요."</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"기타 포함되는 항목으로는 앱에서 저장한 공유 파일, 인터넷이나 블루투스에서 다운로드한 파일, Android 파일 등이 있습니다. \n\n<xliff:g id="NAME">^1</xliff:g>의 표시되는 콘텐츠를 보려면 탐색을 탭하세요."</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"시스템에는 Android 버전 <xliff:g id="VERSION">%s</xliff:g> 실행에 사용되는 파일이 포함되어 있습니다."</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"<xliff:g id="USER_0">^1</xliff:g>님이 사진, 음악, 앱, 기타 데이터를 저장했을 수도 있으며, 전체 저장용량의 <xliff:g id="SIZE">^2</xliff:g>을(를) 사용 중입니다. \n\n자세한 내용을 확인하려면 <xliff:g id="USER_1">^1</xliff:g>님으로 전환하세요."</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"<xliff:g id="NAME">^1</xliff:g> 설정"</string>
@@ -1382,15 +1397,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"데이터 절약 모드가 켜져 있으면 테더링하거나 휴대용 핫스팟을 사용할 수 없습니다."</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"USB 테더링"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"USB를 통해 휴대전화의 인터넷 연결 공유"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"USB를 통해 태블릿의 인터넷 연결 공유"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"USB를 통해 휴대전화의 인터넷 연결 공유"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"USB를 통해 태블릿의 인터넷 연결 공유"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"블루투스 테더링"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"블루투스를 통해 태블릿의 인터넷 연결 공유"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"블루투스를 통해 휴대전화의 인터넷 연결 공유"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g>의 인터넷 연결을 블루투스를 통해 공유 중"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"블루투스를 통해 태블릿의 인터넷 연결 공유"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"블루투스를 통해 휴대전화의 인터넷 연결 공유"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g>의 인터넷 연결을 블루투스를 통해 공유 중"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"<xliff:g id="MAXCONNECTION">%1$d</xliff:g>개의 기기까지만 테더링 사용 가능"</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> 기기의 테더링이 끊깁니다."</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"핫스팟 및 테더링을 사용하여 다른 기기에서 내 모바일 데이터 연결을 통해 인터넷을 사용할 수 있도록 합니다. 앱에서도 핫스팟을 만들어 주변 기기와 콘텐츠를 공유할 수 있습니다."</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"핫스팟 및 테더링을 사용하여 다른 기기에서 내 모바일 데이터 연결을 통해 인터넷을 사용할 수 있도록 합니다. 앱에서도 핫스팟을 만들어 주변 기기와 콘텐츠를 공유할 수 있습니다."</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"고객센터"</string>
<string name="network_settings_title" msgid="2876509814832830757">"모바일 네트워크"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"모바일 요금제"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"로드 중..."</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"안전 정보"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"안전 정보"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"데이터 서비스에 연결되어 있지 않습니다. 지금 정보를 보려면 인터넷에 연결된 컴퓨터에서 %s(으)로 이동하세요."</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"데이터에 연결되어 있지 않습니다. 지금 이 정보를 보려면 인터넷에 연결된 컴퓨터에서 %s(으)로 이동하세요."</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"로드 중..."</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"화면 잠금 설정"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"보안을 위해 비밀번호를 설정하세요."</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"앱 세부정보"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"<xliff:g id="APP_STORE">%1$s</xliff:g>에서 다운로드한 앱"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"<xliff:g id="APP_STORE">%1$s</xliff:g>에서 자세히 알아보기"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"앱 운영"</string>
<string name="app_ops_running" msgid="7706949900637284122">"실행 중"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(사용 안 함)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"기본 앱이 없습니다."</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"언어 및 입력"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"기기 언어를 변경할 수 있는 권한이 없습니다."</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"언어 및 입력"</string>
<string name="input_assistance" msgid="7577795275222555487">"입력 지원"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"키보드 및 입력 방법"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"서비스"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"기간"</string>
<string name="mem_details_title" msgid="6548392825497290498">"메모리 세부정보"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"메모리 상태"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"메모리 사용량"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"커널"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"기본"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"커널 캐시"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"ZRam 교환"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"사용 가능"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"총 사용량"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3시간"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6시간"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"12시간"</string>
@@ -2492,8 +2499,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"VPN 삭제"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"기존 VPN을 교체하시겠습니까?"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"연결 유지 VPN을 설정하시겠습니까?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"이 설정을 사용하면 VPN이 연결될 때까지 인터넷에 연결되지 않습니다."</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"기존 VPN이 교체되며 VPN에 연결될 때까지 인터넷에 연결되지 않습니다."</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"이 설정을 사용하면 VPN이 연결될 때까지 인터넷에 연결되지 않습니다"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"기존 VPN이 교체되며 VPN에 연결될 때까지 인터넷에 연결되지 않습니다"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"이미 연결 유지 VPN에 연결되어 있습니다. 다른 VPN에 연결하면 기존 VPN은 교체되며 연결 유지 모드가 사용 중지됩니다."</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"이미 VPN에 연결되어 있습니다. 다른 VPN에 연결하면 기존 VPN은 교체됩니다."</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"사용"</string>
@@ -2720,6 +2727,8 @@
<string name="color_purple" msgid="3888532466427762504">"보라색"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"SIM 카드가 장착되지 않음"</string>
<string name="sim_status_title" msgid="6744870675182447160">"SIM 상태"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"기본 SIM에서 다시 전화하기"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"발신 전화용 SIM"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"기타 통화 설정"</string>
@@ -2733,13 +2742,15 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"다음 작업에 대하여 선호하는 SIM"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"항상 확인"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"선택 필요"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"설정"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="other">%d개의 숨겨진 항목 표시</item>
<item quantity="one">%d개의 숨겨진 항목 표시</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"접기"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"네트워크 및 인터넷"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"네트워크 및 인터넷"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"모바일"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"데이터 사용"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"핫스팟"</string>
@@ -2799,6 +2810,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"결제, 탭, 결제"</string>
<string name="keywords_backup" msgid="470070289135403022">"백업, 백 업"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"동작"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Wi-Fi NFC 태그 설정"</string>
<string name="write_tag" msgid="8571858602896222537">"쓰기"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"태그를 탭하여 작성하세요..."</string>
@@ -2836,10 +2855,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"알림"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"진동"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"부팅 소리"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"사용 설정된 자동 규칙이 없음"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="other">자동 규칙 <xliff:g id="ON_COUNT">%d</xliff:g>개 사용 설정됨</item>
- <item quantity="one">자동 규칙 1개 사용 설정됨</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"사용 안함"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="other">규칙 <xliff:g id="ON_COUNT">%d</xliff:g>개</item>
+ <item quantity="one">규칙 1개</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"알림 일시중지"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"동작"</string>
@@ -2847,9 +2866,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"음소거"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"음소거(모두 차단)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"<xliff:g id="CATEGORIES">%1$s</xliff:g>을(를) 제외한 모든 소리 음소거"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"자동 규칙"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"알람, 미디어, 시스템을 제외한 모든 소리 음소거(알람만 듣기)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"자동으로 사용 설정"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"자동 규칙"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"알림 일시중지 규칙 설정"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"특정 시간에 소리 및 진동 제한"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"중요 알림만"</string>
@@ -2857,6 +2876,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"모두 차단"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"시각적 방해 차단"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"시각적 신호 허용"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"추가"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"직장 프로필 사운드"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"개인 프로필 사운드 사용"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"직장 프로필과 개인 프로필의 소리가 같습니다."</string>
@@ -2983,7 +3018,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"규칙 이름"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"규칙 이름 입력"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"이미 사용 중인 규칙 이름입니다."</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"추가"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"규칙 추가"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"이벤트 규칙 추가"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"시간 규칙 추가"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"규칙 삭제"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"규칙 유형 선택"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"\'<xliff:g id="RULE">%1$s</xliff:g>\' 규칙을 삭제하시겠습니까?"</string>
@@ -2991,9 +3028,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"규칙 유형"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"알 수 없음"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"규칙 설정"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"시간 규칙"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"시간"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"지정된 시간 동안 알림 일시중지를 사용하도록 자동 규칙 설정"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"이벤트 규칙"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"이벤트"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"지정된 이벤트 동안 알림 일시중지를 사용하도록 자동 규칙 설정"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"다음 계정의 일정"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"<xliff:g id="CALENDAR">%1$s</xliff:g>의 일정"</string>
@@ -3024,8 +3061,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"별표 표시한 연락처만"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"없음"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"알람"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"미디어 및 시스템 의견"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"알림"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"이벤트"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"모든 발신자"</string>
@@ -3050,15 +3086,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g>까지 알람만 수신 모드로 변경"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"항상 알림 모드로 변경"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"화면이 켜져 있을 때 차단"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"알림 일시중지로 인해 무음 처리된 알림이 화면에 표시되지 않도록 함"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"화면이 꺼져 있을 때 차단"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"알림 일시중지로 인해 무음 처리된 알림이 화면을 켜거나 알림 불빛을 깜박이지 않도록 함"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"알림 일시중지로 무음 처리된 알림이 화면을 켜지 않도록 함"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"사용 안함"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"화면이 켜져 있을 때"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"화면이 꺼져 있을 때"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"화면이 켜져 있든 꺼져 있든 항상"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"화면이 켜져 있을 때"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"알림 일시중지로 음소거된 알림이 화면에 표시되도록 허용"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"화면이 꺼져 있을 때"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"알림 일시중지로 음소거된 알림이 화면을 켜고 불빛을 깜박이도록 허용"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"알림 일시중지로 음소거된 알림이 화면을 켜도록 허용"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"알림 설정"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"확인"</string>
<string name="device_feedback" msgid="3238056036766293294">"이 기기에 대한 의견 보내기"</string>
@@ -3378,7 +3410,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"핫스팟 사용 중"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"휴대용 Wi-Fi 핫스팟 <xliff:g id="ID_1">%1$s</xliff:g>을(를) 사용 중이며 기기의 Wi-Fi가 사용 중지되었습니다."</string>
<string name="condition_airplane_title" msgid="287356299107070503">"비행기 모드 사용 중"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"Wi-Fi, 블루투스 및 모바일 네트워크가 사용 중지되었습니다. 전화를 걸거나 인터넷에 연결할 수 없습니다."</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"Wi-Fi, 블루투스 및 모바일 네트워크가 사용 중지되었습니다. 전화를 걸거나 인터넷에 연결할 수 없습니다."</string>
<string name="condition_zen_title" msgid="2679168532600816392">"알림 일시중지 사용 중(<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"배터리 세이버 사용 중"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"성능이 감소됩니다. 위치 서비스와 백그라운드 데이터가 사용 중지되었습니다."</string>
@@ -3410,8 +3442,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"연결 모니터"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"연결 모니터에서 연결 문제가 감지될 경우 로그를 수집하며 버그를 신고하라는 알림을 표시합니다."</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"연결 모니터의 변경사항을 적용하려면 기기를 재부팅하세요."</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"카메라 HAL HDR+"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"카메라 HAL HDR+의 변경사항을 적용하려면 기기를 재부팅하세요."</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"카메라 레이저 센서"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"자동 시스템 업데이트"</string>
<string name="usage" msgid="2977875522080448986">"사용량"</string>
@@ -3561,13 +3591,6 @@
<item quantity="one">1초</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"~<xliff:g id="ESTIMATE">%1$s</xliff:g> 대기"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"컴퓨터"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"헤드셋"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"전화"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"이미징"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"헤드폰"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"입력 주변기기"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"블루투스"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"저장용량 관리"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"저장용량 관리자가 저장 공간을 확보하기 위해 백업된 사진과 동영상을 기기에서 삭제합니다."</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"사진 및 동영상 삭제"</string>
@@ -3589,12 +3612,12 @@
<string name="double_twist_for_camera_suggestion_summary" product="default" msgid="447403641027147153">"휴대전화를 두 번 돌려 셀카 모드를 실행합니다."</string>
<string name="double_twist_for_camera_suggestion_summary" product="tablet" msgid="1724660290703318739">"태블릿을 두 번 돌려 셀카 모드를 실행합니다."</string>
<string name="double_twist_for_camera_suggestion_summary" product="device" msgid="5980398380988039489">"기기를 두 번 돌려 셀카 모드를 실행합니다."</string>
- <string name="ambient_display_title" product="default" msgid="5144814600610448504">"두 번 탭하여 스마트폰 확인"</string>
+ <string name="ambient_display_title" product="default" msgid="5144814600610448504">"두 번 탭하여 휴대전화 확인"</string>
<string name="ambient_display_title" product="tablet" msgid="8688795028609563837">"두 번 탭하여 태블릿 확인"</string>
<string name="ambient_display_title" product="device" msgid="3423781975742145894">"두 번 탭하여 기기 확인"</string>
<string name="ambient_display_summary" msgid="525662960806416373">"시간, 알림 아이콘, 기타 정보를 확인하려면 화면을 두 번 탭하세요."</string>
<string name="ambient_display_suggestion_summary" msgid="5987443721392571847">"화면이 꺼져 있을 때도 알림을 확인할 수 있습니다."</string>
- <string name="ambient_display_pickup_title" product="default" msgid="818688002837687268">"들어서 스마트폰 확인"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="818688002837687268">"들어올려 휴대전화 확인"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="4455864282995698097">"들어서 태블릿 확인"</string>
<string name="ambient_display_pickup_title" product="device" msgid="5380534405773531175">"들어서 기기 확인"</string>
<string name="ambient_display_pickup_summary" product="default" msgid="4567020486787561873">"시간, 알림 아이콘 등의 정보를 확인하려면 휴대전화를 들어 올리세요."</string>
@@ -3602,6 +3625,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"시간, 알림 아이콘 등의 정보를 확인하려면 기기를 들어 올리세요."</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"화면이 꺼져 있을 때도 알림을 확인할 수 있습니다."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"지문을 스와이프하여 알림 보기"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"지문 스와이프"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"알림을 확인하려면 휴대전화 뒷면의 지문 센서에서 아래로 스와이프합니다."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"알림을 확인하려면 태블릿 뒷면의 지문 센서에서 아래로 스와이프합니다."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"알림을 확인하려면 기기 뒷면의 지문 센서에서 아래로 스와이프합니다."</string>
@@ -3610,9 +3634,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"사용"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"사용 안함"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"부트로더가 이미 잠금해제되었습니다."</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"먼저 인터넷 연결"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"인터넷에 연결하거나 이동통신사에 문의하세요."</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"먼저 인터넷에 연결하세요"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"인터넷에 연결하거나 이동통신사에 문의하세요"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"특정 이동통신사만 사용하도록 잠긴 기기에서 사용할 수 없음"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"기기 보호 기능을 사용 설정하려면 기기를 다시 시작하세요."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"사용 가능한 전체 크기: <xliff:g id="SIZE">%1$s</xliff:g>\n\n마지막 실행일: <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"인스턴트 앱"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"앱이 설치되어 있지 않아도 앱에서 링크 열기"</string>
@@ -3720,6 +3745,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>이 앱을 신뢰할 수 있는지 확인하세요.</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g>에서는 자동완성할 수 있는 항목을 결정하기 위해 화면의 내용을 사용합니다."</string>
<string name="device_theme" msgid="4571803018917608588">"기기 테마"</string>
<string name="default_theme" msgid="7085644992078579076">"기본값"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"네트워크 이름"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"상태 표시줄에 네트워크 이름 표시"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"저장용량 관리자: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"사용 안함"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"사용"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 16f05da..dc86aa0 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -129,7 +129,7 @@
<string name="bluetooth_no_devices_found" msgid="1085232930277181436">"Hakuna vifaa vya Bluetooth vilivyopatikana karibu."</string>
<string name="bluetooth_notif_ticker" msgid="4726721390078512173">"Ombi la kuoanisha Bluetooth"</string>
<string name="bluetooth_notif_title" msgid="2485175521845371514">"Ombi la ulinganishaji"</string>
- <string name="bluetooth_notif_message" msgid="5057417127600942904">"Gonga ili uoanishe na <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
+ <string name="bluetooth_notif_message" msgid="5057417127600942904">"Gusa ili uoanishe na <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_show_received_files" msgid="3144149432555230410">"Faili zilizopokelewa"</string>
<string name="device_picker" msgid="4978696506172252813">"Chagua kifaa cha Bluetooth"</string>
<string name="bluetooth_ask_enablement" msgid="3387222809404177525">"<xliff:g id="APP_NAME">%1$s</xliff:g> inataka kuwasha Bluetooth"</string>
@@ -156,7 +156,7 @@
<string name="bluetooth_turning_off" msgid="2337747302892025192">"Inazima Bluetooth..."</string>
<string name="bluetooth_auto_connect" msgid="40711424456733571">"Unganisha-kiotomatiki"</string>
<string name="bluetooth_connection_permission_request" msgid="4747918249032890077">"Muunganisho wa Bluetooth umeombwa"</string>
- <string name="bluetooth_connection_notif_message" msgid="3603316575471431846">"Gonga ili uunganishe kwenye \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
+ <string name="bluetooth_connection_notif_message" msgid="3603316575471431846">"Gusa ili uunganishe kwenye \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
<string name="bluetooth_connection_dialog_text" msgid="8455427559949998023">"Unataka kuunganishwa kwa\"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"?"</string>
<string name="bluetooth_phonebook_request" msgid="3951420080540915279">"Ombi la kufikia anwani kwenye simu"</string>
<string name="bluetooth_pb_acceptance_dialog_text" msgid="8930347091018455505">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> inataka kufikia anwani zako na rekodi ya simu zilizopigwa. Ungependa kuipa <xliff:g id="DEVICE_NAME_1">%2$s</xliff:g> idhini ya kufikia?"</string>
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"Msimamizi wa kifaa haruhusu kutumia nenosiri ulilotumia hivi majuzi"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"Haturuhusi mpangilio wa kupanda, kushuka au kujirudia kwa tarakimu"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"Sawa"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"Thibitisha"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"Ghairi"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"Futa"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"Ghairi"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> itatenganishwa kutoka kwa sauti ya kifaa kisichotumia mikono."</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> itatenganishwa kutoka kwa kifaa cha kuingiza."</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"Ufikivu wa mtandao kupitia <xliff:g id="DEVICE_NAME">%1$s</xliff:g>utakatishwa."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> itakakatishwa muunganisho wa kushiriki muunganisho wa simu ya Mtandao."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> itakakatishwa muunganisho wa kushiriki muunganisho wa simu ya Mtandao."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> itaondolewa kwenye muunganisho wa intaneti wa kompyuta hii kibao."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> itaondolewa kwenye muunganisho wa intaneti wa simu hii."</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"Kifaa cha Bluetooth kilicholinganishwa"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"Unganisha"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"Unganisha kwa kifaa cha Bluetooth"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"Tumia kwa"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"Badilisha jina"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"Ruhusu mahamisho ya faili inayoingia"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"Umeunganishwa kwa kifaa cha ufikia Mtandao"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"Kushiriki muunganisho wa mtandao wa nyumbani na kifaa"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"Imeunganishwa kwenye kifaa ili kufikia intaneti"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"Inashiriki muunganisho wa intaneti wa kifaa na kifaa kingine"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"Mipangilio ya Gati"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"Tumia dock ya sauti"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"Kama simu ya spika"</string>
@@ -710,7 +710,7 @@
<string name="android_beam_off_summary" msgid="4663095428454779138">"Imezimwa"</string>
<string name="android_beam_disabled_summary" msgid="1737782116894793393">"Haipatikani kwa sababu NFC imezimwa"</string>
<string name="android_beam_label" msgid="6257036050366775040">"Android Beam"</string>
- <string name="android_beam_explained" msgid="1810540319385192758">"Unapowasha kipengele hiki, unaweza kutuma maudhui ya programu kwenye kifaa kingine kinachoweza kutumia NFC kwa kuviweka vifaa pamoja. Kwa mfano, unaweza kutuma kurasa za wavuti, video za YouTube, anwani na mengineyo.\n\nWeka tu vifaa pamoja (kwa kuvigusisha sehemu za nyuma) na ugonge skrini yako. Programu itabaini kile kitatumwa."</string>
+ <string name="android_beam_explained" msgid="1810540319385192758">"Unapowasha kipengele hiki, unaweza kutuma maudhui ya programu kwenye kifaa kingine kinachoweza kutumia NFC kwa kuviweka vifaa pamoja. Kwa mfano, unaweza kutuma kurasa za wavuti, video za YouTube, anwani na mengineyo.\n\nWeka tu vifaa pamoja (kwa kuvigusisha sehemu za nyuma) na uguse skrini yako. Programu itabaini kile kitatumwa."</string>
<string name="wifi_quick_toggle_title" msgid="8850161330437693895">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2696547080481267642">"Washa Wi-Fi"</string>
<string name="wifi_settings" msgid="29722149822540994">"Wi-Fi"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"Hakipatikani kwa sababu utafutaji wa mitandao ya Wi-Fi umezimwa"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"Chagua mtoa huduma wa ukadiriaji wa mtandao ili utumie kipengele hiki"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"Epuka miunganisho mibovu"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"Usitumie mtandao wa Wi-Fi ambao hauna muunganisho mzuri wa Intaneti"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"Tumia mitandao yenye muunganisho bora wa Intaneti pekee"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"Usitumie mtandao wa Wi-Fi isipokuwa uwe na muunganisho thabiti wa intaneti"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"Tumia tu mitandao yenye muunganisho thabiti wa intaneti"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"Unganisha kwenye mitandao wazi"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"Unganisha kiotomatiki kwenye mitandao ya umma ya ubora wa juu"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"Chagua mtoa huduma wa ukadiriaji wa mtandao ili utumie kipengele hiki"</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"Uboreshaji wa Wi-Fi"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"Punguza matumizi ya betri wakati Wi-Fi imewashwa"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"Dhibiti betri inayotumiwa na Wi-Fi"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"Tumia data ya mtandao wa simu muunganisho wa Wi-Fi ukipotea."</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"Tumia data ya mtandao wa simu wakati muunganisho wa Wi-Fi umekatika."</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"Tumia data ya mtandao wa simu kiotomatiki"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"Tumia data ya mtandao wa simu wakati Wi-Fi haina muunganisho wa Intaneti. Huenda ukalipia data utakayotumia."</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"Tumia data ya mtandao wa simu wakati Wi-Fi haina muunganisho wa intaneti. Huenda ukalipia data utakayotumia."</string>
<string name="wifi_add_network" msgid="6234851776910938957">"Ongeza mtandao"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"Mapendeleo ya Wi‑Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"Wi‑Fi hutumika tena kiotomatiki"</string>
@@ -773,8 +773,8 @@
<string name="wifi_more" msgid="3195296805089107950">"Zaidi"</string>
<string name="wifi_setup_wps" msgid="8128702488486283957">"Usanidi kiotomatiki (WPS)"</string>
<string name="wifi_show_advanced" msgid="3409422789616520979">"Chaguo za kina"</string>
- <string name="wifi_advanced_toggle_description_expanded" msgid="2380600578544493084">"Orodha ya menyu kunjuzi ya Chaguo za Kina. Gonga mara mbili ili ukunje."</string>
- <string name="wifi_advanced_toggle_description_collapsed" msgid="1463812308429197263">"Orodha ya menyu kunjuzi ya Chaguo za Kina. Gonga mara mbili ili upanue."</string>
+ <string name="wifi_advanced_toggle_description_expanded" msgid="2380600578544493084">"Orodha ya menyu kunjuzi ya Chaguo za Kina. Gusa mara mbili ili ukunje."</string>
+ <string name="wifi_advanced_toggle_description_collapsed" msgid="1463812308429197263">"Orodha ya menyu kunjuzi ya Chaguo za Kina. Gusa mara mbili ili upanue."</string>
<string name="wifi_wps_setup_title" msgid="8207552222481570175">"Usanidi Uliolindwa na Wi-Fi"</string>
<string name="wifi_wps_setup_msg" msgid="315174329121275092">"Inaanzisha WPS ..."</string>
<string name="wifi_wps_onstart_pbc" msgid="817003360936932340">"Bonyeza kitufe cha Wi‑Fi Protected Setup kwenye ruta yako. Inaweza kuitwa \'\'WPS\'\' au kuwekwa alama hii:"</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"ngependa kuingia katika akaunti ili uunganishe?"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"<xliff:g id="APP_NAME">%1$s</xliff:g> inahitaji uingie katika akaunti mtandaoni kabla ya kuunganisha mtandao."</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"UNGANISHA"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"Mtandao huu hauna Intaneti. Ungetaka kuunganishwa?"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"Mtandao huu hauna intaneti. Utaendelea kuutumia?"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"Usiulizie mtandao huu tena"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"Wi-Fi haijaunganishwa kwenye Intaneti"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"Muunganisho wa Wi-Fi umekatika"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"Unaweza kutumia data ya mtandao wa simu wakati wowote Wi-Fi inapokuwa na muunganisho dhaifu. Huenda ukalipia ada ya kutumia data."</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"Tumia data ya mtandao wa simu"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"Endelea kutumia Wi-Fi"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"Wi-Fi mahiri"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"Anwani ya MAC"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"Anwani ya IP"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"Maelezo ya mtandao"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"Maelezo ya mtandao"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"Mfano wa kijimtandao"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"Anwani za IPv6"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"Je, unataka kughairi mwaliko wa kuungana na <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"Sahau kikundi hiki?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"Mtandao-hewa wa Wi-Fi"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"Haishiriki Intaneti au maudhui na vifaa vingine"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"Inashiriki muunganisho wa Intaneti wa kompyuta hii kibao kupitia mtandao-hewa"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"Inashiriki muunganisho wa Intaneti wa simu hii kupitia mtandao-hewa"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"Programu inashiriki maudhui. Ili kushiriki muunganisho wa Intaneti, zima mtandao-hewa, kisha uuwashe"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"Haishiriki intaneti au maudhui na vifaa vingine"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"Inashiriki muunganisho wa intaneti wa kompyuta hii kibao kupitia kipengele cha mtandao pepe"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"Inashiriki muunganisho wa intaneti wa simu hii kupitia mtandao pepe"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"Programu inashiriki maudhui. Ili ushiriki muunganisho wa intaneti, zima mtandao pepe, kisha uuwashe"</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"Jina la mtandao-hewa"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"Inawasha <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"Vifaa vingine vinaweza kuunganisha kwenye <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"Nenosiri la mtandao-hewa"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"Bendi ya AP"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"Tumia kipengele cha mtandao-hewa kuunda mtandao wa Wi-Fi kwa vifaa vyako vingine. Mtandao-hewa hutoa huduma ya Intaneti ikitumia muunganisho wako wa mtandao wa simu za mkononi. Unaweza kutozwa ada za ziada za kutumia data ya mtandao wa simu."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"Tumia kipengele cha mtandao pepe kuunda mtandao wa Wi-Fi kwa ajili ya vifaa vyako vingine. Mtandao pepe hutoa huduma ya intaneti ikitumia muunganisho wa data kwa simu za mkononi. Huenda ukalipia ada za kutumia data ya mtandao wa simu."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"Programu zinaweza kuunda mtandao-hewa ili kushiriki maudhui na vifaa vilivyo karibu."</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"Inawezesha mtandao-hewa…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"Inazima intaneti..."</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"Wakati kipengele cha upigaji simu kwa Wi-Fi kimewashwa, simu yako inaweza kuelekeza simu kupitia mitandao ya Wi-Fi au mtandao wa mtoa huduma wako, kutegemea na mapendeleo yako na ni mawimbi yapi yaliyo thabiti. Kabla ya kuwasha kipengele hiki, angalia ada na maelezo mengine kwa mtoa huduma wako."</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"Sasisha Anwani ya Dharura"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"Anwani inayotumiwa na huduma za dharura kama eneo lako ikiwa utapiga simu ukitumia Wi‑Fi"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"Anwani ya Dharura"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"Inatumika kama anwani ya mahali ulipo ikiwa utapiga simu ukitumia Wi‑Fi"</string>
<string name="display_settings_title" msgid="1708697328627382561">"Skrini"</string>
<string name="sound_settings" msgid="5534671337768745343">"Sauti"</string>
<string name="all_volume_title" msgid="4296957391257836961">"Sauti"</string>
@@ -1005,7 +1005,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"Futa historia"</string>
<string name="display_settings" msgid="7965901687241669598">"Kwenye Skrini"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"Skrini ijizungushe kiotomatiki"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"Rangi dhahiri"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"Rangi"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"Asili"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"Imeongezwa Rangi"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"Imekolezwa"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"Badilisha uelekezo kiotomatiki wakati unazungusha kompyuta ndogo"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"Badili uelekezaji kiotomatiki wakati wa kuzungusha simu"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"Badilisha uelekezo kiotomatiki wakati unazungusha kompyuta ndogo"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"Masasisho ya mfumo"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"Toleo la Android"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"Kiwango cha kuzuia athari za usalama kwenye Android"</string>
<string name="model_info" msgid="1952009518045740889">"Muundo"</string>
+ <string name="model_summary" msgid="8306235877567782987">"Muundo: %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"Muundo na maunzi"</string>
<string name="hardware_revision" msgid="8893547686367095527">"Toleo la maunzi"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"Kitambulisho cha Kifaa"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"Hifadhi mipangilio"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"Ondoa hifadhi ya USB, angalia hifadhi inayopatikana"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"Ondoa SIM kadi, angalia hifadhi iliyopo"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"Nambari yangu ya simu"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"Nambari ya simu"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"MDN kwenye SIM"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"Nambari ya simu kwenye SIM"</string>
<string name="status_min_number" msgid="3519504522179420597">"NDOGO"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"Toleo la PRL"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"Aina ya mtandao wa simu ya mkononi"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"Nyingine"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"Mfumo"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"Gundua <xliff:g id="NAME">^1</xliff:g>"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"Faili nyingine zilizopo ni kama vile faili zilizohifadhiwa na programu, faili zilizopakuliwa kutoka kwenye Intaneti au Bluetooth, faili za Android, na kadhalika.\n\nIli kuona maudhui ya <xliff:g id="NAME">^1</xliff:g> yanayoweza kuonekana, gonga Gundua."</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"Faili nyingine zilizopo ni pamoja na faili zilizohifadhiwa na programu, faili zilizopakuliwa kutoka kwenye intaneti au Bluetooth, faili za Android na nyinginezo. \n\nIli kuona maudhui ya <xliff:g id="NAME">^1</xliff:g>, gusa Gundua."</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"Mfumo unajumuisha faili zinazotumika katika toleo la Android la <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"Huenda <xliff:g id="USER_0">^1</xliff:g> amehifadhi picha, muziki, programu au data, kwa kutumia <xliff:g id="SIZE">^2</xliff:g> ya hifadhi. \n\nIli kuona maelezo, tumia <xliff:g id="USER_1">^1</xliff:g>."</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"Sanidi <xliff:g id="NAME">^1</xliff:g> yako"</string>
@@ -1382,15 +1397,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"Haiwezi kusambaza mtandao au kutumia mitandao hewa wakati umewasha Kiokoa Data"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"Shiriki intaneti kwa USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"Shiriki muunganisho wa Intaneti ya simu yako kupitia USB"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"Shiriki muunganisho wa Intaneti ya kompyuta kibao kupitia USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"Shiriki muunganisho wa intaneti wa simu yako kupitia USB"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"Shiriki muunganisho wa intaneti wa kompyuta kibao kupitia USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"Shiriki intaneti kwa Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"Shiriki muunganisho wa Intaneti ya kompyuta kibao kupitia Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"Shiriki muunganisho wa Intaneti ya simu kupitia Bluetooth"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"Inashiriki muunganisho wa Intaneti wa <xliff:g id="DEVICE_NAME">%1$d</xliff:g> hii kupitia Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"Shiriki muunganisho wa intaneti ya kompyuta kibao kupitia Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"Shiriki muunganisho wa intaneti ya simu kupitia Bluetooth"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"Inashiriki muunganisho wa intaneti wa <xliff:g id="DEVICE_NAME">%1$d</xliff:g> hii kupitia Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"Haiwezi kuzuia kwa zaidi kuliko vifaa <xliff:g id="MAXCONNECTION">%1$d</xliff:g>"</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>itazuiwa"</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"Tumia kipengele cha mtandao-hewa na kusambaza mtandao ili usambazie vifaa vingine intaneti kutoka kwenye mtandao wako wa simu za mkononi. Programu pia zinaweza kuunda mtandao-hewa ili kushiriki maudhui na vifaa vilivyo karibu."</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"Tumia mtandao pepe na kipengele cha kusambaza mtandao ili ushiriki intaneti na vifaa vingine kupitia muunganisho wa data kwa simu za mkononi. Programu pia zinaweza kuunda mtandao pepe ili kushiriki maudhui na vifaa vilivyo karibu."</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"Usaidizi"</string>
<string name="network_settings_title" msgid="2876509814832830757">"Mtandao wa simu"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"Mpango wa vifaa vya mkononi"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"Inapakia…"</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"Maelezo ya usalama"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"Maelezo ya usalama"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"Hauna muunganisho wa data. Ili kutazama taarifa hii sasa, nenda kwa %s kutoka kwa kompyuta yoyote iliyounganishwa kwa mtandao."</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"Huna muunganisho wa data. Ili kuona maelezo haya sasa, nenda kwenye %s ukitumia kompyuta yoyote iliyounganishwa kwenye intaneti."</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Inapakia…"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"Weka mbinu ya kufunga skrini"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"Kwa sababu za usalama, weka nenosiri"</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"Maelezo ya programu"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"Programu imesakinishwa kutoka <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"Maelezo zaidi kwenye <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"Oparesheni ya programu"</string>
<string name="app_ops_running" msgid="7706949900637284122">"Inatumika"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(Haijawahi kutumiwa)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"Hakuna programu chaguo-msingi."</string>
@@ -1711,7 +1725,7 @@
<string name="service_stop_description" msgid="9146619928198961643">"Huduma hii ilianzishwa na programu yake. Kuisitisha kunaweza kuifanya programu iache kufanya kazi."</string>
<string name="heavy_weight_stop_description" msgid="6050413065144035971">"Programu hii haiwezi kusitishwa kwa usalama. Ukiisitisha, unaweza kupoteza baadhi ya kazi yako ya sasa."</string>
<string name="background_process_stop_description" msgid="3834163804031287685">"Hii ni utaratibu wa zamani ya programu ambayo bado inaendeshwa iwapo itahitajika tena. Huwa hakuna sababu ya kuisitisha."</string>
- <string name="service_manage_description" msgid="479683614471552426">"<xliff:g id="CLIENT_NAME">%1$s</xliff:g>: inatumika kwa sasa. Gonga Mipangilio ili uidhibiti."</string>
+ <string name="service_manage_description" msgid="479683614471552426">"<xliff:g id="CLIENT_NAME">%1$s</xliff:g>: inatumika kwa sasa. Gusa Mipangilio ili uidhibiti."</string>
<string name="main_running_process_description" msgid="1130702347066340890">"Utaratibu kuu ambao unatumika."</string>
<string name="process_service_in_use_description" msgid="8993335064403217080">"Huduma inatumika <xliff:g id="COMP_NAME">%1$s</xliff:g>"</string>
<string name="process_provider_in_use_description" msgid="5586603325677678940">"Mtoaji huduma <xliff:g id="COMP_NAME">%1$s</xliff:g> anatumika"</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"Lugha na uingizaji wa data"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"Huna ruhusa ya kubadilisha lugha inayotumika kwenye kifaa."</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"Lugha na uingizaji wa data"</string>
<string name="input_assistance" msgid="7577795275222555487">"Usaidizi wa kuweka maudhui"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"Kibodi na mbinu za kuingiza hoja"</string>
@@ -1776,7 +1791,7 @@
<string name="user_dict_settings_edit_dialog_title" msgid="8967476444840548674">"Hariri Neno"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="2210564879320004837">"Hariri"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="9140703913776549054">"Futa"</string>
- <string name="user_dict_settings_empty_text" msgid="1971969756133074922">"Huna maneno yoyote katika kamusi ya mtumiaji. Gonga kitufe cha Ongeza (+) ili uongeze neno."</string>
+ <string name="user_dict_settings_empty_text" msgid="1971969756133074922">"Huna maneno yoyote katika kamusi ya mtumiaji. Gusa kitufe cha Ongeza (+) ili uongeze neno."</string>
<string name="user_dict_settings_all_languages" msgid="6742000040975959247">"Ya lugha zote"</string>
<string name="user_dict_settings_more_languages" msgid="7316375944684977910">"Lugha zaidi..."</string>
<string name="testing" msgid="6584352735303604146">"Majaribio"</string>
@@ -1829,10 +1844,10 @@
<string name="accessibility_screen_magnification_navbar_title" msgid="7141753038957538230">"Kuza ukitumia kitufe"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="2760906043221923793">"Kuza ukitumia kitufe na kugonga mara tatu"</string>
<string name="accessibility_preference_magnification_summary" msgid="5867883657521404509">"Vuta karibu kwenye skrini"</string>
- <string name="accessibility_screen_magnification_short_summary" msgid="3411979839172752057">"Gonga mara 3 ili ukuze"</string>
- <string name="accessibility_screen_magnification_navbar_short_summary" msgid="3693116360267980492">"Gonga kitufe ili ukuze"</string>
- <string name="accessibility_screen_magnification_summary" msgid="5258868553337478505"><b>"Ili kukuza"</b>", gonga skrini mara 3 haraka.\n"<ul><li>"Buruta vidole 2 au zaidi ili usogeze"</li>\n<li>"Bana vidole 2 au zaidi ili ubadilishe ukuzaji"</li></ul>\n\n<b>"Ili kukuza kwa muda mfupi"</b>", gonga skrini mara 3 kwa haraka na ukifika mara ya tatu, usiondoe kidole.\n"<ul><li>"Buruta ili usogeze kwenye skrini"</li>\n<li>"Inua kidole ili uvute mbali"</li></ul>\n\n"Huwezi kukuza ukitumia kibodi au sehemu ya viungo muhimu."</string>
- <string name="accessibility_screen_magnification_navbar_summary" msgid="1996584694050087161">"Ukiwasha kipengele cha ukuzaji, tumia Kitufe cha zana za walio na matatizo ya kuona au kusikia hapo chini ya skrini ili ukuze haraka.\n\n"<b>"Ili kukuza"</b>", gusa Kitufe cha zana za walio na matatizo ya kuona au kusikia, kisha ugonge mahali popote kwenye skrini.\n"<ul><li>"Buruta kwa kutumia vidole 2 au zaidi ili usogeze"</li>\n<li>"Bana vidole 2 au zaidi ili ubadilishe ukuzaji"</li></ul>\n\n<b>"Ili kukuza kwa muda mfupi"</b>", gusa Kitufe cha zana za walio na matatizo ya kuona au kusikia, kisha uguse na ushikilie mahali popote kwenye skrini.\n"<ul><li>"Buruta ili usogeze kwenye skrini"</li>\n<li>"Inua kidole ili usogeze mbali"</li></ul>\n\n"Huwezi kuvuta karibu kwenye kibodi au sehemu ya viungo muhimu."</string>
+ <string name="accessibility_screen_magnification_short_summary" msgid="3411979839172752057">"Gusa mara 3 ili ukuze"</string>
+ <string name="accessibility_screen_magnification_navbar_short_summary" msgid="3693116360267980492">"Gusa kitufe ili ukuze"</string>
+ <string name="accessibility_screen_magnification_summary" msgid="5258868553337478505"><b>"Ili kukuza"</b>", gusa skrini mara 3 haraka.\n"<ul><li>"Buruta vidole 2 au zaidi ili usogeze"</li>\n<li>"Bana vidole 2 au zaidi ili ubadilishe ukuzaji"</li></ul>\n\n<b>"Ili kukuza kwa muda mfupi"</b>", gusa skrini mara 3 kwa haraka na ukifika mara ya tatu, usiondoe kidole.\n"<ul><li>"Buruta ili usogeze kwenye skrini"</li>\n<li>"Inua kidole ili uvute mbali"</li></ul>\n\n"Huwezi kukuza ukitumia kibodi au sehemu ya viungo muhimu."</string>
+ <string name="accessibility_screen_magnification_navbar_summary" msgid="1996584694050087161">"Ukiwasha kipengele cha ukuzaji, tumia Kitufe cha zana za walio na matatizo ya kuona au kusikia hapo chini ya skrini ili ukuze haraka.\n\n"<b>"Ili kukuza"</b>", gusa Kitufe cha zana za walio na matatizo ya kuona au kusikia, kisha uguse mahali popote kwenye skrini.\n"<ul><li>"Buruta kwa kutumia vidole 2 au zaidi ili usogeze"</li>\n<li>"Bana vidole 2 au zaidi ili ubadilishe ukuzaji"</li></ul>\n\n<b>"Ili kukuza kwa muda mfupi"</b>", gusa Kitufe cha zana za walio na matatizo ya kuona au kusikia, kisha uguse na ushikilie mahali popote kwenye skrini.\n"<ul><li>"Buruta ili usogeze kwenye skrini"</li>\n<li>"Inua kidole ili usogeze mbali"</li></ul>\n\n"Huwezi kuvuta karibu kwenye kibodi au sehemu ya viungo muhimu."</string>
<string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="70533120652758190">"Kitufe cha zana za walio na matatizo ya kuona au kusikia kimewekwa kuwa <xliff:g id="SERVICE">%1$s</xliff:g>. Gusa na ushikilie Kitufe cha zana za walio na matatizo ya kuona au kusikia, kisha uchague ukuzaji ili utumie kipengele cha ukuzaji."</string>
<string name="accessibility_global_gesture_preference_title" msgid="2048884356166982714">"Njia ya mkato ya kitufe cha sauti"</string>
<string name="accessibility_shortcut_service_title" msgid="4779360749706905640">"Huduma ya njia ya mkato"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"Huduma"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"Muda"</string>
<string name="mem_details_title" msgid="6548392825497290498">"Maelezo ya kumbukumbu"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"Hali za kumbukumbu"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"Kumbukumbu iliyotumika"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"Kernel"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"Asili"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"Akiba za Kernel"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"Mabadiliko ya ZRam"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"Haijatumika"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"Jumla"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"Saa 3"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"Saa 6"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"Saa 12"</string>
@@ -2288,7 +2295,7 @@
<string name="wifi_setup_save" msgid="3659235094218508211">"Hifadhi"</string>
<string name="wifi_setup_cancel" msgid="3185216020264410239">"Ghairi"</string>
<string name="wifi_setup_status_scanning" msgid="5317003416385428036">"Inatambaza mitandao..."</string>
- <string name="wifi_setup_status_select_network" msgid="3960480613544747397">"Gonga mtandao ili uunganishe"</string>
+ <string name="wifi_setup_status_select_network" msgid="3960480613544747397">"Gusa mtandao ili uunganishe"</string>
<string name="wifi_setup_status_existing_network" msgid="6394925174802598186">"Unganisha kwa mtandao uliopo"</string>
<string name="wifi_setup_status_unsecured_network" msgid="8143046977328718252">"Unganisha kwenye mtandao usio salama"</string>
<string name="wifi_setup_status_edit_network" msgid="4765340816724760717">"Andika usanidi wa mtandao"</string>
@@ -2298,7 +2305,7 @@
<string name="wifi_setup_status_eap_not_supported" msgid="6796317704783144190">"EAP haiauniwi."</string>
<string name="wifi_setup_eap_not_supported" msgid="6812710317883658843">"Huwezi kusanidi muunganisho wa EAP Wi-Fi wakati wa usanidi. Baada ya kusanidi, unaweza kufanya hivyo katika Mipangilio > mitandao isiyotumia waya."</string>
<string name="wifi_setup_description_connecting" msgid="2793554932006756795">"Kuunganisha kunaweza kuchukua dakika chache..."</string>
- <string name="wifi_setup_description_connected" msgid="6649168170073219153">"Gonga "<b>"Inayofuata"</b>" ili uendelee kuweka mipangilio.\n\nGonga "<b>"Nyuma"</b>" ili uunganishe kwenye mtandao tofauti wa Wi-Fi."</string>
+ <string name="wifi_setup_description_connected" msgid="6649168170073219153">"Gusa "<b>"Inayofuata"</b>" ili uendelee kuweka mipangilio.\n\nGusa "<b>"Nyuma"</b>" ili uunganishe kwenye mtandao tofauti wa Wi-Fi."</string>
<string name="accessibility_sync_enabled" msgid="558480439730263116">"Kusawazisha kumelemazwa"</string>
<string name="accessibility_sync_disabled" msgid="1741194106479011384">"Kusawazisha kumelemazwa"</string>
<string name="accessibility_sync_in_progress" msgid="4501160520879902723">"Inasawazisha sasa"</string>
@@ -2326,7 +2333,7 @@
<string name="settings_backup_summary" msgid="7916877705938054035">"Hifadhi nakala za mipangilio yangu"</string>
<string name="sync_menu_sync_now" msgid="6154608350395805683">"Sawazisha sasa"</string>
<string name="sync_menu_sync_cancel" msgid="8292379009626966949">"Ghairi usawazishaji"</string>
- <string name="sync_one_time_sync" msgid="3733796114909082260">"Gonga ili usawazishe<xliff:g id="LAST_SYNC_TIME">
+ <string name="sync_one_time_sync" msgid="3733796114909082260">"Gusa ili usawazishe<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g> sasa"</string>
<string name="sync_gmail" msgid="714886122098006477">"Gmail"</string>
<string name="sync_calendar" msgid="9056527206714733735">"Kalenda"</string>
@@ -2492,8 +2499,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"Ondoa VPN"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"Ungependa kubadilisha VPN iliyopo?"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"Ungependa kuweka VPN iliyowashwa kila mara?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"Kwa kuwasha mIpangilio hii, hutapata muunganisho wa Intaneti hadi VPN itakapounganishwa"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"Programu itaondoa VPN iliyopo, na hutaweza kuwa na muunganisho wa Intaneti hadi VPN itakapounganishwa"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"Wakati mipangilio hii imewashwa, hutapata muunganisho wa intaneti hadi VPN itakapounganishwa"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"Programu itaondoa VPN iliyopo na hutaweza kuwa na muunganisho wa intaneti hadi VPN itakapounganishwa"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"Tayari umeunganisha kwenye VPN ambayo imewashwa kila mara. Ikiwa utaunganisha kwenye programu tofauti, programu hiyo itaondoa VPN iliyopo na kuzima hali ya imewashwa kila mara."</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"Tayari umeunganisha kwenye VPN. Ikiwa utaunganisha kwenye programu tofauti, programu hiyo itaondoa VPN iliyopo."</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"Washa"</string>
@@ -2699,9 +2706,9 @@
<string name="sim_settings_title" msgid="6822745211458959756">"SIM kadi"</string>
<string name="sim_settings_summary" msgid="4050372057097516088">"<xliff:g id="SIM_NAME">%1$s</xliff:g> - <xliff:g id="SIM_NUMBER">%2$s</xliff:g>"</string>
<string name="sim_cards_changed_message" msgid="7900721153345139783">"SIM kadi zimebadilika"</string>
- <string name="sim_cards_changed_message_summary" msgid="8258058274989383204">"Gonga ili uweke mipangilio ya shughuli"</string>
+ <string name="sim_cards_changed_message_summary" msgid="8258058274989383204">"Gusa ili uweke mipangilio ya shughuli"</string>
<string name="sim_cellular_data_unavailable" msgid="9109302537004566098">"Data ya mtandao wa simu haipatikani"</string>
- <string name="sim_cellular_data_unavailable_summary" msgid="5416535001368135327">"Gonga ili uchague SIM ya data"</string>
+ <string name="sim_cellular_data_unavailable_summary" msgid="5416535001368135327">"Gusa ili uchague SIM ya data"</string>
<string name="sim_calls_always_use" msgid="7936774751250119715">"Tumia hii kwa simu wakati wote"</string>
<string name="select_sim_for_data" msgid="2366081042162853044">"Chagua SIM ya data"</string>
<string name="data_switch_started" msgid="2040761479817166311">"Inabadili SIM ya data, hii inaweza kuchukua hadi dakika moja..."</string>
@@ -2720,6 +2727,8 @@
<string name="color_purple" msgid="3888532466427762504">"Zambarau"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"Hakuna SIM kadi zilizoingizwa"</string>
<string name="sim_status_title" msgid="6744870675182447160">"Hali ya SIM"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"Piga simu kwa kutumia SIM kadi chaguo-msingi"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"SIM ya kutumia kupiga simu"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"Mipangilio mingine ya simu"</string>
@@ -2729,17 +2738,19 @@
<string name="preferred_network_offload_popup" msgid="2252915199889604600">"Zima Utangazaji wa Jina la Mtandao itazuia uunganishaji otomatiki kwenye mitandao iliyofichika."</string>
<string name="sim_signal_strength" msgid="9144010043784767984">"dBm <xliff:g id="DBM">%1$d</xliff:g> asu <xliff:g id="ASU">%2$d</xliff:g>"</string>
<string name="sim_notification_title" msgid="6272913297433198340">"SIM kadi zimebadilishwa."</string>
- <string name="sim_notification_summary" msgid="8858043655706669772">"Gonga ili uweke mipangilio"</string>
+ <string name="sim_notification_summary" msgid="8858043655706669772">"Gusa ili uweke mipangilio"</string>
<string name="sim_pref_divider" msgid="6778907671867621874">"SIM inayopendelewa kwa"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"Uliza kila wakati"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"Uteuzi unahitajika"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"Mipangilio"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="other">Onyesha vipengee %d vilivyofichwa</item>
<item quantity="one">Onyesha kipengee %d kilichofichwa</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Kunja"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"Mtandao na Intaneti"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"Mtandao na intaneti"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"kifaa cha mkononi"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"matumizi ya data"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"mtandao-hewa"</string>
@@ -2796,12 +2807,20 @@
<string name="keywords_profile_challenge" msgid="789611397846512845">"mashindano kazini, kazi, wasifu"</string>
<string name="keywords_unification" msgid="1922900767659821025">"wasifu wa kazini, wasifu uliodhibitiwa, unganisha, uunganishaji, kazi, wasifu"</string>
<string name="keywords_gesture" msgid="3526905012224714078">"ishara"</string>
- <string name="keywords_payment_settings" msgid="5220104934130446416">"lipa, gonga, malipo"</string>
+ <string name="keywords_payment_settings" msgid="5220104934130446416">"lipa, gusa, malipo"</string>
<string name="keywords_backup" msgid="470070289135403022">"hifadhi rudufu, hifadhi nakala"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"ishara"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"Sanidi tagi ya NFC ya Wi-Fi"</string>
<string name="write_tag" msgid="8571858602896222537">"Andika"</string>
- <string name="status_awaiting_tap" msgid="2130145523773160617">"Gonga tagi ya NFC ili uandike..."</string>
+ <string name="status_awaiting_tap" msgid="2130145523773160617">"Gusa tagi ya NFC ili uandike..."</string>
<string name="status_invalid_password" msgid="2575271864572897406">"Nenosiri si sahihi, jaribu tena."</string>
<string name="status_write_success" msgid="5228419086308251169">"Imefanikiwa!"</string>
<string name="status_failed_to_write" msgid="8072752734686294718">"Haiwezi kuandika data kwenye tagi ya NFC. Kama tatizo litaendelea, jaribu tagi tofauti"</string>
@@ -2836,10 +2855,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"Arifu"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"Tetema"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"Washa sauti"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"Hujawasha sheria zozote za kiotomatiki"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="other">Imewasha sheria <xliff:g id="ON_COUNT">%d</xliff:g> za kiotomatiki</item>
- <item quantity="one">Imewasha sheria 1 ya kiotomatiki</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Kamwe"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="other">Amri <xliff:g id="ON_COUNT">%d</xliff:g></item>
+ <item quantity="one">Amri 1</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"Usisumbue"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Tabia"</string>
@@ -2847,9 +2866,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Hakuna sauti"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Hakuna sauti (Kimya Kabisa)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Hakuna sauti ila <xliff:g id="CATEGORIES">%1$s</xliff:g>"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"Sheria otomatiki"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"Inaruhusu tu sauti za kengele, maudhui na mfumo (Kengele pekee)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"Washa kiotomatiki"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"Sheria otomatiki"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Weka sheria za Usinisumbue"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Dhibiti sauti na mitetemo wakati fulani"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"Kipaumbele tu"</string>
@@ -2857,6 +2876,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"Kimya kabisa"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"Zuia ukatizaji wa maonyesho"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"Ruhusu ishara zinazoonekena"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"Ongeza"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"Sauti za wasifu wa kazi"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"Tumia sauti za wasifu wako binafsi"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"Sauti za wasifu wa binafsi na wa kazini ni sawa"</string>
@@ -2983,7 +3018,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"Jina la sheria"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"Andika jina la sheria"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"Jina la sheria linatumika tayari"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"Ongeza zingine"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"Ongeza sheria"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"Ongeza amri ya tukio"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"Ongeza amri ya wakati"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"Futa sheria"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"Chagua aina ya sheria"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"Je, ungependa kuifuta sheria ya \"<xliff:g id="RULE">%1$s</xliff:g>\"?"</string>
@@ -2991,9 +3028,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"Aina ya sheria"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"Isiyojulikana"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"Sanidi sheria"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"Sheria ya wakati"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"Saa"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"Sheria ya kiotomatiki imewekwa kuwasha kipengee cha Usinisumbue katika nyakati maalum"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"Sheria ya tukio"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"Tukio"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"Sheria ya kiotomatiki imewekwa kuonyesha kipengee cha Usinisumbue wakati wa matukio maalum"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"Wakati wa matukio ya"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"Wakati wa matukio ya <xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
@@ -3024,8 +3061,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Kutoka kwa anwani zenye nyota pekee"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Hamna"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Kengele"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"Sauti za mfumo na maudhui"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"Vikumbusho"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Matukio"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Wapiga simu wote"</string>
@@ -3050,15 +3086,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"Badilisha utumie kengele pekee hadi <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"Badilisha utumie hali ya katiza wakati wote"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"Zuia wakati skrini imewashwa"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"Zuia arifa zilizozuiwa na kipengele cha Usinisumbue zisijitokeze kwa vyovyote vile kwenye skrini"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"Zuia wakati skrini imezimwa"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"Zuia arifa zilizozuiwa na kipengele cha Usinisumbue zisiwashe skrini wala mwangaza wa arifa"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"Zuia arifa zilizozuiwa na kipengele cha Usinisumbue zisiwashe skrini"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"Imezimwa"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"Wakati skrini imewashwa"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Wakati skrini imezimwa"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Wakati skrini imezimwa au imewashwa"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"Wakati skrini imewashwa"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"Ruhusu arifa zilizozuiwa na kipengele cha Usinisimbue zichomoze kwenye skrini"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"Wakati skrini imezimwa"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"Ruhusu arifa zilizozuiwa na kipengele cha Usinisumbue ziwashe skrini na kutoa mweko"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"Ruhusu arifa zilizozuiwa na kipengele cha Usinisumbue ziwashe skrini"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Mipangilio ya arifa"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"Sawa"</string>
<string name="device_feedback" msgid="3238056036766293294">"Tuma maoni kuhusu kifaa hiki"</string>
@@ -3066,7 +3098,7 @@
<string name="switch_on_text" msgid="1124106706920572386">"Imewashwa"</string>
<string name="switch_off_text" msgid="1139356348100829659">"Imezimwa"</string>
<string name="screen_pinning_title" msgid="2292573232264116542">"Kudumisha programu moja"</string>
- <string name="screen_pinning_description" msgid="3360904523688769289">"Wakati mipangilio hii imewashwa, unaweza kutumia kipengele cha kudumisha programu moja ili uweze kutumia skrini ya sasa hadi utakapokiondoa.\n\nIli kudumisha programu moja:\n\n1. Hakikisha kuwa umewasha kipengele cha kudumisha programu moja.\n\n2. Fungua skrini unayotaka kutumia.\n\n3. Gonga Muhtasari.\n\n4. Telezesha kidole juu kisha ugonge aikoni ya kubandika."</string>
+ <string name="screen_pinning_description" msgid="3360904523688769289">"Wakati mipangilio hii imewashwa, unaweza kutumia kipengele cha kudumisha programu moja ili uweze kutumia skrini ya sasa hadi utakapokiondoa.\n\nIli kudumisha programu moja:\n\n1. Hakikisha kuwa umewasha kipengele cha kudumisha programu moja.\n\n2. Fungua skrini unayotaka kutumia.\n\n3. Gusa Muhtasari.\n\n4. Telezesha kidole juu kisha uguse aikoni ya kubandika."</string>
<string name="screen_pinning_unlock_pattern" msgid="8282268570060313339">"Omba mchoro wa kufungua kabla hujabandua"</string>
<string name="screen_pinning_unlock_pin" msgid="8757588350454795286">"Itisha PIN kabla hujabandua"</string>
<string name="screen_pinning_unlock_password" msgid="2514079566873826434">"Omba nenosiri kabla hujabandua"</string>
@@ -3149,8 +3181,8 @@
<string name="unknown_app" msgid="5275921288718717656">"Programu isiyojulikana"</string>
<string name="app_permissions" msgid="4148222031991883874">"Ruhusa za programu"</string>
<string name="app_permissions_summary" msgid="5163974162150406324">"Programu zinazotumia <xliff:g id="APPS">%1$s</xliff:g>"</string>
- <string name="tap_to_wake" msgid="7211944147196888807">"Gonga ili uanze kutumia"</string>
- <string name="tap_to_wake_summary" msgid="4341387904987585616">"Gonga mara mbili mahali popote kwenye skrini ili uanze kutumia kifaa"</string>
+ <string name="tap_to_wake" msgid="7211944147196888807">"Gusa ili uanze kutumia"</string>
+ <string name="tap_to_wake_summary" msgid="4341387904987585616">"Gusa mara mbili mahali popote kwenye skrini ili uanze kutumia kifaa"</string>
<string name="domain_urls_title" msgid="3132983644568821250">"Viungo vya kufungua"</string>
<string name="domain_urls_summary_none" msgid="2639588015479657864">"Usifungue viungo vinavyoweza kutumika"</string>
<string name="domain_urls_summary_one" msgid="3704934031930978405">"Fungua <xliff:g id="DOMAIN">%s</xliff:g>"</string>
@@ -3378,7 +3410,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"Mtandao-hewa umewashwa"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"Mtandao-hewa wa Wi-Fi wa vifaa vya mkononi <xliff:g id="ID_1">%1$s</xliff:g> umewashwa, Wi-Fi imezimwa kwenye kifaa hiki."</string>
<string name="condition_airplane_title" msgid="287356299107070503">"Hali ya ndegeni imewashwa"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"Umezima Wi-Fi, Bluetooth na mitandao ya simu. Huwezi kupiga simu au kuunganisha kwenye Intaneti."</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"Umezima Wi-Fi, Bluetooth na mtandao wa simu. Huwezi kupiga simu au kuunganisha kwenye intaneti."</string>
<string name="condition_zen_title" msgid="2679168532600816392">"Usinisumbue imewashwa (<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"Kiokoa Betri kimewashwa"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"Utendaji umepunguzwa. Huduma za Mahali na data ya chini chini zimezimwa."</string>
@@ -3410,8 +3442,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"Kichunguzi cha Muunganisho"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"Kichunguzi cha Muunganisho hukusanya kumbukumbu wakati kinatambua tatizo la muunganisho na kumwarifu mtumiaji kuwasilisha ripoti ya hitilafu"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"Ili kuweka mabadiliko ya kichunguzi cha muunganisho, washa kifaa tena"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"HAL HDR+ ya Kamera"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"Ili kutekeleza mabadiliko ya HAL HDR+ ya Kamera, washa kifaa tena"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"Kitambuzi cha Leza ya Kamera"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"Masasisho ya mfumo kiotomatiki"</string>
<string name="usage" msgid="2977875522080448986">"Matumizi"</string>
@@ -3561,13 +3591,6 @@
<item quantity="one">Sekunde 1</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"Subiri kwa ~<xliff:g id="ESTIMATE">%1$s</xliff:g>"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Kompyuta"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Vifaa vya sauti"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Simu"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Kupiga picha"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Kifaa cha sauti"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Vifaa vya Ziada vya Kuingiza Data"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"Dhibiti hifadhi"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"Ili kuongeza nafasi ya hifadhi, kidhibiti cha hifadhi huondoa picha na video zilizohifadhiwa nakala kwenye kifaa chako."</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"Ondoa picha na video"</string>
@@ -3589,9 +3612,9 @@
<string name="double_twist_for_camera_suggestion_summary" product="default" msgid="447403641027147153">"Geuza simu mara mbili ili uweke picha ya kujipiga mwenyewe"</string>
<string name="double_twist_for_camera_suggestion_summary" product="tablet" msgid="1724660290703318739">"Geuza kompyuta kibao mara mbili ili uweke picha ya kujipiga mwenyewe"</string>
<string name="double_twist_for_camera_suggestion_summary" product="device" msgid="5980398380988039489">"Geuza kifaa mara mbili ili uweke picha ya kujipiga mwenyewe"</string>
- <string name="ambient_display_title" product="default" msgid="5144814600610448504">"Gonga mara mbili ili uangalie simu"</string>
- <string name="ambient_display_title" product="tablet" msgid="8688795028609563837">"Gonga mara mbili ili uangalie kompyuta kibao"</string>
- <string name="ambient_display_title" product="device" msgid="3423781975742145894">"Gonga mara mbili ili uangalie kifaa"</string>
+ <string name="ambient_display_title" product="default" msgid="5144814600610448504">"Gusa mara mbili ili uangalie simu"</string>
+ <string name="ambient_display_title" product="tablet" msgid="8688795028609563837">"Gusa mara mbili ili uangalie kompyuta kibao"</string>
+ <string name="ambient_display_title" product="device" msgid="3423781975742145894">"Gusa mara mbili ili uangalie kifaa"</string>
<string name="ambient_display_summary" msgid="525662960806416373">"Ili uangalie saa, aikoni za arifa na maelezo mengine, gusa skrini yako mara mbili."</string>
<string name="ambient_display_suggestion_summary" msgid="5987443721392571847">"Angalia arifa wakati skrini imezimwa"</string>
<string name="ambient_display_pickup_title" product="default" msgid="818688002837687268">"Inua ili uangalie simu"</string>
@@ -3602,6 +3625,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"Ili uangalie saa, aikoni za arifa na maelezo mengine, chukua kifaa chako."</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"Angalia arifa wakati skrini imezimwa"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"Telezesha kidole ili upate arifa"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"Telezesha alama ya kidole"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"Ili uangalie arifa zako, telezesha kidole kuelekea chini kwenye kitambua alama ya kidole kilicho upande wa nyuma wa simu yako."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"Ili uangalie arifa zako, telezesha kidole kuelekea chini kwenye kitambua alama ya kidole kilicho upande wa nyuma wa kompyuta yako kibao."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"Ili uangalie arifa zako, telezesha kidole kuelekea chini kwenye kitambua alama ya kidole nyuma ya kifaa chako."</string>
@@ -3610,9 +3634,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"Imewashwa"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"Imezimwa"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"Tayari kipakiaji cha mfumo wa uendeshaji kimefunguliwa"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"Unganisha kwenye Intaneti kwanza"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"Unganisha kwenye Intaneti au wasiliana na mtoa huduma wako"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"Unganisha kwenye intaneti kwanza"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"Unganisha kwenye intaneti au uwasiliane na mtoa huduma wako"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"Haipatikani kwenye baadhi ya vifaa vilivyofungwa na mtoa huduma"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"Tafadhali zima kisha uwashe kifaa ili kuwasha kipengele cha ulinzi wa kifaa."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"Imepata <xliff:g id="SIZE">%1$s</xliff:g>\n\nIlitumika mara ya mwisho tarehe <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"Programu zinazofunguka papo hapo"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"Fungua viungo katika programu, hata kama programu hazijasakinishwa"</string>
@@ -3720,6 +3745,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>Hakikisha kuwa unaamini programu hii</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> hutumia kilicho kwenye skrini yako kubaini kinachoweza kujazwa kiotomatiki."</string>
<string name="device_theme" msgid="4571803018917608588">"Mandhari ya kifaa"</string>
<string name="default_theme" msgid="7085644992078579076">"Chaguo-msingi"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"Jina la mtandao"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"Onyesha jina la mtandao kwenye sehemu ya arifa"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"Kidhibiti Hifadhi: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"Kimezimwa"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"Kimewashwa"</string>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index e65e232..5d110af 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"ผู้ดูแลระบบอุปกรณ์ไม่อนุญาตให้ใช้รหัสผ่านที่เพิ่งใช้ไป"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"ไม่อนุญาตให้เรียงจากน้อยไปมาก จากมากไปน้อย หรือเรียงลำดับตัวเลขที่ซ้ำกัน"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"ตกลง"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"ยืนยัน"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"ยกเลิก"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"ล้าง"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"ยกเลิก"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะถูกตัดการเชื่อมต่อจากเสียงแฮนด์ฟรี"</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะถูกตัดการเชื่อมต่อจากอุปกรณ์อินพุต"</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"การเข้าถึงอินเทอร์เน็ตผ่าน <xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะถูกยกเลิกการเชื่อมต่อ"</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะยกเลิกการเชื่อมต่อจากการแชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตนี้"</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะยกเลิกการเชื่อมต่อจากการแชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์นี้"</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะยกเลิกการเชื่อมต่อจากการแชร์อินเทอร์เน็ตของแท็บเล็ตนี้"</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะยกเลิกการเชื่อมต่อจากการแชร์อินเทอร์เน็ตของโทรศัพท์นี้"</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"อุปกรณ์บลูทูธที่จับคู่"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"เชื่อมต่อ"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"เชื่อมต่อกับอุปกรณ์บลูทูธ"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"ใช้สำหรับ"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"เปลี่ยนชื่อ"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"อนุญาตการโอนไฟล์ขาเข้า"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"เชื่อมต่อกับอุปกรณ์สำหรับการเข้าถึงอินเทอร์เน็ต"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"กำลังแชร์อินเทอร์เน็ตกับอุปกรณ์"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"เชื่อมต่ออินเทอร์เน็ตแล้ว"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"กำลังแชร์อินเทอร์เน็ตกับอุปกรณ์"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"การตั้งค่าแท่นชาร์จ"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"ใช้แท่นชาร์จสำหรับระบบเสียง"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"เป็นลำโพง"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"ไม่พร้อมใช้งานเพราะการสแกนหา Wi‑Fi ปิดอยู่"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"ในการใช้งาน ให้เลือกผู้ให้บริการจัดอันดับเครือข่าย"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"หลีกเลี่ยงการเชื่อมต่อที่สัญญาณไม่แรงพอ"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"อย่าใช้เครือข่าย WiFi หากไม่มีการเชื่อมต่ออินเทอร์เน็ตที่ดีเพียงพอ"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"ใช้เครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตสัญญาณแรงเท่านั้น"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"อย่าใช้เครือข่าย WiFi หากไม่มีการเชื่อมต่ออินเทอร์เน็ตที่สัญญาณแรงพอ"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"ใช้เครือข่ายที่มีการเชื่อมต่ออินเทอร์เน็ตสัญญาณแรงเท่านั้น"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"เชื่อมต่อเครือข่ายแบบเปิด"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"เชื่อมต่อเครือข่ายสาธารณะคุณภาพสูงโดยอัตโนมัติ"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"เลือกผู้ให้บริการจัดอันดับเครือข่ายเพื่อใช้งาน"</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"การเพิ่มประสิทธิภาพ WiFi"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"ลดการใช้แบตเตอรี่เมื่อ WiFi เปิดอยู่"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"จำกัดแบตเตอรี่ที่ใช้โดย Wi-Fi"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"สลับไปใช้อินเทอร์เน็ตมือถือหาก Wi-Fi เชื่อมต่ออินเทอร์เน็ตไม่ได้"</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"สลับไปใช้เน็ตมือถือหาก Wi-Fi เชื่อมต่ออินเทอร์เน็ตไม่ได้"</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"สลับไปใช้อินเทอร์เน็ตมือถือโดยอัตโนมัติ"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"ใช้อินเทอร์เน็ตมือถือเมื่อ Wi‑Fi เชื่อมต่ออินเทอร์เน็ตไม่ได้ อาจมีค่าบริการจากการใช้อินเทอร์เน็ต"</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"ใช้เน็ตมือถือเมื่อ Wi‑Fi เชื่อมต่ออินเทอร์เน็ตไม่ได้ อาจมีค่าบริการจากปริมาณการใช้อินเทอร์เน็ต"</string>
<string name="wifi_add_network" msgid="6234851776910938957">"เพิ่มเครือข่าย"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"ค่ากำหนด Wi‑Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"เปิด Wi‑Fi อีกครั้งโดยอัตโนมัติ"</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"ลงชื่อเข้าใช้เพื่อเชื่อมต่อใช่ไหม"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"<xliff:g id="APP_NAME">%1$s</xliff:g> ต้องการให้คุณลงชื่อออนไลน์ก่อนเชื่อมต่อเครือข่าย"</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"เชื่อมต่อ"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"เครือข่ายนี้ไม่มีการเข้าถึงอินเทอร์เน็ต ต้องการเชื่อมต่ออยู่ไหม"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"เครือข่ายนี้ไม่มีการเข้าถึงอินเทอร์เน็ต ยังต้องการเชื่อมต่ออยู่ไหม"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"ไม่ต้องถามอีกสำหรับเครือข่ายนี้"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"Wi-Fi ไม่ได้เชื่อมต่ออินเทอร์เน็ต"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"Wi-Fi ไม่ได้เชื่อมต่ออินเทอร์เน็ต"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"คุณสลับไปใช้เครือข่ายมือถือได้เมื่อใดก็ตามที่การเชื่อมต่อ Wi-Fi มีสัญญาณไม่ดี อาจมีค่าบริการจากการใช้อินเทอร์เน็ตมือถือ"</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"สลับไปใช้อินเทอร์เน็ตมือถือ"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"ใช้ Wi-Fi ต่อไป"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"WiFi ขั้นสูง"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"ที่อยู่ Mac"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"ที่อยู่ IP"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"ข้อมูลเครือข่าย"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"รายละเอียดเครือข่าย"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"ซับเน็ตมาสก์"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"ที่อยู่ IPv6"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"คุณต้องการยกเลิกข้อความเชิญเพื่อเชื่อมต่อกับ <xliff:g id="PEER_NAME">%1$s</xliff:g> หรือไม่"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"ไม่จำกลุ่มนี้ใช่หรือไม่"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"Wi-Fi ฮอตสปอต"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"ไม่ได้แชร์อินเทอร์เน็ตหรือเนื้อหากับอุปกรณ์อื่นๆ อยู่"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"กำลังแชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตนี้ผ่านฮอตสปอตอยู่"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"กำลังแชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์นี้ผ่านฮอตสปอตอยู่"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"แอปไม่ได้แชร์เนื้อหาอยู่ หากต้องการแชร์การเชื่อมต่ออินเทอร์เน็ต ให้ปิดฮอตสปอตแล้วเปิดใหม่"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"ไม่ได้แชร์อินเทอร์เน็ตหรือเนื้อหากับอุปกรณ์อื่น"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"กำลังแชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตนี้ผ่านฮอตสปอต"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"กำลังแชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์นี้ผ่านฮอตสปอต"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"แอปไม่ได้แชร์เนื้อหา หากต้องการแชร์การเชื่อมต่ออินเทอร์เน็ต ให้ปิดฮอตสปอตแล้วเปิดใหม่"</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"ชื่อฮอตสปอต"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"กำลังเปิด <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"อุปกรณ์อื่นๆ สามารถเชื่อมต่อกับ <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"รหัสผ่านฮอตสปอต"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"ย่านความถี่ AP"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"ใช้ฮอตสปอตเพื่อสร้างเครือข่าย Wi‑Fi สำหรับอุปกรณ์อื่นๆ ของคุณ ฮอตสปอตสามารถให้บริการอินเทอร์เน็ตโดยใช้การเชื่อมต่ออินเทอร์เน็ตมือถือ อาจมีค่าบริการอินเทอร์เน็ตมือถือเพิ่มเติม"</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"ใช้ฮอตสปอตเพื่อสร้างเครือข่าย Wi‑Fi สำหรับอุปกรณ์อื่นๆ ฮอตสปอตจะแชร์อินเทอร์เน็ตโดยใช้การเชื่อมต่อข้อมูลผ่านมือถือ อาจมีค่าบริการเน็ตมือถือเพิ่มเติม"</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"แอปสามารถสร้างฮอตสปอตเพื่อแชร์เนื้อหากับอุปกรณ์ที่อยู่ใกล้"</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"กำลังเปิดฮอตสปอต…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"กำลังปิดฮอตสปอต…"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"เมื่อเปิดการโทรผ่าน Wi-Fi โทรศัพท์จะสามารถวางเส้นทางสายเรียกผ่านเครือข่าย Wi-Fi หรือเครือข่ายของผู้ให้บริการของคุณได้ ทั้งนี้ขึ้นอยู่กับค่ากำหนดของคุณและสัญญาณฝั่งที่แรงกว่า โปรดสอบถามค่าธรรมเนียมและรายละเอียดอื่นๆ กับผู้ให้บริการก่อนที่จะเปิดฟีเจอร์นี้"</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"อัปเดตที่อยู่ฉุกเฉิน"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"ที่อยู่ที่บริการฉุกเฉินจะใช้เป็นตำแหน่งของคุณถ้าคุณโทรหาหมายเลขฉุกเฉินด้วย Wi-Fi"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"ที่อยู่ฉุกเฉิน"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"ใช้เป็นตำแหน่งของคุณเมื่อโทรหาหมายเลขฉุกเฉินผ่าน Wi-Fi"</string>
<string name="display_settings_title" msgid="1708697328627382561">"แสดง"</string>
<string name="sound_settings" msgid="5534671337768745343">"เสียง"</string>
<string name="all_volume_title" msgid="4296957391257836961">"ระดับเสียง"</string>
@@ -1005,7 +1005,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"ล้างประวัติ"</string>
<string name="display_settings" msgid="7965901687241669598">"การแสดงผล"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"หมุนหน้าจออัตโนมัติ"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"สีสันสดใส"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"สี"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"ธรรมชาติ"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"บูสต์"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"อิ่มตัว"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"เปลี่ยนการวางแนวโดยอัตโนมัติเมื่อหมุนแท็บเล็ต"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"สลับแนวหน้าจออัตโนมัติเมื่อหมุนโทรศัพท์"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"เปลี่ยนการวางแนวโดยอัตโนมัติเมื่อหมุนแท็บเล็ต"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"การอัปเดตระบบ"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"เวอร์ชันของ Android"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"ระดับแพตช์ความปลอดภัยของ Android"</string>
<string name="model_info" msgid="1952009518045740889">"โมเดล"</string>
+ <string name="model_summary" msgid="8306235877567782987">"รุ่น: %1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"โมเดลและฮาร์ดแวร์"</string>
<string name="hardware_revision" msgid="8893547686367095527">"เวอร์ชันฮาร์ดแวร์"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"รหัสอุปกรณ์"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"การตั้งค่าที่เก็บข้อมูล"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"ยกเลิกการต่อเชื่อมที่เก็บข้อมูล USB ดูที่เก็บข้อมูลที่ใช้งานได้"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"ยกเลิกการต่อเชื่อมการ์ด SD ดูที่จัดเก็บข้อมูลที่ใช้ได้"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"หมายเลขโทรศัพท์ของฉัน"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"หมายเลขโทรศัพท์"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"MDN ในซิม"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"หมายเลขโทรศัพท์ในซิม"</string>
<string name="status_min_number" msgid="3519504522179420597">"นาที"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"รุ่น PRL"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"ประเภทเครือข่ายมือถือ"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"อื่นๆ"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"ระบบ"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"สำรวจ <xliff:g id="NAME">^1</xliff:g>"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"ไฟล์อื่นๆ ได้แก่ ไฟล์ที่แชร์ซึ่งแอปบันทึกไว้, ไฟล์ที่ดาวน์โหลดจากอินเทอร์เน็ตหรือบลูทูธ, ไฟล์ Android และอื่นๆ \n\nหากต้องการดูเนื้อหาที่มองเห็นได้ของ <xliff:g id="NAME">^1</xliff:g> นี้ ให้แตะ \"สำรวจ\""</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"ไฟล์อื่นๆ ได้แก่ ไฟล์ที่แชร์ซึ่งแอปบันทึกไว้ ไฟล์ที่ดาวน์โหลดจากอินเทอร์เน็ตหรือบลูทูธ ไฟล์ Android และอื่นๆ \n\nหากต้องการดูเนื้อหาที่มองเห็นได้ของ <xliff:g id="NAME">^1</xliff:g> นี้ ให้แตะ \"สำรวจ\""</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"ระบบมีไฟล์ที่ใช้เพื่อเรียกใช้ Android เวอร์ชัน <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"<xliff:g id="USER_0">^1</xliff:g> อาจมีการบันทึกรูปภาพ เพลง แอป หรือข้อมูลอื่นๆ โดยใช้พื้นที่เก็บข้อมูลไป <xliff:g id="SIZE">^2</xliff:g> \n\nหากต้องการดูรายละเอียด ให้สลับไปที่ <xliff:g id="USER_1">^1</xliff:g>"</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"ตั้งค่า <xliff:g id="NAME">^1</xliff:g> ของคุณ"</string>
@@ -1382,18 +1397,18 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"ไม่สามารถเชื่อมต่ออินเทอร์เน็ตผ่านมือถือหรือใช้โหมดฮอตสปอตแบบพกพาขณะที่การประหยัดอินเทอร์เน็ตเปิดอยู่"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"ปล่อยสัญญาณผ่าน USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"แชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์ผ่าน USB"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"แชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตผ่าน USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"แชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์ผ่าน USB"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"แชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตผ่าน USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"ปล่อยสัญญาณบลูทูธ"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"แชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตผ่านบลูทูธ"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"แชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์ผ่านบลูทูธ"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"กำลังแชร์อินเทอร์เน็ตของ <xliff:g id="DEVICE_NAME">%1$d</xliff:g> นี้ผ่านบลูทูธ"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"แชร์การเชื่อมต่ออินเทอร์เน็ตของแท็บเล็ตผ่านบลูทูธ"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"แชร์การเชื่อมต่ออินเทอร์เน็ตของโทรศัพท์ผ่านบลูทูธ"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"กำลังแชร์การเชื่อมต่ออินเทอร์เน็ตของ <xliff:g id="DEVICE_NAME">%1$d</xliff:g> นี้ผ่านบลูทูธ"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"ไม่สามารถปล่อยการเชื่อมต่อมากกว่า <xliff:g id="MAXCONNECTION">%1$d</xliff:g> อุปกรณ์"</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> จะถูกยกเลิกการปล่อยสัญญาณ"</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"ใช้ฮอตสปอตและการเชื่อมต่อผ่านมือถือเพื่อให้อุปกรณ์อื่นๆ ใช้อินเทอร์เน็ตผ่านการเชื่อมต่ออินเทอร์เน็ตมือถือได้ แอปสามารถสร้างฮอตสปอตเพื่อแชร์เนื้อหากับอุปกรณ์ที่อยู่ใกล้ได้ด้วย"</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"ใช้ฮอตสปอตและการเชื่อมต่ออินเทอร์เน็ตผ่านมือถือ เพื่อให้อุปกรณ์อื่นๆ ใช้อินเทอร์เน็ตจากการเชื่อมต่อข้อมูลผ่านมือถือได้ และแอปยังสามารถสร้างฮอตสปอตเพื่อแชร์เนื้อหากับอุปกรณ์ที่อยู่ใกล้เคียงได้อีกด้วย"</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"ความช่วยเหลือ"</string>
<string name="network_settings_title" msgid="2876509814832830757">"เครือข่ายมือถือ"</string>
- <string name="manage_mobile_plan_title" msgid="7630170375010107744">"แพคเกจอินเทอร์เน็ต"</string>
+ <string name="manage_mobile_plan_title" msgid="7630170375010107744">"แพ็กเกจอินเทอร์เน็ต"</string>
<string name="sms_application_title" msgid="4903928270533250448">"แอป SMS"</string>
<string name="sms_change_default_dialog_title" msgid="1958688831875804286">"เปลี่ยนแอป SMS ไหม"</string>
<string name="sms_change_default_dialog_text" msgid="1522783933230274787">"ใช้ <xliff:g id="NEW_APP">%1$s</xliff:g> เป็นแอป SMS ของคุณแทน <xliff:g id="CURRENT_APP">%2$s</xliff:g> ไหม"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"กำลังโหลด…"</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"ข้อมูลความปลอดภัย"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"ข้อมูลความปลอดภัย"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"คุณไม่มีการเชื่อมต่อข้อมูล หากต้องการดูข้อมูลนี้ในขณะนี้ ให้ไปที่ %s จากคอมพิวเตอร์เครื่องใดก็ได้ที่เชื่อมต่อกับอินเทอร์เน็ต"</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"คุณไม่มีการเชื่อมต่อข้อมูล หากต้องการดูข้อมูลตอนนี้ ให้ไปที่ %s จากคอมพิวเตอร์ที่เชื่อมต่อกับอินเทอร์เน็ต"</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"กำลังโหลด…"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"ตั้งค่าการล็อกหน้าจอ"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"ตั้งรหัสผ่านเพื่อความปลอดภัย"</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"รายละเอียดแอป"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"ติดตั้งแอปจาก <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"ดูข้อมูลเพิ่มเติมใน <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"การทำงานของแอป"</string>
<string name="app_ops_running" msgid="7706949900637284122">"กำลังดำเนินการ"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(ไม่เคยใช้)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"ไม่มีแอปเริ่มต้น"</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"ภาษาและการป้อนข้อมูล"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"คุณไม่มีสิทธิ์เปลี่ยนภาษาของอุปกรณ์"</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"ภาษาและการป้อนข้อมูล"</string>
<string name="input_assistance" msgid="7577795275222555487">"ความช่วยเหลือในการป้อนข้อมูล"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"แป้นพิมพ์และวิธีการป้อนข้อมูล"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"บริการ"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"ระยะเวลา"</string>
<string name="mem_details_title" msgid="6548392825497290498">"รายละเอียดหน่วยความจำ"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"สถานะหน่วยความจำ"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"การใช้หน่วยความจำ"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"เคอร์เนล"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"ในเครื่อง"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"แคชของเคอร์เนล"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"การสลับ ZRam"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"ว่าง"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"รวม"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3 ชั่วโมง"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6 ชั่วโมง"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"12 ชั่วโมง"</string>
@@ -2492,8 +2499,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"ลืม VPN"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"แทนที่ VPN ที่มีอยู่หรือไม่"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"ตั้งค่า VPN แบบเปิดตลอดเวลาหรือไม่"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"เมื่อเปิดการตั้งค่านี้ คุณจะไม่มีการเชื่อมต่ออินเทอร์เน็ตจนกว่า VPN จะเชื่อมต่อสำเร็จ"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"ระบบจะแทนที่ VPN ที่มีอยู่และคุณจะไม่มีการเชื่อมต่ออินเทอร์เน็ตจนกว่า VPN จะเชื่อมต่อสำเร็จ"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"เมื่อเปิดการตั้งค่านี้ คุณจะไม่มีการเชื่อมต่ออินเทอร์เน็ตจนกว่า VPN จะเชื่อมต่อสำเร็จ"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"ระบบจะแทนที่ VPN ที่มีอยู่และคุณจะไม่มีการเชื่อมต่ออินเทอร์เน็ตจนกว่า VPN จะเชื่อมต่อสำเร็จ"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"คุณเชื่อมต่ออยู่กับ VPN แบบเปิดตลอดเวลาแล้ว หากเชื่อมต่อรายการอื่น ระบบจะแทนที่ VPN ที่มีอยู่และปิดโหมดเปิดตลอดเวลา"</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"คุณเชื่อมต่ออยู่กับ VPN แล้ว หากเชื่อมต่อรายการอื่น ระบบจะแทนที่ VPN ที่มีอยู่"</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"เปิด"</string>
@@ -2720,6 +2727,8 @@
<string name="color_purple" msgid="3888532466427762504">"ม่วง"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"ไม่ได้เสียบซิมการ์ด"</string>
<string name="sim_status_title" msgid="6744870675182447160">"สถานะซิม"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"โทรกลับจากซิมเริ่มต้น"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"ซิมสำหรับการโทรออก"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"การตั้งค่าการโทรอื่นๆ"</string>
@@ -2733,13 +2742,15 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"ซิมที่แนะนำสำหรับ"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"ถามทุกครั้ง"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"ต้องเลือก"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"การตั้งค่า"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="other">แสดงรายการที่ซ่อน %d รายการ</item>
<item quantity="one">แสดงรายการที่ซ่อน %d รายการ</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"ยุบ"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"เครือข่ายและอินเทอร์เน็ต"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"เครือข่ายและอินเทอร์เน็ต"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"มือถือ"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ปริมาณการใช้อินเทอร์เน็ต"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"ฮอตสปอต"</string>
@@ -2799,6 +2810,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"ชำระเงิน แตะ การชำระเงิน"</string>
<string name="keywords_backup" msgid="470070289135403022">"ข้อมูลสำรอง, สำรองข้อมูล"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"ท่าทางสัมผัส"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"ตั้งค่าแท็ก NFC สำหรับ Wi-Fi"</string>
<string name="write_tag" msgid="8571858602896222537">"เขียน"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"แตะแท็กเพื่อเขียน..."</string>
@@ -2836,10 +2855,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"การแจ้งเตือน"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"สั่น"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"เสียงเปิดเครื่อง"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"ไม่ได้เปิดกฎอัตโนมัติ"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="other">เปิดกฎอัตโนมัติแล้ว <xliff:g id="ON_COUNT">%d</xliff:g> รายการ</item>
- <item quantity="one">เปิดกฎอัตโนมัติแล้ว 1 รายการ</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"ไม่เลย"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="other">กฎ <xliff:g id="ON_COUNT">%d</xliff:g> ข้อ</item>
+ <item quantity="one">กฎ 1 ข้อ</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"ห้ามรบกวน"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ลักษณะการทำงาน"</string>
@@ -2847,9 +2866,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"ไม่มีเสียง"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"ไม่มีเสียง (ปิดเสียงทั้งหมด)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"ไม่มีเสียง ยกเว้น<xliff:g id="CATEGORIES">%1$s</xliff:g>"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"กฎอัตโนมัติ"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"ไม่มีเสียง ยกเว้นการปลุก สื่อ และเสียงของระบบ (เฉพาะปลุกเท่านั้น)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"เปิดอัตโนมัติ"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"กฎอัตโนมัติ"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"ตั้งกฎห้ามรบกวน"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"จำกัดเสียงและการสั่นในบางเวลา"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"เฉพาะเรื่องสำคัญ"</string>
@@ -2857,6 +2876,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"ปิดเสียงทั้งหมด"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"บล็อกสิ่งรบกวนการมองเห็น"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"อนุญาตสัญญาณที่มองเห็น"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"เพิ่ม"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"เสียงในโปรไฟล์งาน"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"ใช้เสียงในโปรไฟล์ส่วนตัว"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"เสียงในโปรไฟล์งานและโปรไฟล์ส่วนตัวเหมือนกัน"</string>
@@ -2983,7 +3018,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"ชื่อกฎ"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"ป้อนชื่อกฎ"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"มีการใช้ชื่อกฎนี้แล้ว"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"เพิ่มอีก"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"เพิ่มกฎ"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"เพิ่มกฎของกิจกรรม"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"เพิ่มกฎเวลา"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"ลบกฎ"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"เลือกประเภทของกฎ"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"ลบกฎ \"<xliff:g id="RULE">%1$s</xliff:g>\" ใช่ไหม"</string>
@@ -2991,9 +3028,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"ประเภทของกฎ"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"ไม่ทราบ"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"กำหนดค่ากฎ"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"กฎเวลา"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"เวลา"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"ตั้งค่ากฎอัตโนมัติเพื่อเปิดสถานะ \"ห้ามรบกวน\" ในช่วงเวลาที่ระบุ"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"กฎเหตุการณ์"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"กิจกรรม"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"ตั้งค่ากฎอัตโนมัติเพื่อเปิดสถานะ \"ห้ามรบกวน\" ในช่วงเหตุการณ์ที่ระบุ"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"ในช่วงกิจกรรมต่างๆ ของ"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"ในช่วงกิจกรรมต่างๆ ของ<xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
@@ -3024,8 +3061,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"จากรายชื่อติดต่อที่ติดดาวเท่านั้น"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"ไม่มี"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"การปลุก"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"เสียงของสื่อและระบบ"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"การช่วยเตือน"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"กิจกรรม"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"ผู้โทรทั้งหมด"</string>
@@ -3050,15 +3086,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"เปลี่ยนเป็นเฉพาะปลุกเท่านั้นจนถึง <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"เปลี่ยนเป็นรบกวนได้เสมอ"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"บล็อกเมื่อหน้าจอเปิดอยู่"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"ป้องกันไม่ให้การแจ้งเตือนที่ปิดไว้โดย \"ห้ามรบกวน\" แจ้งหรือแสดงบนหน้าจอ"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"บล็อกเมื่อหน้าจอปิดอยู่"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"ป้องกันไม่ให้การแจ้งเตือนที่ปิดไว้โดย \"ห้ามรบกวน\" เปิดหน้าจอหรือกะพริบไฟแจ้งเตือน"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"ป้องกันการแจ้งเตือนที่ปิดเสียงโดย \"ห้ามรบกวน\" ไม่ให้เปิดหน้าจอ"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"ปิด"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"เมื่อหน้าจอเปิดอยู่"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"เมื่อหน้าจอปิดอยู่"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"เมื่อหน้าจอเปิดหรือปิดอยู่"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"เมื่อหน้าจอเปิดอยู่"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"อนุญาตให้การแจ้งเตือนที่ปิดเสียงโดย \"ห้ามรบกวน\" ปรากฏขึ้นในหน้าจอ"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"เมื่อหน้าจอปิดอยู่"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"อนุญาตให้การแจ้งเตือนที่ปิดเสียงโดย \"ห้ามรบกวน\" เปิดหน้าจอและกะพริบไฟ"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"อนุญาตให้การแจ้งเตือนที่ปิดเสียงโดย \"ห้ามรบกวน\" เปิดหน้าจอ"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"การตั้งค่าการแจ้งเตือน"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"ตกลง"</string>
<string name="device_feedback" msgid="3238056036766293294">"ส่งความคิดเห็นเกี่ยวกับอุปกรณ์นี้"</string>
@@ -3378,7 +3410,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"ฮอตสปอตเปิดอยู่"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"Wi-Fi ฮอตสปอตแบบพกพา <xliff:g id="ID_1">%1$s</xliff:g> ทำงานอยู่ Wi-Fi ของอุปกรณ์เครื่องนี้ปิดอยู่"</string>
<string name="condition_airplane_title" msgid="287356299107070503">"โหมดบนเครื่องบินเปิดอยู่"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"Wi-Fi, บลูทูธ และเครือข่ายมือถือปิดอยู่ คุณไม่สามารถโทรออกหรือเชื่อมต่ออินเทอร์เน็ต"</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"Wi-Fi, บลูทูธ และเครือข่ายมือถือปิดอยู่ คุณจะโทรออกหรือเชื่อมต่ออินเทอร์เน็ตไม่ได้"</string>
<string name="condition_zen_title" msgid="2679168532600816392">"เปิดการห้ามรบกวนอยู่ (<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"เปิดโหมดประหยัดแบตเตอรี่อยู่"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"ประสิทธิภาพลดลง ปิดบริการตำแหน่งและข้อมูลแบ็กกราวด์แล้ว"</string>
@@ -3410,8 +3442,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"การตรวจสอบการเชื่อมต่อ"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"การตรวจสอบการเชื่อมต่อจะรวบรวมบันทึกเมื่อตรวจพบปัญหาด้านการเชื่อมต่อและแจ้งเตือนให้ผู้ใช้ส่งข้อบกพร่อง"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"เริ่มต้นอุปกรณ์ใหม่เพื่อให้การเปลี่ยนแปลงการตรวจสอบการเชื่อมต่อมีผล"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"HAL HDR+ ของกล้อง"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"เริ่มต้นอุปกรณ์ใหม่เพื่อให้การเปลี่ยนแปลง HAL HDR+ ของกล้องมีผล"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"เซ็นเซอร์เลเซอร์ของกล้อง"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"การอัปเดตระบบอัตโนมัติ"</string>
<string name="usage" msgid="2977875522080448986">"การใช้งาน"</string>
@@ -3561,13 +3591,6 @@
<item quantity="one">1 วินาที</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"รอ ~<xliff:g id="ESTIMATE">%1$s</xliff:g>"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"คอมพิวเตอร์"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"ชุดหูฟัง"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"โทรศัพท์"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"การถ่ายภาพ"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"หูฟัง"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"อุปกรณ์อินพุต"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"บลูทูธ"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"จัดการพื้นที่เก็บข้อมูล"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"ตัวจัดการพื้นที่เก็บข้อมูลจะนำรูปภาพและวิดีโอที่สำรองไว้ออกจากอุปกรณ์ของคุณ เพื่อช่วยเพิ่มพื้นที่เก็บข้อมูล"</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"นำรูปภาพและวิดีโอออก"</string>
@@ -3602,6 +3625,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"หากต้องการดูเวลา ไอคอนการแจ้งเตือน และข้อมูลอื่นๆ ให้หยิบอุปกรณ์ขึ้นมา"</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"ดูการแจ้งเตือนเมื่อหน้าจอปิดอยู่"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"ใช้ลายนิ้วมือแสดงการแจ้งเตือน"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"ลากนิ้วสแกนลายนิ้วมือ"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"ในการตรวจสอบการแจ้งเตือน ให้เลื่อนนิ้วลงผ่านเซ็นเซอร์ลายนิ้วมือที่ด้านหลังโทรศัพท์"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"ในการตรวจสอบการแจ้งเตือน ให้เลื่อนนิ้วลงผ่านเซ็นเซอร์ลายนิ้วมือที่ด้านหลังแท็บเล็ต"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"ในการตรวจสอบการแจ้งเตือน ให้เลื่อนนิ้วลงผ่านเซ็นเซอร์ลายนิ้วมือที่ด้านหลังอุปกรณ์"</string>
@@ -3610,9 +3634,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"เปิด"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"ปิด"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"ปลดล็อก Bootloader แล้ว"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"เชื่อมต่ออินเทอร์เน็ตก่อน"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"เชื่อมต่ออินเทอร์เน็ตหรือติดต่อผู้ให้บริการ"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"เชื่อมต่ออินเทอร์เน็ตก่อน"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"เชื่อมต่ออินเทอร์เน็ตหรือติดต่อผู้ให้บริการ"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"ไม่พร้อมให้บริการสำหรับอุปกรณ์ที่ล็อกผู้ให้บริการไว้"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"โปรดรีสตาร์ทอุปกรณ์เพื่อเปิดใช้ฟีเจอร์การคุ้มครองอุปกรณ์"</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"มีพื้นที่เพิ่มขึ้น <xliff:g id="SIZE">%1$s</xliff:g>\n\n ใช้ล่าสุดเมื่อวันที่ <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"Instant Apps"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"เปิดลิงก์ในแอป แม้ไม่ได้ติดตั้งแอปไว้"</string>
@@ -3720,6 +3745,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>ตรวจดูว่าคุณเชื่อถือแอปนี้ได้</b> <br/> <br/> <xliff:g id=app_name example=Google ป้อนอัตโนมัติ>%1$s</xliff:g> ใช้สิ่งที่อยู่บนหน้าจอเพื่อดูว่าจะป้อนข้อมูลใดโดยอัตโนมัติได้บ้าง"</string>
<string name="device_theme" msgid="4571803018917608588">"ธีมอุปกรณ์"</string>
<string name="default_theme" msgid="7085644992078579076">"ค่าเริ่มต้น"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"ชื่อเครือข่าย"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"แสดงชื่อเครือข่ายในแถบสถานะ"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"ตัวจัดการพื้นที่เก็บข้อมูล: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"ปิด"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"เปิด"</string>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 9ce51aa..f586a1d 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -591,7 +591,7 @@
</plurals>
<string name="lockpassword_password_recently_used" msgid="942665351220525547">"裝置管理員不允許使用最近用過的密碼"</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="680765285206990584">"不允許使用依遞增或遞減順序排列或是重複的一串數字"</string>
- <string name="lockpassword_ok_label" msgid="313822574062553672">"確定"</string>
+ <string name="lockpassword_confirm_label" msgid="8176726201389902380">"確認"</string>
<string name="lockpassword_cancel_label" msgid="8818529276331121899">"取消"</string>
<string name="lockpassword_clear_label" msgid="5724429464960458155">"清除"</string>
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"取消"</string>
@@ -668,16 +668,16 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8635908811168780720">"即將中斷 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 與免持聽筒音訊的連線。"</string>
<string name="bluetooth_disconnect_hid_profile" msgid="3282295189719352075">"即將中斷 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 與輸入裝置的連線。"</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="8037627994382458698">"即將中斷透過 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 取得的網際網路連線。"</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="1262792320446274407">"即將中斷 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 透過這個平板電腦取得的網際網路連線。"</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="5700332050175684571">"即將中斷 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 透過這支手機取得的網際網路連線。"</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8355910926439312604">"即將中斷「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」透過這部平板電腦取得的網際網路連線。"</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6251611115860359886">"即將中斷「<xliff:g id="DEVICE_NAME">%1$s</xliff:g>」透過這支手機取得的網際網路連線。"</string>
<string name="bluetooth_device_advanced_title" msgid="6066342531927499308">"已配對的藍牙裝置"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="3689050071425683114">"連線"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="1204424107263248336">"連接至藍牙裝置"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="102745381968579605">"用於"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="5148578059584955791">"重新命名"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8222550640371627365">"允許接收外來檔案"</string>
- <string name="bluetooth_pan_user_profile_summary_connected" msgid="4602294638909590612">"已連線至裝置並取得網際網路存取權"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1561383706411975199">"與裝置分享本地網際網路連線"</string>
+ <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"已連線至裝置並取得網際網路連線"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"與裝置分享本地網際網路連線"</string>
<string name="bluetooth_dock_settings" msgid="3218335822716052885">"座架設定"</string>
<string name="bluetooth_dock_settings_title" msgid="5543069893044375188">"使用座架播放音訊"</string>
<string name="bluetooth_dock_settings_headset" msgid="1001821426078644650">"當成手機喇叭"</string>
@@ -730,8 +730,8 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="7247227922074840445">"Wi-Fi 掃描已關閉,因此無法使用"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="108339002136866897">"如要使用這項功能,請選取網路評分供應商"</string>
<string name="wifi_poor_network_detection" msgid="4925789238170207169">"避開品質不佳的連線"</string>
- <string name="wifi_poor_network_detection_summary" msgid="2784135142239546291">"除非 Wi-Fi 網路連線狀態良好,否則不使用"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="4674423884870027498">"僅使用網際網路連線品質穩定的網路"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="7016103106105907127">"除非 Wi-Fi 網路連線狀態良好,否則不使用"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1644292503152790501">"僅使用網際網路連線品質穩定的網路"</string>
<string name="use_open_wifi_automatically_title" msgid="6851951242903078588">"連線至開放網路"</string>
<string name="use_open_wifi_automatically_summary" msgid="2982091714252931713">"自動連線至高品質的公用網路"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="593964217679325831">"如要使用這項功能,請選取網路評分供應商"</string>
@@ -747,9 +747,9 @@
<string name="wifi_suspend_optimizations" msgid="1220174276403689487">"Wi-Fi 最佳化"</string>
<string name="wifi_suspend_optimizations_summary" msgid="4151428966089116856">"開啟 Wi-Fi 時儘可能節約電池用量"</string>
<string name="wifi_limit_optimizations_summary" msgid="9000801068363468950">"限制 Wi-Fi 用電量"</string>
- <string name="wifi_switch_away_when_unvalidated" msgid="1707247692180853058">"Wi-Fi 網路無法連線時,切換到行動數據。"</string>
+ <string name="wifi_switch_away_when_unvalidated" msgid="8593144541347373394">"Wi-Fi 網路無法連線時,切換到行動數據。"</string>
<string name="wifi_cellular_data_fallback_title" msgid="8753386877755616476">"自動切換到行動網路"</string>
- <string name="wifi_cellular_data_fallback_summary" msgid="6375399280719867214">"當 Wi-Fi 功能無法連上網際網路時,使用行動數據 (可能會增加數據用量)。"</string>
+ <string name="wifi_cellular_data_fallback_summary" msgid="1403505355490119307">"當 Wi-Fi 功能無法連上網際網路時,使用行動數據 (可能會增加數據用量)。"</string>
<string name="wifi_add_network" msgid="6234851776910938957">"新增網路"</string>
<string name="wifi_configure_settings_preference_title" msgid="2913345003906899146">"Wi‑Fi 偏好設定"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="646393113104367290">"Wi‑Fi 會自動重新開啟"</string>
@@ -833,9 +833,9 @@
<string name="wifi_hotspot_title" msgid="7726205804813286950">"註冊並連線?"</string>
<string name="wifi_hotspot_message" msgid="3673833421453455747">"你必須先為 <xliff:g id="APP_NAME">%1$s</xliff:g> 進行線上註冊才能連線上網。"</string>
<string name="wifi_hotspot_connect" msgid="5065506390164939225">"連線"</string>
- <string name="no_internet_access_text" msgid="7133561752896706392">"這個網路沒有網際網路連線。要繼續保持連線嗎?"</string>
+ <string name="no_internet_access_text" msgid="5926979351959279577">"這個網路沒有網際網路連線。要繼續保持連線嗎?"</string>
<string name="no_internet_access_remember" msgid="4697314331614625075">"不要再詢問我是否使用這個網路"</string>
- <string name="lost_internet_access_title" msgid="6228530645663584505">"Wi-Fi 無法連上網際網路"</string>
+ <string name="lost_internet_access_title" msgid="5779478650636392426">"Wi-Fi 無法連上網際網路"</string>
<string name="lost_internet_access_text" msgid="9029649339816197345">"當 Wi-Fi 網路連線品質不佳時,你可以切換成行動網路 (可能需要支付數據傳輸費用)。"</string>
<string name="lost_internet_access_switch" msgid="2262459569601190039">"切換到行動網路"</string>
<string name="lost_internet_access_cancel" msgid="338273139419871110">"保持開啟 Wi‑Fi"</string>
@@ -856,7 +856,7 @@
<string name="wifi_advanced_titlebar" msgid="4485841401774142908">"進階 Wi-Fi"</string>
<string name="wifi_advanced_mac_address_title" msgid="6571335466330978393">"MAC 位址"</string>
<string name="wifi_advanced_ip_address_title" msgid="6215297094363164846">"IP 位址"</string>
- <string name="wifi_details_title" msgid="3471132676909349382">"網路資訊"</string>
+ <string name="wifi_details_title" msgid="8954667664081737098">"網路詳細資料"</string>
<string name="wifi_details_subnet_mask" msgid="6720279144174924410">"子網路遮罩"</string>
<string name="wifi_details_dns" msgid="8648826607751830768">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="6734119149106422148">"IPv6 位址"</string>
@@ -890,16 +890,16 @@
<string name="wifi_p2p_cancel_connect_message" msgid="7477756213423749402">"你要取消 <xliff:g id="PEER_NAME">%1$s</xliff:g> 的連線邀請?"</string>
<string name="wifi_p2p_delete_group_message" msgid="834559380069647086">"刪除這個群組?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="7763495093333664887">"Wi‑Fi 無線基地台"</string>
- <string name="wifi_hotspot_off_subtext" msgid="5466126533609394170">"目前沒有與其他裝置分享網際網路或內容"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5752490509369962007">"正在透過無線基地台分享這部平板電腦的網際網路連線"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="6461075246164300670">"正在透過無線基地台分享這支手機的網際網路連線"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="2068110388011294735">"應用程式正在分享內容。如要分享網際網路連線,請關閉無線基地台並重新開啟"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="2199911382555864644">"目前沒有與其他裝置分享網際網路或內容"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="5936710887156133458">"正在透過無線基地台分享這部平板電腦的網際網路連線"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="5556202634866621632">"正在透過無線基地台分享這支手機的網際網路連線"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="5017191966153008">"應用程式正在分享內容。如要分享網際網路連線,請關閉無線基地台並重新開啟"</string>
<string name="wifi_hotspot_name_title" msgid="8237000746618636778">"無線基地台名稱"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="3378299995508671967">"正在開啟 <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="3888672084861445362">"其他裝置可連線至 <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="8676859981917573801">"無線基地台密碼"</string>
<string name="wifi_hotspot_ap_band_title" msgid="1165801173359290681">"存取點頻帶"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="1203489406068036455">"使用無線基地台建立 Wi‑Fi 網路供其他裝置使用。無線基地台會使用你的行動數據連線提供網際網路。可能需支付額外的行動數據傳輸費用。"</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="4789553667374849566">"使用無線基地台建立 Wi‑Fi 網路供其他裝置使用。無線基地台會使用你的行動數據連線提供網際網路。可能需支付額外的行動數據傳輸費用。"</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="857988412470694109">"應用程式可以建立無線基地台來和鄰近的裝置分享內容。"</string>
<string name="wifi_tether_starting" msgid="1322237938998639724">"正在開啟無線基地台…"</string>
<string name="wifi_tether_stopping" msgid="4835852171686388107">"正在關閉無線基地台…"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"開啟 Wi-Fi 通話功能之後,你的手機可依據你的偏好設定,透過 Wi-Fi 網路或你的行動通訊網路通話 (選擇訊號較強者)。開啟這項功能前,請先與你的電信業者詢問費用與其他細節。"</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"更新緊急地址"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"如果你使用 Wi-Fi 撥打緊急電話,緊急服務會判定你位在這個地址"</string>
+ <string name="emergency_address_title" msgid="932729250447887545">"緊急地址"</string>
+ <string name="emergency_address_summary" msgid="7751971156196115129">"當你透過 Wi‑Fi 網路撥打緊急電話時,系統會判定你位於這個地址"</string>
<string name="display_settings_title" msgid="1708697328627382561">"顯示"</string>
<string name="sound_settings" msgid="5534671337768745343">"音效"</string>
<string name="all_volume_title" msgid="4296957391257836961">"音量"</string>
@@ -1005,7 +1005,10 @@
<string name="search_clear_history" msgid="4196658962573162457">"清除紀錄"</string>
<string name="display_settings" msgid="7965901687241669598">"顯示"</string>
<string name="accelerometer_title" msgid="7854608399547349157">"自動旋轉螢幕"</string>
- <string name="color_mode_title" msgid="3159275920408338215">"鮮明色彩"</string>
+ <string name="color_mode_title" msgid="9186249332902370471">"色彩"</string>
+ <string name="color_mode_option_natural" msgid="5013837483986772758">"自然"</string>
+ <string name="color_mode_option_boosted" msgid="8588223970257287524">"增強"</string>
+ <string name="color_mode_option_saturated" msgid="4569683960058798843">"飽和"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"旋轉平板電腦時自動切換瀏覽模式"</string>
<string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"旋轉手機時自動改變顯示方向"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"旋轉平板電腦時自動切換瀏覽模式"</string>
@@ -1124,8 +1127,10 @@
<string name="system_update_settings_list_item_title" msgid="3342887311059985961">"系統更新"</string>
<string name="system_update_settings_list_item_summary" msgid="3853057315907710747"></string>
<string name="firmware_version" msgid="4801135784886859972">"Android 版本"</string>
+ <string name="firmware_title" msgid="5203122368389157877">"Android"</string>
<string name="security_patch" msgid="8438384045870296634">"Android 安全性修補程式等級"</string>
<string name="model_info" msgid="1952009518045740889">"型號"</string>
+ <string name="model_summary" msgid="8306235877567782987">"型號:%1$s"</string>
<string name="hardware_info" msgid="2605080746512527805">"型號與硬體"</string>
<string name="hardware_revision" msgid="8893547686367095527">"硬體版本"</string>
<string name="fcc_equipment_id" msgid="149114368246356737">"設備 ID"</string>
@@ -1142,11 +1147,21 @@
<string name="storage_settings_title" msgid="8746016738388094064">"儲存設定"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="3543813623294870759">"卸載 USB 儲存裝置、查看可用的儲存空間"</string>
<string name="storage_settings_summary" product="default" msgid="9176693537325988610">"卸載 SD 卡,檢視可用儲存媒體。"</string>
+ <!-- no translation found for imei_multi_sim (6387012961838800539) -->
+ <skip />
<string name="status_number" product="tablet" msgid="1138837891091222272">"MDN"</string>
- <string name="status_number" product="default" msgid="5123197324870153205">"我的電話號碼"</string>
+ <string name="status_number" product="default" msgid="5948892105546651296">"電話號碼"</string>
+ <!-- no translation found for status_number_sim_slot (2755592991367858860) -->
+ <skip />
+ <!-- no translation found for status_number_sim_slot (1898212200138025729) -->
+ <skip />
+ <string name="status_number_sim_status" product="tablet" msgid="1367110147304523864">"SIM 卡上的 MDN"</string>
+ <string name="status_number_sim_status" product="default" msgid="9123351360569466330">"SIM 卡上的電話號碼"</string>
<string name="status_min_number" msgid="3519504522179420597">"MIN"</string>
<string name="status_msid_number" msgid="909010114445780530">"MSID"</string>
<string name="status_prl_version" msgid="1007470446618081441">"PRL 版本"</string>
+ <!-- no translation found for meid_multi_sim (748999971744491771) -->
+ <skip />
<string name="status_meid_number" msgid="1751442889111731088">"MEID"</string>
<string name="status_icc_id" msgid="943368755577172747">"ICCID"</string>
<string name="status_network_type" msgid="3279383550222116235">"行動網路類型"</string>
@@ -1256,7 +1271,7 @@
<string name="storage_detail_other" msgid="8404938385075638238">"其他"</string>
<string name="storage_detail_system" msgid="4629506366064709687">"系統"</string>
<string name="storage_detail_explore" msgid="7911344011431568294">"探索「<xliff:g id="NAME">^1</xliff:g>」"</string>
- <string name="storage_detail_dialog_other" msgid="8907101974576694793">"其他檔案包括應用程式所儲存的共用檔案、透過網際網路或藍牙下載的檔案以及 Android 檔案等。\n\n如要查看這個「<xliff:g id="NAME">^1</xliff:g>」中可供檢視的內容,請輕觸 [探索]。"</string>
+ <string name="storage_detail_dialog_other" msgid="8845766044697204852">"其他檔案包括應用程式所儲存的共用檔案、透過網際網路或藍牙下載的檔案以及 Android 檔案等。\n\n如要查看這個「<xliff:g id="NAME">^1</xliff:g>」中可供檢視的內容,請輕觸 [探索]。"</string>
<string name="storage_detail_dialog_system" msgid="862835644848361569">"「系統」中包含用來執行 Android <xliff:g id="VERSION">%s</xliff:g> 版的檔案"</string>
<string name="storage_detail_dialog_user" msgid="3267254783294197804">"<xliff:g id="USER_0">^1</xliff:g> 可能儲存了相片、音樂、應用程式或其他資料 (儲存空間使用量:<xliff:g id="SIZE">^2</xliff:g>)。\n\n如要查看詳細資料,請切換至 <xliff:g id="USER_1">^1</xliff:g>。"</string>
<string name="storage_wizard_init_title" msgid="5085400514028585772">"設定你的「<xliff:g id="NAME">^1</xliff:g>」"</string>
@@ -1382,21 +1397,21 @@
<string name="tether_settings_disabled_on_data_saver" msgid="1576908608463904152">"在數據節省模式開啟的狀態下,無法進行數據連線或使用可攜式無線基地台"</string>
<string name="usb_title" msgid="7483344855356312510">"USB"</string>
<string name="usb_tethering_button_text" msgid="585829947108007917">"USB 網路共用"</string>
- <string name="usb_tethering_subtext" product="default" msgid="5991482890033484794">"透過 USB 分享手機的網際網路連線"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="5988796139573211318">"透過 USB 分享平板電腦的網際網路連線"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="3711893746716442706">"透過 USB 分享手機的網際網路連線"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="2292916486612255069">"透過 USB 分享平板電腦的網際網路連線"</string>
<string name="bluetooth_tether_checkbox_text" msgid="2379175828878753652">"藍牙網路共用"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="4558227863463153412">"透過藍牙分享平板電腦的網際網路連線"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="1055197887836203595">"透過藍牙分享手機的網際網路連線"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="6326877798974938021">"透過藍牙分享這個<xliff:g id="DEVICE_NAME">%1$d</xliff:g>的網際網路連線"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="8828883800511737077">"透過藍牙分享平板電腦的網際網路連線"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="1904667146601254812">"透過藍牙分享手機的網際網路連線"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="376389105752995580">"透過藍牙分享這個「<xliff:g id="DEVICE_NAME">%1$d</xliff:g>」的網際網路連線"</string>
<string name="bluetooth_tethering_overflow_error" msgid="2135590598511178690">"最多只能有 <xliff:g id="MAXCONNECTION">%1$d</xliff:g> 個裝置共用網路。"</string>
<string name="bluetooth_untether_blank" msgid="2871192409329334813">"將中斷 <xliff:g id="DEVICE_NAME">%1$s</xliff:g> 的網路共用。"</string>
- <string name="tethering_footer_info" msgid="1308462275952345985">"使用無線基地台和網路共用功能,透過你的行動數據連線提供網際網路給其他裝置。應用程式也可以建立無線基地台來和鄰近的裝置分享內容。"</string>
+ <string name="tethering_footer_info" msgid="7112228674056306147">"使用無線基地台和網路共用功能,透過你的行動數據連線提供網際網路給其他裝置。應用程式也可以建立無線基地台來和鄰近的裝置分享內容。"</string>
<string name="tethering_help_button_text" msgid="656117495547173630">"說明"</string>
<string name="network_settings_title" msgid="2876509814832830757">"行動網路"</string>
<string name="manage_mobile_plan_title" msgid="7630170375010107744">"行動數據傳輸資費方案"</string>
<string name="sms_application_title" msgid="4903928270533250448">"簡訊應用程式"</string>
<string name="sms_change_default_dialog_title" msgid="1958688831875804286">"變更簡訊應用程式?"</string>
- <string name="sms_change_default_dialog_text" msgid="1522783933230274787">"你要改用 <xliff:g id="NEW_APP">%1$s</xliff:g> 而不再使用 <xliff:g id="CURRENT_APP">%2$s</xliff:g> 做為簡訊應用程式嗎?"</string>
+ <string name="sms_change_default_dialog_text" msgid="1522783933230274787">"你要改用「<xliff:g id="NEW_APP">%1$s</xliff:g>」而不再使用「<xliff:g id="CURRENT_APP">%2$s</xliff:g>」做為簡訊應用程式嗎?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="602683880284921998">"使用 <xliff:g id="NEW_APP">%s</xliff:g> 做為簡訊應用程式嗎?"</string>
<string name="network_scorer_picker_title" msgid="6383879578279046456">"網路評分服務供應商"</string>
<string name="network_scorer_picker_none_preference" msgid="9028375117241790936">"無"</string>
@@ -1465,7 +1480,7 @@
<string name="settings_license_activity_loading" msgid="3337535809093591740">"載入中…"</string>
<string name="settings_safetylegal_title" msgid="1289483965535937431">"安全資訊"</string>
<string name="settings_safetylegal_activity_title" msgid="6901214628496951727">"安全資訊"</string>
- <string name="settings_safetylegal_activity_unreachable" msgid="250674109915859456">"你沒有數據連線,如要立即查看這項資訊,請使用任何已連上網際網路的電腦前往 %s。"</string>
+ <string name="settings_safetylegal_activity_unreachable" msgid="142307697309858185">"你沒有數據連線,如要立即查看這項資訊,請使用任何已連上網際網路的電腦前往 %s。"</string>
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"載入中…"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"設定螢幕鎖定"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"為了安全起見,請設定密碼"</string>
@@ -1671,7 +1686,6 @@
<string name="app_install_details_title" msgid="6905279702654975207">"應用程式詳細資料"</string>
<string name="app_install_details_summary" msgid="6464796332049327547">"應用程式安裝來源:<xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="instant_app_details_summary" msgid="4529934403276907045">"前往「<xliff:g id="APP_STORE">%1$s</xliff:g>」查看詳細資訊"</string>
- <string name="app_ops_settings" msgid="5108481883575527511">"應用程式作業"</string>
<string name="app_ops_running" msgid="7706949900637284122">"執行中"</string>
<string name="app_ops_never_used" msgid="9114608022906887802">"(從未使用)"</string>
<string name="no_default_apps" msgid="2915315663141025400">"沒有任何預設應用程式。"</string>
@@ -1723,6 +1737,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
<string name="language_settings" msgid="8758655933029560944">"語言與輸入設定"</string>
+ <string name="language_empty_list_user_restricted" msgid="5984015900102140696">"你沒有變更裝置語言的權限。"</string>
<string name="language_keyboard_settings_title" msgid="3709159207482544398">"語言與輸入設定"</string>
<string name="input_assistance" msgid="7577795275222555487">"輸入輔助"</string>
<string name="keyboard_settings_category" msgid="8275523930352487827">"鍵盤與輸入法"</string>
@@ -2139,14 +2154,6 @@
<string name="services_subtitle" msgid="4296402367067266425">"服務"</string>
<string name="menu_proc_stats_duration" msgid="2323483592994720196">"時間長度"</string>
<string name="mem_details_title" msgid="6548392825497290498">"記憶體詳細資料"</string>
- <string name="mem_state_subtitle" msgid="2407238869781011933">"記憶體狀態"</string>
- <string name="mem_use_subtitle" msgid="7319468770222422412">"記憶體用量"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"核心"</string>
- <string name="mem_use_native_type" msgid="5976704902328347400">"本機"</string>
- <string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"核心快取"</string>
- <string name="mem_use_zram_type" msgid="9087217476795358232">"ZRam 切換"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"可用"</string>
- <string name="mem_use_total" msgid="6308786055749777934">"總計"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3 小時"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6 小時"</string>
<string name="menu_duration_12h" msgid="7890465404584356294">"12 小時"</string>
@@ -2496,8 +2503,8 @@
<string name="vpn_forget_long" msgid="2232239391189465752">"清除 VPN 設定檔"</string>
<string name="vpn_replace_vpn_title" msgid="2963898301277610248">"要取代現有的 VPN 嗎?"</string>
<string name="vpn_set_vpn_title" msgid="4009987321156037267">"要設定永久連線的 VPN 嗎?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="3025322109743675467">"開啟這項設定後,在 VPN 成功連線之前,你將無法連上網際網路"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="2577928591361606641">"現有的 VPN 會遭到取代,而且在 VPN 成功連線之前,你將無法連上網際網路"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7144543717673197102">"開啟這項設定後,在 VPN 成功連線之前,你將無法連上網際網路"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="798121133114824006">"現有的 VPN 會遭到取代,而且在 VPN 成功連線之前,你將無法連上網際網路"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="3011818750025879902">"你已連線至特定的永久連線 VPN。連線至其他 VPN 將會取代現有的 VPN,並關閉永久連線模式。"</string>
<string name="vpn_replace_vpn_message" msgid="5611635724578812860">"你已連線至特定 VPN。連線至其他 VPN 將會取代現有的 VPN。"</string>
<string name="vpn_turn_on" msgid="2363136869284273872">"開啟"</string>
@@ -2724,6 +2731,8 @@
<string name="color_purple" msgid="3888532466427762504">"紫色"</string>
<string name="sim_no_inserted_msg" msgid="210316755353227087">"尚未插入 SIM 卡"</string>
<string name="sim_status_title" msgid="6744870675182447160">"SIM 卡狀態"</string>
+ <!-- no translation found for sim_status_title_sim_slot (5725659316463979194) -->
+ <skip />
<string name="sim_call_back_title" msgid="5181549885999280334">"使用預設 SIM 卡回撥"</string>
<string name="sim_outgoing_call_title" msgid="1019763076116874255">"用於撥出電話的 SIM 卡"</string>
<string name="sim_other_call_settings" msgid="8247802316114482477">"其他通話設定"</string>
@@ -2737,13 +2746,15 @@
<string name="sim_pref_divider" msgid="6778907671867621874">"適用於以下用途的偏好 SIM 卡"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"每次都詢問"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"請選取偏好設定"</string>
+ <!-- no translation found for sim_selection_channel_title (2760909074892782589) -->
+ <skip />
<string name="dashboard_title" msgid="5453710313046681820">"設定"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="other">顯示 %d 個隱藏項目</item>
<item quantity="one">顯示 %d 個隱藏項目</item>
</plurals>
<string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"收合"</string>
- <string name="network_dashboard_title" msgid="4771589228992391573">"網路和網際網路"</string>
+ <string name="network_dashboard_title" msgid="3135144174846753758">"網路和網際網路"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"行動網路"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"數據用量"</string>
<string name="network_dashboard_summary_hotspot" msgid="8494210248613254574">"無線基地台"</string>
@@ -2803,6 +2814,14 @@
<string name="keywords_payment_settings" msgid="5220104934130446416">"支付、輕觸、付款"</string>
<string name="keywords_backup" msgid="470070289135403022">"備份內容, 備份"</string>
<string name="keywords_assist_gesture_launch" msgid="813968759791342591">"手勢"</string>
+ <!-- no translation found for keywords_imei_info (7230982940217544527) -->
+ <skip />
+ <!-- no translation found for keywords_sim_status (1474422416860990564) -->
+ <skip />
+ <!-- no translation found for keywords_model_and_hardware (1459248377212829642) -->
+ <skip />
+ <!-- no translation found for keywords_android_version (5591055570309015111) -->
+ <skip />
<string name="setup_wifi_nfc_tag" msgid="9028353016222911016">"設定 Wi-Fi NFC 標記"</string>
<string name="write_tag" msgid="8571858602896222537">"寫入"</string>
<string name="status_awaiting_tap" msgid="2130145523773160617">"輕觸標記即可寫入..."</string>
@@ -2840,10 +2859,10 @@
<string name="emergency_tone_alert" msgid="8941852695428130667">"警示"</string>
<string name="emergency_tone_vibrate" msgid="8281126443204950847">"震動"</string>
<string name="boot_sounds_title" msgid="567029107382343709">"啟動音效"</string>
- <string name="zen_mode_settings_summary_off" msgid="1857165567766351925">"沒有開啟任何自動規則"</string>
- <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="1216562765753405784">
- <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> 個自動規則已開啟</item>
- <item quantity="one">1 個自動規則已開啟</item>
+ <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"永不"</string>
+ <plurals name="zen_mode_settings_summary_on" formatted="false" msgid="7346979080337117366">
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> 項規則</item>
+ <item quantity="one">1 項規則</item>
</plurals>
<string name="zen_mode_settings_title" msgid="1066226840983908121">"零打擾"</string>
<string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"行為"</string>
@@ -2851,9 +2870,9 @@
<string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"不發出音效"</string>
<string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"不發出音效 (完全靜音)"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"除了<xliff:g id="CATEGORIES">%1$s</xliff:g>以外一律不發出音效"</string>
- <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
- <skip />
- <string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"自動規則"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="2423480992071472963">"除了鬧鐘、媒體和系統以外一律不發出音效 (僅限鬧鐘)"</string>
+ <string name="zen_mode_automation_settings_title" msgid="2517800938791944915">"自動開啟"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="7069221762714457987">"自動規則"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"設定「零打擾」規則"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"在特定時間禁用音效和震動"</string>
<string name="zen_mode_option_important_interruptions" msgid="3903928008177972500">"僅限優先通知"</string>
@@ -2861,6 +2880,22 @@
<string name="zen_mode_option_no_interruptions" msgid="8107126344850276878">"完全靜音"</string>
<string name="zen_mode_summary_combination" msgid="8715563402849273459">"<xliff:g id="MODE">%1$s</xliff:g>:<xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="6751708745442997940">"封鎖視覺干擾"</string>
+ <string name="zen_mode_visual_signals_settings_subtitle" msgid="6308824824208120508">"允許視覺信號"</string>
+ <string name="zen_mode_add" msgid="90014394953272517">"新增"</string>
+ <!-- no translation found for zen_mode_button_turn_on (5074744714613374902) -->
+ <skip />
+ <!-- no translation found for zen_mode_button_turn_off (1995551537320422792) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_end_time_next_day (3090599225533484203) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_manual_indefinite (2746903915016850399) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule (3856133183910726786) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_app (7112871101701453067) -->
+ <skip />
+ <!-- no translation found for zen_mode_settings_dnd_automatic_rule_multiple (5792308957602984360) -->
+ <skip />
<string name="sound_work_settings" msgid="6774324553228566442">"Work 設定檔音效"</string>
<string name="work_use_personal_sounds_title" msgid="1148331221338458874">"使用個人設定檔音效"</string>
<string name="work_use_personal_sounds_summary" msgid="6207040454949823153">"Work 設定檔和個人設定檔使用相同的音效"</string>
@@ -2987,7 +3022,9 @@
<string name="zen_mode_rule_name" msgid="5149068059383837549">"規則名稱"</string>
<string name="zen_mode_rule_name_hint" msgid="3781174510556433384">"輸入規則名稱"</string>
<string name="zen_mode_rule_name_warning" msgid="4517805381294494314">"規則名稱已在使用中"</string>
- <string name="zen_mode_add_rule" msgid="7459154136384467057">"新增更多"</string>
+ <string name="zen_mode_add_rule" msgid="9100929184624317193">"新增規則"</string>
+ <string name="zen_mode_add_event_rule" msgid="3997335103633946552">"新增活動規則"</string>
+ <string name="zen_mode_add_time_rule" msgid="5002080000597838703">"新增時間規則"</string>
<string name="zen_mode_delete_rule" msgid="2985902330199039533">"刪除規則"</string>
<string name="zen_mode_choose_rule_type" msgid="5423746638871953459">"選擇規則類型"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="6237882294348570283">"要刪除「<xliff:g id="RULE">%1$s</xliff:g>」規則嗎?"</string>
@@ -2995,9 +3032,9 @@
<string name="zen_mode_rule_type" msgid="2289413469580142888">"規則類型"</string>
<string name="zen_mode_rule_type_unknown" msgid="3049377282766700600">"不明"</string>
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"設定規則"</string>
- <string name="zen_schedule_rule_type_name" msgid="142936744435271449">"時間規則"</string>
+ <string name="zen_schedule_rule_type_name" msgid="6163149826036287324">"時間"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"可在指定時間開啟「零打擾」設定的自動規則集"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"活動規則"</string>
+ <string name="zen_event_rule_type_name" msgid="6503468472212606158">"活動"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"可在指定活動期間開啟「零打擾」設定的自動規則集"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"在以下日曆的活動期間:"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"在<xliff:g id="CALENDAR">%1$s</xliff:g>的活動期間"</string>
@@ -3028,8 +3065,7 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"來自已加星號的聯絡人"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"無"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"鬧鐘"</string>
- <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
- <skip />
+ <string name="zen_mode_media_system_other" msgid="8900209390529859777">"媒體和系統音效"</string>
<string name="zen_mode_reminders" msgid="5458502056440485730">"提醒"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"活動"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"所有來電者"</string>
@@ -3054,15 +3090,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="7465525754879341907">"變更為僅允許鬧鐘模式,結束時間為 <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_summary_always" msgid="6172985102689237703">"變更為一律允許干擾模式"</string>
- <string name="zen_mode_screen_on" msgid="7712038508173845101">"螢幕開啟時封鎖"</string>
- <string name="zen_mode_screen_on_summary" msgid="6444425984146305149">"禁止「零打擾」模式設為靜音的通知在螢幕上短暫顯示或彈出"</string>
- <string name="zen_mode_screen_off" msgid="5026854939192419879">"螢幕關閉時封鎖"</string>
- <string name="zen_mode_screen_off_summary" msgid="6490932947651798094">"禁止「零打擾」模式設為靜音的通知開啟螢幕或使用指示燈號"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="3758698381956461866">"「零打擾」模式設為靜音的通知一律不得開啟螢幕"</string>
- <string name="zen_mode_all_visual_interruptions" msgid="2851308980832487411">"關閉"</string>
- <string name="zen_mode_screen_on_visual_interruptions" msgid="7373348148129140528">"螢幕開啟時"</string>
- <string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"螢幕關閉時"</string>
- <string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"螢幕開啟或關閉時"</string>
+ <string name="zen_mode_screen_on" msgid="8774571998575673502">"螢幕開啟時"</string>
+ <string name="zen_mode_screen_on_summary" msgid="5385338884695802115">"允許「零打擾」模式設為靜音的通知在畫面上彈出通知"</string>
+ <string name="zen_mode_screen_off" msgid="3144446765110327937">"螢幕關閉時"</string>
+ <string name="zen_mode_screen_off_summary" msgid="7430034620565812258">"允許「零打擾」模式設為靜音的通知開啟螢幕及閃爍燈光"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="2826121465026642017">"允許「零打擾」模式設為靜音的通知開啟螢幕"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"通知設定"</string>
<string name="suggestion_button_text" msgid="3275010948381252006">"確定"</string>
<string name="device_feedback" msgid="3238056036766293294">"傳送你對這個裝置的意見回饋"</string>
@@ -3382,7 +3414,7 @@
<string name="condition_hotspot_title" msgid="7778958849468560027">"無線基地台已開啟"</string>
<string name="condition_hotspot_summary" msgid="3433182779269409683">"可攜式 Wi-Fi 無線基地台 <xliff:g id="ID_1">%1$s</xliff:g> 已開啟,因此系統關閉了這個裝置的 Wi-Fi。"</string>
<string name="condition_airplane_title" msgid="287356299107070503">"飛航模式已開啟"</string>
- <string name="condition_airplane_summary" msgid="5561586417832393666">"Wi-Fi、藍牙和行動網路都已關閉。你無法撥打電話或連線到網際網路。"</string>
+ <string name="condition_airplane_summary" msgid="3738805058182535606">"Wi-Fi、藍牙和行動網路都已關閉。你無法撥打電話或連線到網際網路。"</string>
<string name="condition_zen_title" msgid="2679168532600816392">"「零打擾」設定已開啟 (<xliff:g id="ID_1">%1$s</xliff:g>)"</string>
<string name="condition_battery_title" msgid="3272131008388575349">"節約耗電量模式已開啟"</string>
<string name="condition_battery_summary" msgid="4418839236027977450">"已降低執行效能,並停用定位服務和背景資料功能。"</string>
@@ -3414,8 +3446,6 @@
<string name="connectivity_monitor_switch" msgid="9059759348648583421">"Connectivity Monitor"</string>
<string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"Connectivity Monitor 會在偵測到連線問題時收集相關紀錄,並顯示通知方便使用者回報錯誤"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"如要套用 Connectivity Monitor 的變更內容,請重新啟動裝置"</string>
- <string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"相機 HAL HDR+"</string>
- <string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"如要套用你對「相機 HAL HDR+」設定所做的變更,請重新啟動裝置"</string>
<string name="camera_laser_sensor_switch" msgid="8913588990743234440">"相機雷射感應器"</string>
<string name="ota_disable_automatic_update" msgid="2319639631655915050">"自動系統更新"</string>
<string name="usage" msgid="2977875522080448986">"使用情況"</string>
@@ -3565,13 +3595,6 @@
<item quantity="one">1 秒</item>
</plurals>
<string name="support_estimated_wait_time" msgid="6523081420029378051">"大約需等候 <xliff:g id="ESTIMATE">%1$s</xliff:g>"</string>
- <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"電腦"</string>
- <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"免持耳機"</string>
- <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"電話"</string>
- <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"顯像裝置"</string>
- <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"頭戴式耳機"</string>
- <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"周邊輸入裝置"</string>
- <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"藍牙"</string>
<string name="automatic_storage_manager_settings" msgid="7819434542155181607">"管理儲存空間"</string>
<string name="automatic_storage_manager_text" msgid="4562950476680600604">"儲存空間管理員會將已備份的相片和影片從裝置中移除,藉此釋出儲存空間。"</string>
<string name="automatic_storage_manager_days_title" msgid="2017913896160914647">"移除相片和影片"</string>
@@ -3606,6 +3629,7 @@
<string name="ambient_display_pickup_summary" product="device" msgid="8256669101643381568">"拿起裝置即可查看時間、通知圖示和其他資訊。"</string>
<string name="ambient_display_pickup_suggestion_summary" msgid="7014700589991761035">"在螢幕關閉時查看通知"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="5816346492253270243">"滑動感應指紋以查看通知"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8562169633234041196">"滑動手指"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="1770661868393713922">"將手指放在手機背面的指紋感應器上並向下滑動,即可查看通知。"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="902719947767712895">"將手指放在平板電腦背面的指紋感應器上並向下滑動,即可查看通知。"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="5372926094116306647">"將手指放在裝置背面的指紋感應器上並向下滑動,即可查看通知。"</string>
@@ -3614,9 +3638,10 @@
<string name="gesture_setting_on" msgid="3455094265233870280">"開啟"</string>
<string name="gesture_setting_off" msgid="5230169535435881894">"關閉"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="4265541229765635629">"開機載入器已解除鎖定"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="415954951226204461">"請先連上網際網路"</string>
- <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="5884723935668892613">"請連上網際網路或與你的電信業者聯絡"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity" msgid="3361344735430813695">"請先連上網際網路"</string>
+ <string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="2479038689567925511">"請連上網際網路或與你的電信業者聯絡"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="4149387448213399630">"綁定特定電信業者服務的裝置無法使用"</string>
+ <string name="oem_lock_info_message" msgid="9218313722236417510">"請重新啟動裝置以啟用裝置保護功能。"</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7517560170441007788">"總共釋出 <xliff:g id="SIZE">%1$s</xliff:g>\n\n上次執行日期:<xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4051513950976670853">"免安裝應用程式"</string>
<string name="web_action_enable_summary" msgid="3108127559723396382">"即使未安裝應用程式,也能在當中開啟連結"</string>
@@ -3724,6 +3749,8 @@
<string name="autofill_confirmation_message" msgid="2784869528908005194">"<b>請確定這是你信任的應用程式</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g>應用程式會根據你的畫面內容判斷要自動填入的內容。"</string>
<string name="device_theme" msgid="4571803018917608588">"裝置主題"</string>
<string name="default_theme" msgid="7085644992078579076">"預設"</string>
+ <string name="show_operator_name_title" msgid="805135053530442951">"網路名稱"</string>
+ <string name="show_operator_name_summary" msgid="5962567590205757550">"在狀態列顯示網路名稱"</string>
<string name="storage_manager_indicator" msgid="1516810749625915020">"儲存空間管理員:<xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="7488057587180724388">"關閉"</string>
<string name="storage_manager_indicator_on" msgid="8625551710194584733">"開啟"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 43827e3..793498e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -394,6 +394,11 @@
<!-- Title for pairing bluetooth device page [CHAR LIMIT=none] -->
<string name="bluetooth_pairing_page_title">Pair new device</string>
+ <!-- Title for connected device group [CHAR LIMIT=none]-->
+ <string name="connected_device_connected_title">Currently connected</string>
+ <!-- Title for connected device group [CHAR LIMIT=none]-->
+ <string name="connected_device_saved_title">Saved devices</string>
+
<!-- Date & time settings screen title -->
<string name="date_and_time">Date & time</string>
<!-- The title of the activity to pick a time zone. -->
diff --git a/res/xml/account_type_settings.xml b/res/xml/account_type_settings.xml
index 31f3f69..29f92ea 100644
--- a/res/xml/account_type_settings.xml
+++ b/res/xml/account_type_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/account_settings_title"
settings:keywords="@string/keywords_accounts">
diff --git a/res/xml/apn_settings.xml b/res/xml/apn_settings.xml
index 86a336c..98b45a1 100644
--- a/res/xml/apn_settings.xml
+++ b/res/xml/apn_settings.xml
@@ -15,6 +15,6 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/apn_settings" android:key="apn_list">
</PreferenceScreen>
diff --git a/res/xml/app_and_notification.xml b/res/xml/app_and_notification.xml
index 3df469b..f08afa8 100644
--- a/res/xml/app_and_notification.xml
+++ b/res/xml/app_and_notification.xml
@@ -17,7 +17,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="apps_and_notification_screen"
android:title="@string/app_and_notification_dashboard_title"
settings:initialExpandedChildrenCount="4">
diff --git a/res/xml/app_default_settings.xml b/res/xml/app_default_settings.xml
index 4d5c9d7..698ab0c 100644
--- a/res/xml/app_default_settings.xml
+++ b/res/xml/app_default_settings.xml
@@ -17,7 +17,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="app_default_settings_screen"
android:title="@string/app_default_dashboard_title">
diff --git a/res/xml/app_list_disclosure_settings.xml b/res/xml/app_list_disclosure_settings.xml
index 1daf15d..0874407 100644
--- a/res/xml/app_list_disclosure_settings.xml
+++ b/res/xml/app_list_disclosure_settings.xml
@@ -16,7 +16,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="app_list_disclosure_settings">
<PreferenceCategory
android:key="dashboard_tile_placeholder"/>
diff --git a/res/xml/app_notification_settings.xml b/res/xml/app_notification_settings.xml
index 00a9142..b21d168 100644
--- a/res/xml/app_notification_settings.xml
+++ b/res/xml/app_notification_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<com.android.settings.applications.LayoutPreference
android:key="pref_app_header"
diff --git a/res/xml/app_ops_permissions_details.xml b/res/xml/app_ops_permissions_details.xml
index c36f44e..743090f 100644
--- a/res/xml/app_ops_permissions_details.xml
+++ b/res/xml/app_ops_permissions_details.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<SwitchPreference
android:key="app_ops_settings_switch" />
diff --git a/res/xml/app_restrictions.xml b/res/xml/app_restrictions.xml
index ddc911d..3515fc1 100644
--- a/res/xml/app_restrictions.xml
+++ b/res/xml/app_restrictions.xml
@@ -16,7 +16,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/application_restrictions"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<Preference
android:key="user_info"
diff --git a/res/xml/backup_settings.xml b/res/xml/backup_settings.xml
index 30792bc..523c2dc 100644
--- a/res/xml/backup_settings.xml
+++ b/res/xml/backup_settings.xml
@@ -16,7 +16,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/privacy_settings_title">
<!-- Backup settings provided by the backup transport or the default settings -->
diff --git a/res/xml/captioning_settings.xml b/res/xml/captioning_settings.xml
index 5ba89cf..3129738 100644
--- a/res/xml/captioning_settings.xml
+++ b/res/xml/captioning_settings.xml
@@ -16,7 +16,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:fragment="com.android.settings.accessibility.CaptionPropertiesFragment"
android:key="captioning_preference_screen"
android:title="@string/accessibility_captioning_title" >
diff --git a/res/xml/channel_notification_settings.xml b/res/xml/channel_notification_settings.xml
index aaadce4..fb2705a 100644
--- a/res/xml/channel_notification_settings.xml
+++ b/res/xml/channel_notification_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings" >
+ xmlns:settings="http://schemas.android.com/apk/res-auto" >
<com.android.settings.applications.LayoutPreference
android:key="pref_app_header"
diff --git a/res/xml/connected_devices.xml b/res/xml/connected_devices.xml
index 3eb62ea..d24dd51 100644
--- a/res/xml/connected_devices.xml
+++ b/res/xml/connected_devices.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
+<!-- Copyright (C) 2017 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.
@@ -19,45 +19,7 @@
android:key="connected_devices_screen"
android:title="@string/connected_devices_dashboard_title">
- <com.android.settings.widget.MasterSwitchPreference
- android:key="toggle_bluetooth"
- android:title="@string/bluetooth_settings_title"
- android:icon="@drawable/ic_settings_bluetooth"
- android:order="-7"/>
-
- <SwitchPreference
- android:key="toggle_nfc"
- android:title="@string/nfc_quick_toggle_title"
- android:icon="@drawable/ic_nfc"
- android:summary="@string/nfc_quick_toggle_summary"
- android:order="-5"/>
-
- <com.android.settingslib.RestrictedPreference
- android:fragment="com.android.settings.nfc.AndroidBeam"
- android:key="android_beam_settings"
- android:title="@string/android_beam_settings_title"
- android:icon="@drawable/ic_android"
- android:order="-4"/>
-
- <Preference
- android:key="sms_mirroring"
- android:title="@string/sms_mirroring_pref"
- android:icon="@drawable/ic_sms_mirroring_24dp"
- android:summary="@string/summary_placeholder"
- android:order="-3"/>
-
- <Preference
- android:key="usb_mode"
- android:title="@string/usb_pref"
- android:icon="@drawable/ic_usb"
- android:order="-2">
- <intent android:action="android.intent.action.MAIN"
- android:targetPackage="com.android.settings"
- android:targetClass="com.android.settings.deviceinfo.UsbModeChooserActivity"/>
- </Preference>
-
<PreferenceCategory
- android:key="dashboard_tile_placeholder"
- android:order="50"/>
-
+ android:key="connected_device_list"
+ android:title="@string/connected_device_connected_title"/>
</PreferenceScreen>
diff --git a/res/xml/connected_devices_old.xml b/res/xml/connected_devices_old.xml
new file mode 100644
index 0000000..3eb62ea
--- /dev/null
+++ b/res/xml/connected_devices_old.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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"
+ android:key="connected_devices_screen"
+ android:title="@string/connected_devices_dashboard_title">
+
+ <com.android.settings.widget.MasterSwitchPreference
+ android:key="toggle_bluetooth"
+ android:title="@string/bluetooth_settings_title"
+ android:icon="@drawable/ic_settings_bluetooth"
+ android:order="-7"/>
+
+ <SwitchPreference
+ android:key="toggle_nfc"
+ android:title="@string/nfc_quick_toggle_title"
+ android:icon="@drawable/ic_nfc"
+ android:summary="@string/nfc_quick_toggle_summary"
+ android:order="-5"/>
+
+ <com.android.settingslib.RestrictedPreference
+ android:fragment="com.android.settings.nfc.AndroidBeam"
+ android:key="android_beam_settings"
+ android:title="@string/android_beam_settings_title"
+ android:icon="@drawable/ic_android"
+ android:order="-4"/>
+
+ <Preference
+ android:key="sms_mirroring"
+ android:title="@string/sms_mirroring_pref"
+ android:icon="@drawable/ic_sms_mirroring_24dp"
+ android:summary="@string/summary_placeholder"
+ android:order="-3"/>
+
+ <Preference
+ android:key="usb_mode"
+ android:title="@string/usb_pref"
+ android:icon="@drawable/ic_usb"
+ android:order="-2">
+ <intent android:action="android.intent.action.MAIN"
+ android:targetPackage="com.android.settings"
+ android:targetClass="com.android.settings.deviceinfo.UsbModeChooserActivity"/>
+ </Preference>
+
+ <PreferenceCategory
+ android:key="dashboard_tile_placeholder"
+ android:order="50"/>
+
+</PreferenceScreen>
diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml
index a26136f..d74e8c2 100644
--- a/res/xml/date_time_prefs.xml
+++ b/res/xml/date_time_prefs.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="date_time_settings_screen"
android:title="@string/date_and_time"
settings:keywords="@string/keywords_date_and_time">
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 932fda5..d1eb366 100644
--- a/res/xml/development_settings.xml
+++ b/res/xml/development_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="development_prefs_screen"
android:title="@string/development_settings_title">
diff --git a/res/xml/device_info_settings_v2.xml b/res/xml/device_info_settings_v2.xml
index bf4b47b..9110131 100644
--- a/res/xml/device_info_settings_v2.xml
+++ b/res/xml/device_info_settings_v2.xml
@@ -17,7 +17,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="device_info_pref_screen"
android:title="@string/about_settings">
diff --git a/res/xml/device_info_storage.xml b/res/xml/device_info_storage.xml
index 19c5982..d5cce39 100644
--- a/res/xml/device_info_storage.xml
+++ b/res/xml/device_info_storage.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/storage_settings"
settings:keywords="@string/keywords_storage">
diff --git a/res/xml/device_info_storage_volume.xml b/res/xml/device_info_storage_volume.xml
index 35435d7..cb02d9a 100644
--- a/res/xml/device_info_storage_volume.xml
+++ b/res/xml/device_info_storage_volume.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/storage_settings"
settings:keywords="@string/keywords_storage">
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index a6efb5c..f9f5d2b 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="display_settings_screen"
android:title="@string/display_settings"
settings:keywords="@string/keywords_display"
diff --git a/res/xml/encryption_and_credential.xml b/res/xml/encryption_and_credential.xml
index 3e3130c..c60c5b5 100644
--- a/res/xml/encryption_and_credential.xml
+++ b/res/xml/encryption_and_credential.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/encryption_and_credential_settings_title"
android:key="encryption_and_credentials_screen">
diff --git a/res/xml/enterprise_privacy_settings.xml b/res/xml/enterprise_privacy_settings.xml
index ffdf630..4fa50e7 100644
--- a/res/xml/enterprise_privacy_settings.xml
+++ b/res/xml/enterprise_privacy_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="enterprise_privacy_settings"
android:title="@string/enterprise_privacy_settings">
diff --git a/res/xml/enterprise_set_default_apps_settings.xml b/res/xml/enterprise_set_default_apps_settings.xml
index b006f46..474a5c9 100644
--- a/res/xml/enterprise_set_default_apps_settings.xml
+++ b/res/xml/enterprise_set_default_apps_settings.xml
@@ -16,7 +16,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="enterprise_set_default_apps_settings">
<PreferenceCategory
android:key="dashboard_tile_placeholder"/>
diff --git a/res/xml/external_sources_details.xml b/res/xml/external_sources_details.xml
index 6bc7390..9e79c10 100644
--- a/res/xml/external_sources_details.xml
+++ b/res/xml/external_sources_details.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/install_other_apps">
<com.android.settingslib.RestrictedSwitchPreference
diff --git a/res/xml/high_power_details.xml b/res/xml/high_power_details.xml
index d0aae54..6eba78e 100644
--- a/res/xml/high_power_details.xml
+++ b/res/xml/high_power_details.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/high_power_apps">
<SwitchPreference
diff --git a/res/xml/language_and_input.xml b/res/xml/language_and_input.xml
index 24006c2..d5bb29c 100644
--- a/res/xml/language_and_input.xml
+++ b/res/xml/language_and_input.xml
@@ -17,7 +17,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="language_and_input_settings_screen"
android:title="@string/language_settings"
settings:initialExpandedChildrenCount="3" >
diff --git a/res/xml/location_settings.xml b/res/xml/location_settings.xml
index 77063bd..96fe905 100644
--- a/res/xml/location_settings.xml
+++ b/res/xml/location_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="location_settings"
android:title="@string/location_settings_title"
settings:keywords="@string/keywords_location">
diff --git a/res/xml/managed_profile_settings.xml b/res/xml/managed_profile_settings.xml
index db3eb41..58fcd88 100644
--- a/res/xml/managed_profile_settings.xml
+++ b/res/xml/managed_profile_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/managed_profile_settings_title">
<SwitchPreference
diff --git a/res/xml/network_and_internet.xml b/res/xml/network_and_internet.xml
index 6dfd06b..bc027d3 100644
--- a/res/xml/network_and_internet.xml
+++ b/res/xml/network_and_internet.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="network_and_internet_screen"
android:title="@string/network_dashboard_title">
diff --git a/res/xml/notification_group_settings.xml b/res/xml/notification_group_settings.xml
index c138197..0d4184d 100644
--- a/res/xml/notification_group_settings.xml
+++ b/res/xml/notification_group_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<com.android.settings.applications.LayoutPreference
android:key="pref_app_header"
diff --git a/res/xml/notification_settings.xml b/res/xml/notification_settings.xml
index b2f1d3d..85952e9 100644
--- a/res/xml/notification_settings.xml
+++ b/res/xml/notification_settings.xml
@@ -15,6 +15,6 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
</PreferenceScreen>
diff --git a/res/xml/other_sound_settings.xml b/res/xml/other_sound_settings.xml
index da67d03..6eca62c 100644
--- a/res/xml/other_sound_settings.xml
+++ b/res/xml/other_sound_settings.xml
@@ -17,7 +17,7 @@
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/other_sound_settings"
android:key="other_sound_settings"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<!-- Dial pad tones -->
<SwitchPreference
diff --git a/res/xml/power_usage_advanced.xml b/res/xml/power_usage_advanced.xml
index 67c7857..b31eb40 100644
--- a/res/xml/power_usage_advanced.xml
+++ b/res/xml/power_usage_advanced.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="power_usage_advanced_screen"
android:title="@string/advanced_battery_title"
settings:keywords="@string/keywords_battery">
diff --git a/res/xml/power_usage_details.xml b/res/xml/power_usage_details.xml
index 86aa4f5..85a2ce7 100644
--- a/res/xml/power_usage_details.xml
+++ b/res/xml/power_usage_details.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<com.android.settings.applications.LayoutPreference
android:key="two_buttons"
diff --git a/res/xml/power_usage_summary.xml b/res/xml/power_usage_summary.xml
index 57195f9..80179c0 100644
--- a/res/xml/power_usage_summary.xml
+++ b/res/xml/power_usage_summary.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="power_usage_summary_screen"
android:title="@string/power_usage_summary_title"
settings:keywords="@string/keywords_battery">
diff --git a/res/xml/print_job_settings.xml b/res/xml/print_job_settings.xml
index 5550478..32a80a7 100644
--- a/res/xml/print_job_settings.xml
+++ b/res/xml/print_job_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/print_print_job">
<Preference
diff --git a/res/xml/print_settings.xml b/res/xml/print_settings.xml
index fe8cac1..75a767a 100644
--- a/res/xml/print_settings.xml
+++ b/res/xml/print_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="print_settings_screen"
android:title="@string/print_settings_title"
settings:keywords="@string/keywords_printing">
diff --git a/res/xml/privacy_settings.xml b/res/xml/privacy_settings.xml
index 715f33b..a25933b 100644
--- a/res/xml/privacy_settings.xml
+++ b/res/xml/privacy_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/privacy_settings_title">
<!-- Backup settings -->
diff --git a/res/xml/reset_dashboard_fragment.xml b/res/xml/reset_dashboard_fragment.xml
index 2761496..1b8dc68 100644
--- a/res/xml/reset_dashboard_fragment.xml
+++ b/res/xml/reset_dashboard_fragment.xml
@@ -17,7 +17,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/reset_dashboard_title"
android:key="reset_dashboard_fragment_screen">
diff --git a/res/xml/security_settings.xml b/res/xml/security_settings.xml
index aa4ca9d..31f2334 100644
--- a/res/xml/security_settings.xml
+++ b/res/xml/security_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_dashboard_page"
android:title="@string/security_settings_title"
settings:initialExpandedChildrenCount="9">
diff --git a/res/xml/security_settings_chooser.xml b/res/xml/security_settings_chooser.xml
index 772057a..360e620 100644
--- a/res/xml/security_settings_chooser.xml
+++ b/res/xml/security_settings_chooser.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_chooser_screen"
android:title="@string/security_settings_title">
diff --git a/res/xml/security_settings_lockscreen.xml b/res/xml/security_settings_lockscreen.xml
index 0d2e3e8..56410fb 100644
--- a/res/xml/security_settings_lockscreen.xml
+++ b/res/xml/security_settings_lockscreen.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_lockscreen_screen"
android:title="@string/security_settings_title">
diff --git a/res/xml/security_settings_lockscreen_profile.xml b/res/xml/security_settings_lockscreen_profile.xml
index 34e6653..a0c3f02 100644
--- a/res/xml/security_settings_lockscreen_profile.xml
+++ b/res/xml/security_settings_lockscreen_profile.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_lockscreen_profile_screen"
android:title="@string/security_settings_title">
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index e9e3bde..26077c7 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_password_screen"
android:title="@string/lock_settings_picker_title">
diff --git a/res/xml/security_settings_password_profile.xml b/res/xml/security_settings_password_profile.xml
index 3e5701d..257b234 100644
--- a/res/xml/security_settings_password_profile.xml
+++ b/res/xml/security_settings_password_profile.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_password_profile_screen"
android:title="@string/security_settings_title">
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index d55d6b8..9b7482f 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_pattern_screen"
android:title="@string/lock_settings_picker_title">
diff --git a/res/xml/security_settings_pattern_profile.xml b/res/xml/security_settings_pattern_profile.xml
index 7387743..e095486 100644
--- a/res/xml/security_settings_pattern_profile.xml
+++ b/res/xml/security_settings_pattern_profile.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_pattern_profile_screen"
android:title="@string/security_settings_title">
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index f7705b7..780ca19 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/lock_settings_picker_title">
<PreferenceCategory
diff --git a/res/xml/security_settings_pin_profile.xml b/res/xml/security_settings_pin_profile.xml
index ae32535..071b2f5 100644
--- a/res/xml/security_settings_pin_profile.xml
+++ b/res/xml/security_settings_pin_profile.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="security_settings_pin_profile_screen"
android:title="@string/security_settings_title">
diff --git a/res/xml/security_settings_profile.xml b/res/xml/security_settings_profile.xml
index 55dd8ef..9870e30 100644
--- a/res/xml/security_settings_profile.xml
+++ b/res/xml/security_settings_profile.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/lock_settings_picker_title">
<PreferenceCategory
diff --git a/res/xml/security_settings_unification.xml b/res/xml/security_settings_unification.xml
index 79b8b7d..43b8b09 100644
--- a/res/xml/security_settings_unification.xml
+++ b/res/xml/security_settings_unification.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/security_settings_title">
<SwitchPreference
diff --git a/res/xml/sim_lock_settings.xml b/res/xml/sim_lock_settings.xml
index 0246ea2..2b823f9 100644
--- a/res/xml/sim_lock_settings.xml
+++ b/res/xml/sim_lock_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/sim_lock_settings">
<SwitchPreference
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index db88a8f..616a08c 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/sound_settings"
android:key="sound_settings"
settings:keywords="@string/keywords_sounds"
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index f6617db..6adfc93 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="special_app_access_screen"
android:title="@string/special_access">
diff --git a/res/xml/storage_dashboard_fragment.xml b/res/xml/storage_dashboard_fragment.xml
index 3ed9c37..22d3d4c 100644
--- a/res/xml/storage_dashboard_fragment.xml
+++ b/res/xml/storage_dashboard_fragment.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="storage_dashboard_screen"
android:title="@string/storage_settings"
android:orderingFromXml="false">
diff --git a/res/xml/user_and_accounts_settings.xml b/res/xml/user_and_accounts_settings.xml
index 354d9e9..7f82f43 100644
--- a/res/xml/user_and_accounts_settings.xml
+++ b/res/xml/user_and_accounts_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="user_and_account_settings_screen"
android:title="@string/account_dashboard_title"
settings:keywords="@string/keywords_accounts">
diff --git a/res/xml/user_details_settings.xml b/res/xml/user_details_settings.xml
index 44ec064..09154c4 100644
--- a/res/xml/user_details_settings.xml
+++ b/res/xml/user_details_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<SwitchPreference
android:key="enable_calling"
diff --git a/res/xml/user_settings.xml b/res/xml/user_settings.xml
index 7dc3d4e..cf68344 100644
--- a/res/xml/user_settings.xml
+++ b/res/xml/user_settings.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/user_settings_title">
<PreferenceCategory
diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml
index 79f1fc2..e18a074 100644
--- a/res/xml/vpn_app_management.xml
+++ b/res/xml/vpn_app_management.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+ xmlns:settings="http://schemas.android.com/apk/res-auto">
<Preference
android:key="version"
diff --git a/res/xml/wifi_configure_settings.xml b/res/xml/wifi_configure_settings.xml
index 322e2a5..e58d319 100644
--- a/res/xml/wifi_configure_settings.xml
+++ b/res/xml/wifi_configure_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="wifi_configure_settings_screen"
android:title="@string/wifi_configure_settings_preference_title">
diff --git a/res/xml/wifi_settings.xml b/res/xml/wifi_settings.xml
index a33f77b..e391bcd 100644
--- a/res/xml/wifi_settings.xml
+++ b/res/xml/wifi_settings.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/wifi_settings"
settings:keywords="@string/keywords_wifi">
diff --git a/res/xml/zen_mode_behavior_settings.xml b/res/xml/zen_mode_behavior_settings.xml
index 7b5ed91..2536828 100644
--- a/res/xml/zen_mode_behavior_settings.xml
+++ b/res/xml/zen_mode_behavior_settings.xml
@@ -17,7 +17,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
android:key="zen_mode_behavior_settings_page"
android:title="@string/zen_mode_behavior_settings_title"
settings:initialExpandedChildrenCount="7">
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index e5c3e06..c791775 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -84,7 +84,7 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
- if (FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2)) {
+ if (FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2) || true) {
// Increase the number of children when the device contains more than 1 sim.
final TelephonyManager telephonyManager = (TelephonyManager) getSystemService(
Context.TELEPHONY_SERVICE);
@@ -112,7 +112,7 @@
@Override
protected int getPreferenceScreenResId() {
- return FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2)
+ return FeatureFlagUtils.isEnabled(getContext(), DEVICE_INFO_V2) || true
? R.xml.device_info_settings_v2 : R.xml.device_info_settings;
}
@@ -149,7 +149,7 @@
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Activity activity, Fragment fragment, Lifecycle lifecycle) {
- if (FeatureFlagUtils.isEnabled(context, DEVICE_INFO_V2)) {
+ if (FeatureFlagUtils.isEnabled(context, DEVICE_INFO_V2) || true) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
// Device name
@@ -213,7 +213,8 @@
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.device_info_settings;
+ sir.xmlResId = FeatureFlagUtils.isEnabled(context, DEVICE_INFO_V2) || true
+ ? R.xml.device_info_settings_v2 : R.xml.device_info_settings;
return Arrays.asList(sir);
}
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 53cc046..da35c4b 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -16,7 +16,7 @@
package com.android.settings;
-import static com.android.settings.core.FeatureFlags.DEV_OPTION_V1;
+import static com.android.settings.core.FeatureFlags.CONNECTED_DEVICE_V2;
import android.os.Bundle;
import android.util.FeatureFlagUtils;
@@ -60,16 +60,6 @@
public static class HighPowerApplicationsActivity extends SettingsActivity { /* empty */ }
public static class BackgroundCheckSummaryActivity extends SettingsActivity { /* empty */ }
public static class StorageUseActivity extends SettingsActivity { /* empty */ }
-
- /**
- * @deprecated in favor of {@link DevelopmentSettingsDashboardActivity}.
- */
- @Deprecated
- public static class DevelopmentSettingsActivity extends SettingsActivity {
- public static final boolean isEnabled() {
- return FeatureFlagUtils.isEnabled(null /* context */, DEV_OPTION_V1);
- }
- }
public static class DevelopmentSettingsDashboardActivity extends SettingsActivity { /* empty */ }
public static class AccessibilitySettingsActivity extends SettingsActivity { /* empty */ }
public static class CaptioningSettingsActivity extends SettingsActivity { /* empty */ }
@@ -178,7 +168,12 @@
// Top level categories for new IA
public static class NetworkDashboardActivity extends SettingsActivity {}
- public static class ConnectedDeviceDashboardActivity extends SettingsActivity {}
+ public static class ConnectedDeviceDashboardActivity extends SettingsActivity {
+ public static final boolean isEnabled() {
+ return FeatureFlagUtils.isEnabled(null /* context */, CONNECTED_DEVICE_V2);
+ }
+ }
+ public static class ConnectedDeviceDashboardActivityOld extends SettingsActivity {}
public static class AppAndNotificationDashboardActivity extends SettingsActivity {}
public static class StorageDashboardActivity extends SettingsActivity {}
public static class UserAndAccountDashboardActivity extends SettingsActivity {}
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index f1c2a0a..60d16ff 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -55,7 +55,6 @@
import com.android.settings.Settings.WifiSettingsActivity;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.backup.BackupSettingsActivity;
-import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.gateway.SettingsGateway;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.core.instrumentation.SharedPreferencesLogger;
@@ -790,6 +789,21 @@
Utils.isBandwidthControlEnabled() /* enabled */,
isAdmin) || somethingChanged;
+ final boolean isConnectedDeviceV2Enabled =
+ Settings.ConnectedDeviceDashboardActivity.isEnabled();
+ // Enable new connected page if v2 enabled
+ somethingChanged = setTileEnabled(
+ new ComponentName(packageName,
+ Settings.ConnectedDeviceDashboardActivity.class.getName()),
+ isConnectedDeviceV2Enabled && !UserManager.isDeviceInDemoMode(this) /* enabled */,
+ isAdmin) || somethingChanged;
+ // Enable old connected page if v2 disabled
+ somethingChanged = setTileEnabled(
+ new ComponentName(packageName,
+ Settings.ConnectedDeviceDashboardActivityOld.class.getName()),
+ !isConnectedDeviceV2Enabled && !UserManager.isDeviceInDemoMode(this) /* enabled */,
+ isAdmin) || somethingChanged;
+
somethingChanged = setTileEnabled(new ComponentName(packageName,
Settings.SimSettingsActivity.class.getName()),
Utils.showSimCardTile(this), isAdmin)
@@ -811,11 +825,6 @@
|| somethingChanged;
somethingChanged = setTileEnabled(new ComponentName(packageName,
- Settings.ConnectedDeviceDashboardActivity.class.getName()),
- !UserManager.isDeviceInDemoMode(this), isAdmin)
- || somethingChanged;
-
- somethingChanged = setTileEnabled(new ComponentName(packageName,
Settings.DateTimeSettingsActivity.class.getName()),
!UserManager.isDeviceInDemoMode(this), isAdmin)
|| somethingChanged;
@@ -827,16 +836,10 @@
final boolean showDev = DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(this)
&& !um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
- final boolean useDevOptionV1 = Settings.DevelopmentSettingsActivity.isEnabled();
- // Enable old Dev option if v2 is disabled
- somethingChanged = setTileEnabled(new ComponentName(packageName,
- Settings.DevelopmentSettingsActivity.class.getName()),
- showDev && useDevOptionV1, isAdmin)
- || somethingChanged;
- // Enable new Dev option if v2 is enable
+
somethingChanged = setTileEnabled(new ComponentName(packageName,
Settings.DevelopmentSettingsDashboardActivity.class.getName()),
- showDev && !useDevOptionV1, isAdmin)
+ showDev, isAdmin)
|| somethingChanged;
// Enable/disable backup settings depending on whether the user is admin.
diff --git a/src/com/android/settings/SettingsSliceProvider.java b/src/com/android/settings/SettingsSliceProvider.java
new file mode 100644
index 0000000..845dacd
--- /dev/null
+++ b/src/com/android/settings/SettingsSliceProvider.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright (C) 2017 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;
+
+import android.app.PendingIntent;
+import android.app.slice.Slice;
+import android.app.slice.SliceProvider;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.net.Uri;
+import android.net.wifi.WifiInfo;
+import android.net.wifi.WifiManager;
+
+public class SettingsSliceProvider extends SliceProvider {
+ public static final String SLICE_AUTHORITY = "com.android.settings.slices";
+
+ public static final String PATH_WIFI = "wifi";
+ public static final String ACTION_WIFI_CHANGED =
+ "com.android.settings.slice.action.WIFI_CHANGED";
+ // TODO -- Associate slice URI with search result instead of separate hardcoded thing
+ public static final String[] WIFI_SEARCH_TERMS = {"wi-fi", "wifi", "internet"};
+
+ public static Uri getUri(String path) {
+ return new Uri.Builder()
+ .scheme(ContentResolver.SCHEME_CONTENT)
+ .authority(SLICE_AUTHORITY)
+ .appendPath(path).build();
+ }
+
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ @Override
+ public Slice onBindSlice(Uri sliceUri) {
+ String path = sliceUri.getPath();
+ switch (path) {
+ case "/" + PATH_WIFI:
+ return createWifi(sliceUri);
+
+ }
+ throw new IllegalArgumentException("Unrecognized slice uri: " + sliceUri);
+ }
+
+ private Slice createWifi(Uri uri) {
+ // Get wifi state
+ String[] toggleHints;
+ WifiManager wifiManager = (WifiManager) getContext().getSystemService(Context.WIFI_SERVICE);
+ int wifiState = wifiManager.getWifiState();
+ boolean wifiEnabled = false;
+ String state;
+ switch (wifiState) {
+ case WifiManager.WIFI_STATE_DISABLED:
+ case WifiManager.WIFI_STATE_DISABLING:
+ state = getContext().getString(R.string.disconnected);
+ break;
+ case WifiManager.WIFI_STATE_ENABLED:
+ case WifiManager.WIFI_STATE_ENABLING:
+ state = wifiManager.getConnectionInfo().getSSID();
+ WifiInfo.removeDoubleQuotes(state);
+ wifiEnabled = true;
+ break;
+ case WifiManager.WIFI_STATE_UNKNOWN:
+ default:
+ state = ""; // just don't show anything?
+ break;
+ }
+ if (wifiEnabled) {
+ toggleHints = new String[] {Slice.HINT_TOGGLE, Slice.HINT_SELECTED};
+ } else {
+ toggleHints = new String[] {Slice.HINT_TOGGLE};
+ }
+ // Construct the slice
+ Slice.Builder b = new Slice.Builder(uri);
+ b.addSubSlice(new Slice.Builder(b)
+ .addAction(getIntent("android.settings.WIFI_SETTINGS"),
+ new Slice.Builder(b)
+ .addText(getContext().getString(R.string.wifi_settings), null)
+ .addText(state, null)
+ .addIcon(Icon.createWithResource(getContext(),
+ R.drawable.ic_settings_wireless), null, Slice.HINT_HIDDEN)
+ .addHints(Slice.HINT_TITLE)
+ .build())
+ .addAction(getBroadcastIntent(ACTION_WIFI_CHANGED),
+ new Slice.Builder(b)
+ .addHints(toggleHints)
+ .build())
+ .build());
+ return b.build();
+ }
+
+ private PendingIntent getIntent(String action) {
+ Intent intent = new Intent(action);
+ PendingIntent pi = PendingIntent.getActivity(getContext(), 0, intent, 0);
+ return pi;
+ }
+
+ private PendingIntent getBroadcastIntent(String action) {
+ Intent intent = new Intent(action);
+ intent.setClass(getContext(), SliceBroadcastReceiver.class);
+ return PendingIntent.getBroadcast(getContext(), 0, intent,
+ PendingIntent.FLAG_CANCEL_CURRENT);
+ }
+}
diff --git a/src/com/android/settings/SliceBroadcastReceiver.java b/src/com/android/settings/SliceBroadcastReceiver.java
new file mode 100644
index 0000000..f43e3a3
--- /dev/null
+++ b/src/com/android/settings/SliceBroadcastReceiver.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 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;
+
+import static com.android.settings.SettingsSliceProvider.ACTION_WIFI_CHANGED;
+
+import android.app.slice.Slice;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.net.wifi.WifiManager;
+import android.os.Handler;
+
+/**
+ * Responds to actions performed on slices and notifies slices of updates in state changes.
+ */
+public class SliceBroadcastReceiver extends BroadcastReceiver {
+
+ @Override
+ public void onReceive(Context context, Intent i) {
+ String action = i.getAction();
+ switch (action) {
+ case ACTION_WIFI_CHANGED:
+ WifiManager wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
+ boolean newState = i.getBooleanExtra(Slice.EXTRA_TOGGLE_STATE, wm.isWifiEnabled());
+ wm.setWifiEnabled(newState);
+ // Wait a bit for wifi to update (TODO: is there a better way to do this?)
+ Handler h = new Handler();
+ h.postDelayed(() -> {
+ Uri uri = SettingsSliceProvider.getUri(SettingsSliceProvider.PATH_WIFI);
+ context.getContentResolver().notifyChange(uri, null);
+ }, 1000);
+ break;
+ }
+ }
+}
diff --git a/src/com/android/settings/applications/AppInfoDashboardFragment.java b/src/com/android/settings/applications/AppInfoDashboardFragment.java
new file mode 100755
index 0000000..0e73ad7
--- /dev/null
+++ b/src/com/android/settings/applications/AppInfoDashboardFragment.java
@@ -0,0 +1,1685 @@
+/*
+ * Copyright (C) 2007 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.applications;
+
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+import android.Manifest.permission;
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.app.admin.DevicePolicyManager;
+import android.content.ActivityNotFoundException;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.hardware.usb.IUsbManager;
+import android.icu.text.ListFormatter;
+import android.net.INetworkStatsService;
+import android.net.INetworkStatsSession;
+import android.net.NetworkTemplate;
+import android.net.TrafficStats;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.BatteryStats;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.preference.PreferenceCategory;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.BidiFormatter;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+import android.text.format.Formatter;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.webkit.IWebViewUpdateService;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.os.BatterySipper;
+import com.android.internal.os.BatteryStatsHelper;
+import com.android.settings.DeviceAdminAdd;
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultEmergencyPreferenceController;
+import com.android.settings.applications.defaultapps.DefaultHomePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
+import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
+import com.android.settings.applications.instantapps.InstantAppButtonsController;
+import com.android.settings.applications.manageapplications.ManageApplications;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+import com.android.settings.datausage.AppDataUsage;
+import com.android.settings.datausage.DataUsageList;
+import com.android.settings.datausage.DataUsageUtils;
+import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
+import com.android.settings.fuelgauge.BatteryEntry;
+import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
+import com.android.settings.fuelgauge.BatteryUtils;
+import com.android.settings.notification.AppNotificationSettings;
+import com.android.settings.notification.NotificationBackend;
+import com.android.settings.notification.NotificationBackend.AppRow;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.ActionButtonPreference;
+import com.android.settings.widget.EntityHeaderController;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settingslib.AppItem;
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.applications.AppUtils;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.applications.ApplicationsState.AppEntry;
+import com.android.settingslib.applications.PermissionsSummaryHelper;
+import com.android.settingslib.applications.PermissionsSummaryHelper.PermissionsResultCallback;
+import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
+import com.android.settingslib.development.DevelopmentSettingsEnabler;
+import com.android.settingslib.net.ChartData;
+import com.android.settingslib.net.ChartDataLoader;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Dashboard fragment to display application information from Settings. This activity presents
+ * extended information associated with a package like code, data, total size, permissions
+ * used by the application and also the set of default launchable activities.
+ * For system applications, an option to clear user data is displayed only if data size is > 0.
+ * System applications that do not want clear user data do not have this option.
+ * For non-system applications, there is no option to clear data. Instead there is an option to
+ * uninstall the application.
+ */
+public class AppInfoDashboardFragment extends SettingsPreferenceFragment
+ implements ApplicationsState.Callbacks, OnPreferenceClickListener,
+ LoaderCallbacks<AppStorageStats> {
+
+ private static final String LOG_TAG = "AppInfoDashboardFragment";
+
+ // Menu identifiers
+ public static final int UNINSTALL_ALL_USERS_MENU = 1;
+ public static final int UNINSTALL_UPDATES = 2;
+
+ // Result code identifiers
+ public static final int REQUEST_UNINSTALL = 0;
+ private static final int REQUEST_REMOVE_DEVICE_ADMIN = 1;
+
+ private static final int SUB_INFO_FRAGMENT = 1;
+
+ private static final int LOADER_CHART_DATA = 2;
+ private static final int LOADER_STORAGE = 3;
+ @VisibleForTesting
+ static final int LOADER_BATTERY = 4;
+
+ // Dialog identifiers used in showDialog
+ private static final int DLG_BASE = 0;
+ private static final int DLG_FORCE_STOP = DLG_BASE + 1;
+ private static final int DLG_DISABLE = DLG_BASE + 2;
+ private static final int DLG_SPECIAL_DISABLE = DLG_BASE + 3;
+ private static final String EXTRA_HIDE_INFO_BUTTON = "hideInfoButton";
+ private static final String KEY_HEADER = "header_view";
+ private static final String KEY_INSTANT_APP_BUTTONS = "instant_app_buttons";
+ private static final String KEY_ACTION_BUTTONS = "action_buttons";
+ private static final String KEY_NOTIFICATION = "notification_settings";
+ private static final String KEY_STORAGE = "storage_settings";
+ private static final String KEY_PERMISSION = "permission_settings";
+ private static final String KEY_DATA = "data_settings";
+ private static final String KEY_LAUNCH = "preferred_settings";
+ private static final String KEY_BATTERY = "battery";
+ private static final String KEY_MEMORY = "memory";
+ private static final String KEY_VERSION = "app_version";
+ private static final String KEY_INSTANT_APP_SUPPORTED_LINKS =
+ "instant_app_launch_supported_domain_urls";
+ // The following copied from AppInfoBase
+ public static final String ARG_PACKAGE_NAME = "package";
+ public static final String ARG_PACKAGE_UID = "uid";
+
+ protected static final String TAG = AppInfoBase.class.getSimpleName();
+ protected static final boolean localLOGV = false;
+
+ private EnforcedAdmin mAppsControlDisallowedAdmin;
+ private boolean mAppsControlDisallowedBySystem;
+
+ private ApplicationFeatureProvider mApplicationFeatureProvider;
+ private ApplicationsState mState;
+ private ApplicationsState.Session mSession;
+ private ApplicationsState.AppEntry mAppEntry;
+ private PackageInfo mPackageInfo;
+ private int mUserId;
+ private String mPackageName;
+
+ private IUsbManager mUsbManager;
+ private DevicePolicyManagerWrapper mDpm;
+ private UserManager mUserManager;
+ private PackageManager mPm;
+
+ private boolean mFinishing;
+ private boolean mListeningToPackageRemove;
+
+
+ private final HashSet<String> mHomePackages = new HashSet<>();
+
+ private boolean mInitialized;
+ private boolean mShowUninstalled;
+ private LayoutPreference mHeader;
+ private boolean mUpdatedSysApp = false;
+ private Preference mNotificationPreference;
+ private Preference mStoragePreference;
+ private Preference mPermissionsPreference;
+ private Preference mLaunchPreference;
+ private Preference mDataPreference;
+ private Preference mMemoryPreference;
+ private Preference mVersionPreference;
+ private AppDomainsPreference mInstantAppDomainsPreference;
+ private boolean mDisableAfterUninstall;
+
+ // Used for updating notification preference.
+ private final NotificationBackend mBackend = new NotificationBackend();
+
+ private ChartData mChartData;
+ private INetworkStatsSession mStatsSession;
+
+ @VisibleForTesting
+ ActionButtonPreference mActionButtons;
+ @VisibleForTesting
+ Preference mBatteryPreference;
+ @VisibleForTesting
+ BatterySipper mSipper;
+ @VisibleForTesting
+ BatteryStatsHelper mBatteryHelper;
+ @VisibleForTesting
+ BatteryUtils mBatteryUtils;
+
+ protected ProcStatsData mStatsManager;
+ protected ProcStatsPackageEntry mStats;
+
+ private InstantAppButtonsController mInstantAppButtonsController;
+
+ private AppStorageStats mLastResult;
+ private String mBatteryPercent;
+
+ @VisibleForTesting
+ final LoaderCallbacks<BatteryStatsHelper> mBatteryCallbacks =
+ new LoaderCallbacks<BatteryStatsHelper>() {
+
+ @Override
+ public Loader<BatteryStatsHelper> onCreateLoader(int id, Bundle args) {
+ return new BatteryStatsHelperLoader(getContext());
+ }
+
+ @Override
+ public void onLoadFinished(Loader<BatteryStatsHelper> loader,
+ BatteryStatsHelper batteryHelper) {
+ mBatteryHelper = batteryHelper;
+ if (mPackageInfo != null) {
+ mSipper = findTargetSipper(batteryHelper, mPackageInfo.applicationInfo.uid);
+ if (getActivity() != null) {
+ updateBattery();
+ }
+ }
+ }
+
+ @Override
+ public void onLoaderReset(Loader<BatteryStatsHelper> loader) {
+ }
+ };
+
+ @VisibleForTesting
+ boolean handleDisableable() {
+ boolean disableable = false;
+ // Try to prevent the user from bricking their phone
+ // by not allowing disabling of apps signed with the
+ // system cert and any launcher app in the system.
+ if (mHomePackages.contains(mAppEntry.info.packageName)
+ || Utils.isSystemPackage(getContext().getResources(), mPm, mPackageInfo)) {
+ // Disable button for core system applications.
+ mActionButtons
+ .setButton1Text(R.string.disable_text)
+ .setButton1Positive(false);
+ } else if (mAppEntry.info.enabled && !isDisabledUntilUsed()) {
+ mActionButtons
+ .setButton1Text(R.string.disable_text)
+ .setButton1Positive(false);
+ disableable = !mApplicationFeatureProvider.getKeepEnabledPackages()
+ .contains(mAppEntry.info.packageName);
+ } else {
+ mActionButtons
+ .setButton1Text(R.string.enable_text)
+ .setButton1Positive(true);
+ disableable = true;
+ }
+
+ return disableable;
+ }
+
+ private boolean isDisabledUntilUsed() {
+ return mAppEntry.info.enabledSetting
+ == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
+ }
+
+ private void initUninstallButtons() {
+ final boolean isBundled = (mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0;
+ boolean enabled;
+ if (isBundled) {
+ enabled = handleDisableable();
+ } else {
+ enabled = initUninstallButtonForUserApp();
+ }
+ // If this is a device admin, it can't be uninstalled or disabled.
+ // We do this here so the text of the button is still set correctly.
+ if (isBundled && mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
+ enabled = false;
+ }
+
+ // We don't allow uninstalling DO/PO on *any* users, because if it's a system app,
+ // "uninstall" is actually "downgrade to the system version + disable", and "downgrade"
+ // will clear data on all users.
+ if (Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mPackageInfo.packageName)) {
+ enabled = false;
+ }
+
+ // Don't allow uninstalling the device provisioning package.
+ if (Utils.isDeviceProvisioningPackage(getResources(), mAppEntry.info.packageName)) {
+ enabled = false;
+ }
+
+ // If the uninstall intent is already queued, disable the uninstall button
+ if (mDpm.isUninstallInQueue(mPackageName)) {
+ enabled = false;
+ }
+
+ // Home apps need special handling. Bundled ones we don't risk downgrading
+ // because that can interfere with home-key resolution. Furthermore, we
+ // can't allow uninstallation of the only home app, and we don't want to
+ // allow uninstallation of an explicitly preferred one -- the user can go
+ // to Home settings and pick a different one, after which we'll permit
+ // uninstallation of the now-not-default one.
+ if (enabled && mHomePackages.contains(mPackageInfo.packageName)) {
+ if (isBundled) {
+ enabled = false;
+ } else {
+ ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+ ComponentName currentDefaultHome = mPm.getHomeActivities(homeActivities);
+ if (currentDefaultHome == null) {
+ // No preferred default, so permit uninstall only when
+ // there is more than one candidate
+ enabled = (mHomePackages.size() > 1);
+ } else {
+ // There is an explicit default home app -- forbid uninstall of
+ // that one, but permit it for installed-but-inactive ones.
+ enabled = !mPackageInfo.packageName.equals(currentDefaultHome.getPackageName());
+ }
+ }
+ }
+
+ if (mAppsControlDisallowedBySystem) {
+ enabled = false;
+ }
+
+ try {
+ IWebViewUpdateService webviewUpdateService =
+ IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate"));
+ if (webviewUpdateService.isFallbackPackage(mAppEntry.info.packageName)) {
+ enabled = false;
+ }
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+
+ mActionButtons.setButton1Enabled(enabled);
+ if (enabled) {
+ // Register listener
+ mActionButtons.setButton1OnClickListener(v -> handleUninstallButtonClick());
+ }
+ }
+
+ @VisibleForTesting
+ boolean initUninstallButtonForUserApp() {
+ boolean enabled = true;
+ if ((mPackageInfo.applicationInfo.flags & ApplicationInfo.FLAG_INSTALLED) == 0
+ && mUserManager.getUsers().size() >= 2) {
+ // When we have multiple users, there is a separate menu
+ // to uninstall for all users.
+ enabled = false;
+ } else if (AppUtils.isInstant(mPackageInfo.applicationInfo)) {
+ enabled = false;
+ mActionButtons.setButton1Visible(false);
+ }
+ mActionButtons.setButton1Text(R.string.uninstall_text).setButton1Positive(false);
+ return enabled;
+ }
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mFinishing = false;
+ final Activity activity = getActivity();
+ mApplicationFeatureProvider = FeatureFactory.getFactory(activity)
+ .getApplicationFeatureProvider(activity);
+ mState = ApplicationsState.getInstance(activity.getApplication());
+ mSession = mState.newSession(this, getLifecycle());
+ mDpm = new DevicePolicyManagerWrapper(
+ (DevicePolicyManager) activity.getSystemService(Context.DEVICE_POLICY_SERVICE));
+ mUserManager = (UserManager) activity.getSystemService(Context.USER_SERVICE);
+ mPm = activity.getPackageManager();
+ IBinder b = ServiceManager.getService(Context.USB_SERVICE);
+ mUsbManager = IUsbManager.Stub.asInterface(b);
+
+ retrieveAppEntry();
+ startListeningToPackageRemove();
+
+ if (!ensurePackageInfoAvailable(activity)) {
+ return;
+ }
+
+ setHasOptionsMenu(true);
+ addPreferencesFromResource(R.xml.installed_app_details);
+
+ addDynamicPrefs();
+ if (Utils.isBandwidthControlEnabled()) {
+ INetworkStatsService statsService = INetworkStatsService.Stub.asInterface(
+ ServiceManager.getService(Context.NETWORK_STATS_SERVICE));
+ try {
+ mStatsSession = statsService.openSession();
+ } catch (RemoteException e) {
+ throw new RuntimeException(e);
+ }
+ } else {
+ removePreference(KEY_DATA);
+ }
+ mBatteryUtils = BatteryUtils.getInstance(getContext());
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.APPLICATIONS_INSTALLED_APP_DETAILS;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mAppsControlDisallowedAdmin = RestrictedLockUtils.checkIfRestrictionEnforced(getActivity(),
+ UserManager.DISALLOW_APPS_CONTROL, mUserId);
+ mAppsControlDisallowedBySystem = RestrictedLockUtils.hasBaseUserRestriction(getActivity(),
+ UserManager.DISALLOW_APPS_CONTROL, mUserId);
+
+ if (!refreshUi()) {
+ setIntentAndFinish(true, true);
+ }
+
+ if (mFinishing) {
+ return;
+ }
+ AppItem app = new AppItem(mAppEntry.info.uid);
+ app.addUid(mAppEntry.info.uid);
+ if (mStatsSession != null) {
+ LoaderManager loaderManager = getLoaderManager();
+ loaderManager.restartLoader(LOADER_CHART_DATA,
+ ChartDataLoader.buildArgs(getTemplate(getContext()), app),
+ mDataCallbacks);
+ loaderManager.restartLoader(LOADER_STORAGE, Bundle.EMPTY, this);
+ }
+ restartBatteryStatsLoader();
+ if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext())) {
+ new MemoryUpdater().execute();
+ }
+ updateDynamicPrefs();
+ }
+
+ @VisibleForTesting
+ public void restartBatteryStatsLoader() {
+ getLoaderManager().restartLoader(LOADER_BATTERY, Bundle.EMPTY, mBatteryCallbacks);
+ }
+
+ @Override
+ public void onPause() {
+ getLoaderManager().destroyLoader(LOADER_CHART_DATA);
+ super.onPause();
+ }
+
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ if (mFinishing) {
+ return;
+ }
+ final Activity activity = getActivity();
+ mHeader = (LayoutPreference) findPreference(KEY_HEADER);
+ mActionButtons = ((ActionButtonPreference) findPreference(KEY_ACTION_BUTTONS))
+ .setButton2Text(R.string.force_stop)
+ .setButton2Positive(false)
+ .setButton2Enabled(false);
+ EntityHeaderController.newInstance(activity, this, mHeader.findViewById(R.id.entity_header))
+ .setRecyclerView(getListView(), getLifecycle())
+ .setPackageName(mPackageName)
+ .setHasAppInfoLink(false)
+ .setButtonActions(EntityHeaderController.ActionType.ACTION_APP_PREFERENCE,
+ EntityHeaderController.ActionType.ACTION_NONE)
+ .styleActionBar(activity)
+ .bindHeaderButtons();
+
+ mNotificationPreference = findPreference(KEY_NOTIFICATION);
+ mNotificationPreference.setOnPreferenceClickListener(this);
+ mStoragePreference = findPreference(KEY_STORAGE);
+ mStoragePreference.setOnPreferenceClickListener(this);
+ mPermissionsPreference = findPreference(KEY_PERMISSION);
+ mPermissionsPreference.setOnPreferenceClickListener(this);
+ mDataPreference = findPreference(KEY_DATA);
+ if (mDataPreference != null) {
+ mDataPreference.setOnPreferenceClickListener(this);
+ }
+ mBatteryPreference = findPreference(KEY_BATTERY);
+ mBatteryPreference.setEnabled(false);
+ mBatteryPreference.setOnPreferenceClickListener(this);
+ mMemoryPreference = findPreference(KEY_MEMORY);
+ mMemoryPreference.setOnPreferenceClickListener(this);
+ mMemoryPreference.setVisible(
+ DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext()));
+ mVersionPreference = findPreference(KEY_VERSION);
+ mInstantAppDomainsPreference =
+ (AppDomainsPreference) findPreference(KEY_INSTANT_APP_SUPPORTED_LINKS);
+ mLaunchPreference = findPreference(KEY_LAUNCH);
+ if (mAppEntry != null && mAppEntry.info != null) {
+ if ((mAppEntry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0 ||
+ !mAppEntry.info.enabled) {
+ mLaunchPreference.setEnabled(false);
+ } else {
+ mLaunchPreference.setOnPreferenceClickListener(this);
+ }
+ } else {
+ mLaunchPreference.setEnabled(false);
+ }
+ }
+
+ @Override
+ public void onPackageSizeChanged(String packageName) {
+ if (!TextUtils.equals(packageName, mPackageName)) {
+ Log.d(LOG_TAG, "Package change irrelevant, skipping");
+ return;
+ }
+ refreshUi();
+ }
+
+ /**
+ * Ensures the {@link PackageInfo} is available to proceed. If it's not available, the fragment
+ * will finish.
+ *
+ * @return true if packageInfo is available.
+ */
+ @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ boolean ensurePackageInfoAvailable(Activity activity) {
+ if (mPackageInfo == null) {
+ mFinishing = true;
+ Log.w(LOG_TAG, "Package info not available. Is this package already uninstalled?");
+ activity.finishAndRemoveTask();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+ menu.add(0, UNINSTALL_UPDATES, 0, R.string.app_factory_reset)
+ .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ menu.add(0, UNINSTALL_ALL_USERS_MENU, 1, R.string.uninstall_all_users_text)
+ .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+ }
+
+ @Override
+ public void onPrepareOptionsMenu(Menu menu) {
+ if (mFinishing) {
+ return;
+ }
+ menu.findItem(UNINSTALL_ALL_USERS_MENU).setVisible(shouldShowUninstallForAll(mAppEntry));
+ mUpdatedSysApp = (mAppEntry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0;
+ MenuItem uninstallUpdatesItem = menu.findItem(UNINSTALL_UPDATES);
+ uninstallUpdatesItem.setVisible(mUpdatedSysApp && !mAppsControlDisallowedBySystem);
+ if (uninstallUpdatesItem.isVisible()) {
+ RestrictedLockUtils.setMenuItemAsDisabledByAdmin(getActivity(),
+ uninstallUpdatesItem, mAppsControlDisallowedAdmin);
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case UNINSTALL_ALL_USERS_MENU:
+ uninstallPkg(mAppEntry.info.packageName, true, false);
+ return true;
+ case UNINSTALL_UPDATES:
+ uninstallPkg(mAppEntry.info.packageName, false, false);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ switch (requestCode) {
+ case REQUEST_UNINSTALL:
+ // Refresh option menu
+ getActivity().invalidateOptionsMenu();
+
+ if (mDisableAfterUninstall) {
+ mDisableAfterUninstall = false;
+ new DisableChanger(this, mAppEntry.info,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER)
+ .execute((Object)null);
+ }
+ // continue with following operations
+ case REQUEST_REMOVE_DEVICE_ADMIN:
+ if (!refreshUi()) {
+ setIntentAndFinish(true, true);
+ } else {
+ startListeningToPackageRemove();
+ }
+ break;
+ }
+ }
+
+ @Override
+ public Loader<AppStorageStats> onCreateLoader(int id, Bundle args) {
+ Context context = getContext();
+ return new FetchPackageStorageAsyncLoader(
+ context, new StorageStatsSource(context), mAppEntry.info, UserHandle.of(mUserId));
+ }
+
+ @Override
+ public void onLoadFinished(Loader<AppStorageStats> loader, AppStorageStats result) {
+ mLastResult = result;
+ refreshUi();
+ }
+
+ @Override
+ public void onLoaderReset(Loader<AppStorageStats> loader) {
+ }
+
+ /**
+ * Utility method to hide and show specific preferences based on whether the app being displayed
+ * is an Instant App or an installed app.
+ */
+ @VisibleForTesting
+ void prepareInstantAppPrefs() {
+ final boolean isInstant = AppUtils.isInstant(mPackageInfo.applicationInfo);
+ if (isInstant) {
+ Set<String> handledDomainSet = Utils.getHandledDomains(mPm, mPackageInfo.packageName);
+ String[] handledDomains = handledDomainSet.toArray(new String[handledDomainSet.size()]);
+ mInstantAppDomainsPreference.setTitles(handledDomains);
+ // Dummy values, unused in the implementation
+ mInstantAppDomainsPreference.setValues(new int[handledDomains.length]);
+ getPreferenceScreen().removePreference(mLaunchPreference);
+ } else {
+ getPreferenceScreen().removePreference(mInstantAppDomainsPreference);
+ }
+ }
+
+ // Utility method to set application label and icon.
+ private void setAppLabelAndIcon(PackageInfo pkgInfo) {
+ final View appSnippet = mHeader.findViewById(R.id.entity_header);
+ mState.ensureIcon(mAppEntry);
+ final Activity activity = getActivity();
+ final boolean isInstantApp = AppUtils.isInstant(mPackageInfo.applicationInfo);
+ final CharSequence summary =
+ isInstantApp ? null : getString(Utils.getInstallationStatus(mAppEntry.info));
+ EntityHeaderController.newInstance(activity, this, appSnippet)
+ .setLabel(mAppEntry)
+ .setIcon(mAppEntry)
+ .setSummary(summary)
+ .setIsInstantApp(isInstantApp)
+ .done(activity, false /* rebindActions */);
+ mVersionPreference.setSummary(getString(R.string.version_text,
+ BidiFormatter.getInstance().unicodeWrap(pkgInfo.versionName)));
+ }
+
+ @VisibleForTesting
+ boolean shouldShowUninstallForAll(AppEntry appEntry) {
+ boolean showIt = true;
+ if (mUpdatedSysApp) {
+ showIt = false;
+ } else if (appEntry == null) {
+ showIt = false;
+ } else if ((appEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ showIt = false;
+ } else if (mPackageInfo == null || mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
+ showIt = false;
+ } else if (UserHandle.myUserId() != 0) {
+ showIt = false;
+ } else if (mUserManager.getUsers().size() < 2) {
+ showIt = false;
+ } else if (PackageUtil.countPackageInUsers(mPm, mUserManager, mPackageName) < 2
+ && (appEntry.info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
+ showIt = false;
+ } else if (AppUtils.isInstant(appEntry.info)) {
+ showIt = false;
+ }
+ return showIt;
+ }
+
+ @VisibleForTesting
+ BatterySipper findTargetSipper(BatteryStatsHelper batteryHelper, int uid) {
+ List<BatterySipper> usageList = batteryHelper.getUsageList();
+ for (int i = 0, size = usageList.size(); i < size; i++) {
+ BatterySipper sipper = usageList.get(i);
+ if (sipper.getUid() == uid) {
+ return sipper;
+ }
+ }
+
+ return null;
+ }
+
+ private boolean signaturesMatch(String pkg1, String pkg2) {
+ if (pkg1 != null && pkg2 != null) {
+ try {
+ final int match = mPm.checkSignatures(pkg1, pkg2);
+ if (match >= PackageManager.SIGNATURE_MATCH) {
+ return true;
+ }
+ } catch (Exception e) {
+ // e.g. named alternate package not found during lookup;
+ // this is an expected case sometimes
+ }
+ }
+ return false;
+ }
+
+ protected boolean refreshUi() {
+ retrieveAppEntry();
+ if (mAppEntry == null) {
+ return false; // onCreate must have failed, make sure to exit
+ }
+
+ if (mPackageInfo == null) {
+ return false; // onCreate must have failed, make sure to exit
+ }
+
+ // Get list of "home" apps and trace through any meta-data references
+ List<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+ mPm.getHomeActivities(homeActivities);
+ mHomePackages.clear();
+ for (int i = 0; i< homeActivities.size(); i++) {
+ ResolveInfo ri = homeActivities.get(i);
+ final String activityPkg = ri.activityInfo.packageName;
+ mHomePackages.add(activityPkg);
+
+ // Also make sure to include anything proxying for the home app
+ final Bundle metadata = ri.activityInfo.metaData;
+ if (metadata != null) {
+ final String metaPkg = metadata.getString(ActivityManager.META_HOME_ALTERNATE);
+ if (signaturesMatch(metaPkg, activityPkg)) {
+ mHomePackages.add(metaPkg);
+ }
+ }
+ }
+
+ checkForceStop();
+ setAppLabelAndIcon(mPackageInfo);
+ initUninstallButtons();
+ prepareInstantAppPrefs();
+
+ // Update the preference summaries.
+ Activity context = getActivity();
+ boolean isExternal = ((mAppEntry.info.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0);
+ mStoragePreference.setSummary(getStorageSummary(context, mLastResult, isExternal));
+
+ PermissionsSummaryHelper.getPermissionSummary(getContext(),
+ mPackageName, mPermissionCallback);
+ mLaunchPreference.setSummary(AppUtils.getLaunchByDefaultSummary(mAppEntry, mUsbManager,
+ mPm, context));
+ mNotificationPreference.setSummary(getNotificationSummary(mAppEntry, context,
+ mBackend));
+ if (mDataPreference != null) {
+ mDataPreference.setSummary(getDataSummary());
+ }
+
+ if (!mInitialized) {
+ // First time init: are we displaying an uninstalled app?
+ mInitialized = true;
+ mShowUninstalled = (mAppEntry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0;
+ } else {
+ // All other times: if the app no longer exists then we want
+ // to go away.
+ try {
+ ApplicationInfo ainfo = context.getPackageManager().getApplicationInfo(
+ mAppEntry.info.packageName,
+ PackageManager.MATCH_DISABLED_COMPONENTS
+ | PackageManager.MATCH_ANY_USER);
+ if (!mShowUninstalled) {
+ // If we did not start out with the app uninstalled, then
+ // it transitioning to the uninstalled state for the current
+ // user means we should go away as well.
+ return (ainfo.flags&ApplicationInfo.FLAG_INSTALLED) != 0;
+ }
+ } catch (NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ @VisibleForTesting
+ void updateBattery() {
+ mBatteryPreference.setEnabled(true);
+ if (isBatteryStatsAvailable()) {
+ final int dischargeAmount = mBatteryHelper.getStats().getDischargeAmount(
+ BatteryStats.STATS_SINCE_CHARGED);
+
+ final List<BatterySipper> usageList = new ArrayList<>(mBatteryHelper.getUsageList());
+ final double hiddenAmount = mBatteryUtils.removeHiddenBatterySippers(usageList);
+ final int percentOfMax = (int) mBatteryUtils.calculateBatteryPercent(
+ mSipper.totalPowerMah, mBatteryHelper.getTotalPower(), hiddenAmount,
+ dischargeAmount);
+ mBatteryPercent = Utils.formatPercentage(percentOfMax);
+ mBatteryPreference.setSummary(getString(R.string.battery_summary, mBatteryPercent));
+ } else {
+ mBatteryPreference.setSummary(getString(R.string.no_battery_summary));
+ }
+ }
+
+ private CharSequence getDataSummary() {
+ if (mChartData != null) {
+ long totalBytes = mChartData.detail.getTotalBytes();
+ if (totalBytes == 0) {
+ return getString(R.string.no_data_usage);
+ }
+ Context context = getActivity();
+ return getString(R.string.data_summary_format,
+ Formatter.formatFileSize(context, totalBytes),
+ DateUtils.formatDateTime(context, mChartData.detail.getStart(),
+ DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_MONTH));
+ }
+ return getString(R.string.computing_size);
+ }
+
+ @VisibleForTesting
+ static CharSequence getStorageSummary(
+ Context context, AppStorageStats stats, boolean isExternal) {
+ if (stats == null) {
+ return context.getText(R.string.computing_size);
+ } else {
+ CharSequence storageType = context.getString(isExternal
+ ? R.string.storage_type_external
+ : R.string.storage_type_internal);
+ return context.getString(R.string.storage_summary_format,
+ getSize(context, stats), storageType.toString().toLowerCase());
+ }
+ }
+
+ @VisibleForTesting
+ boolean isBatteryStatsAvailable() {
+ return mBatteryHelper != null && mSipper != null;
+ }
+
+ private static CharSequence getSize(Context context, AppStorageStats stats) {
+ return Formatter.formatFileSize(context, stats.getTotalBytes());
+ }
+
+ protected AlertDialog createDialog(int id, int errorCode) {
+ switch (id) {
+ case DLG_DISABLE:
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(getActivity().getText(R.string.app_disable_dlg_text))
+ .setPositiveButton(R.string.app_disable_dlg_positive,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // Disable the app
+ mMetricsFeatureProvider.action(getContext(),
+ MetricsEvent.ACTION_SETTINGS_DISABLE_APP);
+ new DisableChanger(AppInfoDashboardFragment.this, mAppEntry.info,
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER)
+ .execute((Object)null);
+ }
+ })
+ .setNegativeButton(R.string.dlg_cancel, null)
+ .create();
+ case DLG_SPECIAL_DISABLE:
+ return new AlertDialog.Builder(getActivity())
+ .setMessage(getActivity().getText(R.string.app_disable_dlg_text))
+ .setPositiveButton(R.string.app_disable_dlg_positive,
+ new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // Disable the app and ask for uninstall
+ mMetricsFeatureProvider.action(getContext(),
+ MetricsEvent.ACTION_SETTINGS_DISABLE_APP);
+ uninstallPkg(mAppEntry.info.packageName,
+ false, true);
+ }
+ })
+ .setNegativeButton(R.string.dlg_cancel, null)
+ .create();
+ case DLG_FORCE_STOP:
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(getActivity().getText(R.string.force_stop_dlg_title))
+ .setMessage(getActivity().getText(R.string.force_stop_dlg_text))
+ .setPositiveButton(R.string.dlg_ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ // Force stop
+ forceStopPackage(mAppEntry.info.packageName);
+ }
+ })
+ .setNegativeButton(R.string.dlg_cancel, null)
+ .create();
+ }
+ if (mInstantAppButtonsController != null) {
+ return mInstantAppButtonsController.createDialog(id);
+ }
+ return null;
+ }
+
+ private void uninstallPkg(String packageName, boolean allUsers, boolean andDisable) {
+ stopListeningToPackageRemove();
+ // Create new intent to launch Uninstaller activity
+ Uri packageURI = Uri.parse("package:"+packageName);
+ Intent uninstallIntent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE, packageURI);
+ uninstallIntent.putExtra(Intent.EXTRA_UNINSTALL_ALL_USERS, allUsers);
+ mMetricsFeatureProvider.action(
+ getContext(), MetricsEvent.ACTION_SETTINGS_UNINSTALL_APP);
+ startActivityForResult(uninstallIntent, REQUEST_UNINSTALL);
+ mDisableAfterUninstall = andDisable;
+ }
+
+ private void forceStopPackage(String pkgName) {
+ mMetricsFeatureProvider.action(getContext(), MetricsEvent.ACTION_APP_FORCE_STOP, pkgName);
+ ActivityManager am = (ActivityManager) getActivity().getSystemService(
+ Context.ACTIVITY_SERVICE);
+ Log.d(LOG_TAG, "Stopping package " + pkgName);
+ am.forceStopPackage(pkgName);
+ int userId = UserHandle.getUserId(mAppEntry.info.uid);
+ mState.invalidatePackage(pkgName, userId);
+ AppEntry newEnt = mState.getEntry(pkgName, userId);
+ if (newEnt != null) {
+ mAppEntry = newEnt;
+ }
+ checkForceStop();
+ }
+
+ private void updateForceStopButton(boolean enabled) {
+ mActionButtons
+ .setButton2Enabled(mAppsControlDisallowedBySystem ? false : enabled)
+ .setButton2OnClickListener(mAppsControlDisallowedBySystem
+ ? null : v -> handleForceStopButtonClick());
+ }
+
+ @VisibleForTesting
+ void checkForceStop() {
+ if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
+ // User can't force stop device admin.
+ Log.w(LOG_TAG, "User can't force stop device admin");
+ updateForceStopButton(false);
+ } else if (AppUtils.isInstant(mPackageInfo.applicationInfo)) {
+ updateForceStopButton(false);
+ mActionButtons.setButton2Visible(false);
+ } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_STOPPED) == 0) {
+ // If the app isn't explicitly stopped, then always show the
+ // force stop button.
+ Log.w(LOG_TAG, "App is not explicitly stopped");
+ updateForceStopButton(true);
+ } else {
+ Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
+ Uri.fromParts("package", mAppEntry.info.packageName, null));
+ intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
+ intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
+ Log.d(LOG_TAG, "Sending broadcast to query restart status for "
+ + mAppEntry.info.packageName);
+ getActivity().sendOrderedBroadcastAsUser(intent, UserHandle.CURRENT, null,
+ mCheckKillProcessesReceiver, null, Activity.RESULT_CANCELED, null, null);
+ }
+ }
+
+ private void startManagePermissionsActivity() {
+ // start new activity to manage app permissions
+ Intent intent = new Intent(Intent.ACTION_MANAGE_APP_PERMISSIONS);
+ intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mAppEntry.info.packageName);
+ intent.putExtra(EXTRA_HIDE_INFO_BUTTON, true);
+ try {
+ getActivity().startActivityForResult(intent, SUB_INFO_FRAGMENT);
+ } catch (ActivityNotFoundException e) {
+ Log.w(LOG_TAG, "No app can handle android.intent.action.MANAGE_APP_PERMISSIONS");
+ }
+ }
+
+ private void startAppInfoFragment(Class<?> fragment, int title) {
+ startAppInfoFragment(fragment, title, this, mAppEntry);
+ }
+
+ public static void startAppInfoFragment(Class<?> fragment, int title,
+ SettingsPreferenceFragment caller, AppEntry appEntry) {
+ // start new fragment to display extended information
+ Bundle args = new Bundle();
+ args.putString(ARG_PACKAGE_NAME, appEntry.info.packageName);
+ args.putInt(ARG_PACKAGE_UID, appEntry.info.uid);
+
+ SettingsActivity sa = (SettingsActivity) caller.getActivity();
+ sa.startPreferencePanel(caller, fragment.getName(), args, title, null, caller,
+ SUB_INFO_FRAGMENT);
+ }
+
+ private void handleUninstallButtonClick() {
+ if (mAppEntry == null) {
+ setIntentAndFinish(true, true);
+ return;
+ }
+ final String packageName = mAppEntry.info.packageName;
+ if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
+ stopListeningToPackageRemove();
+ Activity activity = getActivity();
+ Intent uninstallDAIntent = new Intent(activity, DeviceAdminAdd.class);
+ uninstallDAIntent.putExtra(DeviceAdminAdd.EXTRA_DEVICE_ADMIN_PACKAGE_NAME,
+ mPackageName);
+ mMetricsFeatureProvider.action(
+ activity, MetricsEvent.ACTION_SETTINGS_UNINSTALL_DEVICE_ADMIN);
+ activity.startActivityForResult(uninstallDAIntent, REQUEST_REMOVE_DEVICE_ADMIN);
+ return;
+ }
+ EnforcedAdmin admin = RestrictedLockUtils.checkIfUninstallBlocked(getActivity(),
+ packageName, mUserId);
+ boolean uninstallBlockedBySystem = mAppsControlDisallowedBySystem ||
+ RestrictedLockUtils.hasBaseUserRestriction(getActivity(), packageName, mUserId);
+ if (admin != null && !uninstallBlockedBySystem) {
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(), admin);
+ } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
+ if (mAppEntry.info.enabled && !isDisabledUntilUsed()) {
+ // If the system app has an update and this is the only user on the device,
+ // then offer to downgrade the app, otherwise only offer to disable the
+ // app for this user.
+ if (mUpdatedSysApp && isSingleUser()) {
+ showDialogInner(DLG_SPECIAL_DISABLE, 0);
+ } else {
+ showDialogInner(DLG_DISABLE, 0);
+ }
+ } else {
+ mMetricsFeatureProvider.action(
+ getActivity(),
+ MetricsEvent.ACTION_SETTINGS_ENABLE_APP);
+ new DisableChanger(this, mAppEntry.info,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED)
+ .execute((Object) null);
+ }
+ } else if ((mAppEntry.info.flags & ApplicationInfo.FLAG_INSTALLED) == 0) {
+ uninstallPkg(packageName, true, false);
+ } else {
+ uninstallPkg(packageName, false, false);
+ }
+ }
+
+ private void handleForceStopButtonClick() {
+ if (mAppEntry == null) {
+ setIntentAndFinish(true, true);
+ return;
+ }
+ if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) {
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(
+ getActivity(), mAppsControlDisallowedAdmin);
+ } else {
+ showDialogInner(DLG_FORCE_STOP, 0);
+ //forceStopPackage(mAppInfo.packageName);
+ }
+ }
+
+ /** Returns whether there is only one user on this device, not including the system-only user */
+ private boolean isSingleUser() {
+ final int userCount = mUserManager.getUserCount();
+ return userCount == 1
+ || (mUserManager.isSplitSystemUser() && userCount == 2);
+ }
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ if (preference == mStoragePreference) {
+ startAppInfoFragment(AppStorageSettings.class, R.string.storage_settings);
+ } else if (preference == mNotificationPreference) {
+ startAppInfoFragment(AppNotificationSettings.class, R.string.app_notifications_title);
+ } else if (preference == mPermissionsPreference) {
+ startManagePermissionsActivity();
+ } else if (preference == mLaunchPreference) {
+ startAppInfoFragment(AppLaunchSettings.class, R.string.launch_by_default);
+ } else if (preference == mMemoryPreference) {
+ ProcessStatsBase.launchMemoryDetail((SettingsActivity) getActivity(),
+ mStatsManager.getMemInfo(), mStats, false);
+ } else if (preference == mDataPreference) {
+ startAppInfoFragment(AppDataUsage.class, R.string.app_data_usage);
+ } else if (preference == mBatteryPreference) {
+ if (isBatteryStatsAvailable()) {
+ BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
+ entry.defaultPackageName = mPackageName;
+ AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
+ this, mBatteryHelper, BatteryStats.STATS_SINCE_CHARGED, entry,
+ mBatteryPercent, null /* mAnomalies */);
+ } else {
+ AdvancedPowerUsageDetail.startBatteryDetailPage((SettingsActivity) getActivity(),
+ this, mPackageName);
+ }
+ } else {
+ return false;
+ }
+ return true;
+ }
+
+ private void addDynamicPrefs() {
+ if (UserManager.get(getContext()).isManagedProfile()) {
+ return;
+ }
+ final PreferenceScreen screen = getPreferenceScreen();
+ final Context context = getContext();
+ if (DefaultHomePreferenceController.hasHomePreference(mPackageName, context)) {
+ screen.addPreference(new ShortcutPreference(getPrefContext(),
+ DefaultAppSettings.class, "default_home", R.string.home_app,
+ R.string.configure_apps));
+ }
+ if (DefaultBrowserPreferenceController.hasBrowserPreference(mPackageName, context)) {
+ screen.addPreference(new ShortcutPreference(getPrefContext(),
+ DefaultAppSettings.class, "default_browser", R.string.default_browser_title,
+ R.string.configure_apps));
+ }
+ if (DefaultPhonePreferenceController.hasPhonePreference(mPackageName, context)) {
+ screen.addPreference(new ShortcutPreference(getPrefContext(),
+ DefaultAppSettings.class, "default_phone_app", R.string.default_phone_title,
+ R.string.configure_apps));
+ }
+ if (DefaultEmergencyPreferenceController.hasEmergencyPreference(mPackageName, context)) {
+ screen.addPreference(new ShortcutPreference(getPrefContext(),
+ DefaultAppSettings.class, "default_emergency_app",
+ R.string.default_emergency_app, R.string.configure_apps));
+ }
+ if (DefaultSmsPreferenceController.hasSmsPreference(mPackageName, context)) {
+ screen.addPreference(new ShortcutPreference(getPrefContext(),
+ DefaultAppSettings.class, "default_sms_app", R.string.sms_application_title,
+ R.string.configure_apps));
+ }
+
+ // Get the package info with the activities
+ PackageInfo packageInfoWithActivities = null;
+ try {
+ packageInfoWithActivities = mPm.getPackageInfoAsUser(mPackageName,
+ PackageManager.GET_ACTIVITIES, UserHandle.myUserId());
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Exception while retrieving the package info of " + mPackageName, e);
+ }
+
+ boolean hasDrawOverOtherApps = hasPermission(permission.SYSTEM_ALERT_WINDOW);
+ boolean hasWriteSettings = hasPermission(permission.WRITE_SETTINGS);
+ boolean hasPictureInPictureActivities = (packageInfoWithActivities != null) &&
+ PictureInPictureSettings.checkPackageHasPictureInPictureActivities(
+ packageInfoWithActivities.packageName,
+ packageInfoWithActivities.activities);
+ boolean isPotentialAppSource = isPotentialAppSource();
+ if (hasDrawOverOtherApps || hasWriteSettings || hasPictureInPictureActivities ||
+ isPotentialAppSource) {
+ PreferenceCategory category = new PreferenceCategory(getPrefContext());
+ category.setTitle(R.string.advanced_apps);
+ screen.addPreference(category);
+
+ if (hasDrawOverOtherApps) {
+ Preference pref = new Preference(getPrefContext());
+ pref.setTitle(R.string.draw_overlay);
+ pref.setKey("system_alert_window");
+ pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startAppInfoFragment(DrawOverlayDetails.class, R.string.draw_overlay);
+ return true;
+ }
+ });
+ category.addPreference(pref);
+ }
+ if (hasWriteSettings) {
+ Preference pref = new Preference(getPrefContext());
+ pref.setTitle(R.string.write_settings);
+ pref.setKey("write_settings_apps");
+ pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startAppInfoFragment(WriteSettingsDetails.class, R.string.write_settings);
+ return true;
+ }
+ });
+ category.addPreference(pref);
+ }
+ if (hasPictureInPictureActivities) {
+ Preference pref = new Preference(getPrefContext());
+ pref.setTitle(R.string.picture_in_picture_app_detail_title);
+ pref.setKey("picture_in_picture");
+ pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ AppInfoBase.startAppInfoFragment(PictureInPictureDetails.class,
+ R.string.picture_in_picture_app_detail_title, mPackageName,
+ mPackageInfo.applicationInfo.uid, AppInfoDashboardFragment.this,
+ -1, getMetricsCategory());
+ return true;
+ }
+ });
+ category.addPreference(pref);
+ }
+ if (isPotentialAppSource) {
+ Preference pref = new Preference(getPrefContext());
+ pref.setTitle(R.string.install_other_apps);
+ pref.setKey("install_other_apps");
+ pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startAppInfoFragment(ExternalSourcesDetails.class,
+ R.string.install_other_apps);
+ return true;
+ }
+ });
+ category.addPreference(pref);
+ }
+ }
+
+ addAppInstallerInfoPref(screen);
+ maybeAddInstantAppButtons();
+ }
+
+ private boolean isPotentialAppSource() {
+ AppStateInstallAppsBridge.InstallAppsState appState =
+ new AppStateInstallAppsBridge(getContext(), null, null)
+ .createInstallAppsStateFor(mPackageName, mPackageInfo.applicationInfo.uid);
+ return appState.isPotentialAppSource();
+ }
+
+ private void addAppInstallerInfoPref(PreferenceScreen screen) {
+ String installerPackageName =
+ AppStoreUtil.getInstallerPackageName(getContext(), mPackageName);
+
+ final CharSequence installerLabel = Utils.getApplicationLabel(getContext(),
+ installerPackageName);
+ if (installerLabel == null) {
+ return;
+ }
+ final int detailsStringId = AppUtils.isInstant(mPackageInfo.applicationInfo)
+ ? R.string.instant_app_details_summary
+ : R.string.app_install_details_summary;
+ PreferenceCategory category = new PreferenceCategory(getPrefContext());
+ category.setTitle(R.string.app_install_details_group_title);
+ screen.addPreference(category);
+ Preference pref = new Preference(getPrefContext());
+ pref.setTitle(R.string.app_install_details_title);
+ pref.setKey("app_info_store");
+ pref.setSummary(getString(detailsStringId, installerLabel));
+
+ Intent intent =
+ AppStoreUtil.getAppStoreLink(getContext(), installerPackageName, mPackageName);
+ if (intent != null) {
+ pref.setIntent(intent);
+ } else {
+ pref.setEnabled(false);
+ }
+ category.addPreference(pref);
+ }
+
+ @VisibleForTesting
+ void maybeAddInstantAppButtons() {
+ if (AppUtils.isInstant(mPackageInfo.applicationInfo)) {
+ LayoutPreference buttons = (LayoutPreference) findPreference(KEY_INSTANT_APP_BUTTONS);
+ mInstantAppButtonsController = mApplicationFeatureProvider
+ .newInstantAppButtonsController(this,
+ buttons.findViewById(R.id.instant_app_button_container),
+ id -> showDialogInner(id, 0))
+ .setPackageName(mPackageName)
+ .show();
+ }
+ }
+
+ private boolean hasPermission(String permission) {
+ if (mPackageInfo == null || mPackageInfo.requestedPermissions == null) {
+ return false;
+ }
+ for (int i = 0; i < mPackageInfo.requestedPermissions.length; i++) {
+ if (mPackageInfo.requestedPermissions[i].equals(permission)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void updateDynamicPrefs() {
+ final Context context = getContext();
+ Preference pref = findPreference("default_home");
+
+ if (pref != null) {
+ pref.setSummary(DefaultHomePreferenceController.isHomeDefault(mPackageName,
+ new PackageManagerWrapper(context.getPackageManager()))
+ ? R.string.yes : R.string.no);
+ }
+ pref = findPreference("default_browser");
+ if (pref != null) {
+ pref.setSummary(new DefaultBrowserPreferenceController(context)
+ .isBrowserDefault(mPackageName, mUserId)
+ ? R.string.yes : R.string.no);
+ }
+ pref = findPreference("default_phone_app");
+ if (pref != null) {
+ pref.setSummary(
+ DefaultPhonePreferenceController.isPhoneDefault(mPackageName, context)
+ ? R.string.yes : R.string.no);
+ }
+ pref = findPreference("default_emergency_app");
+ if (pref != null) {
+ pref.setSummary(DefaultEmergencyPreferenceController.isEmergencyDefault(mPackageName,
+ getContext()) ? R.string.yes : R.string.no);
+ }
+ pref = findPreference("default_sms_app");
+ if (pref != null) {
+ pref.setSummary(DefaultSmsPreferenceController.isSmsDefault(mPackageName, context)
+ ? R.string.yes : R.string.no);
+ }
+ pref = findPreference("system_alert_window");
+ if (pref != null) {
+ pref.setSummary(DrawOverlayDetails.getSummary(getContext(), mAppEntry));
+ }
+ pref = findPreference("picture_in_picture");
+ if (pref != null) {
+ pref.setSummary(PictureInPictureDetails.getPreferenceSummary(getContext(),
+ mPackageInfo.applicationInfo.uid, mPackageName));
+ }
+ pref = findPreference("write_settings_apps");
+ if (pref != null) {
+ pref.setSummary(WriteSettingsDetails.getSummary(getContext(), mAppEntry));
+ }
+ pref = findPreference("install_other_apps");
+ if (pref != null) {
+ pref.setSummary(ExternalSourcesDetails.getPreferenceSummary(getContext(), mAppEntry));
+ }
+ }
+
+ public static NetworkTemplate getTemplate(Context context) {
+ if (DataUsageList.hasReadyMobileRadio(context)) {
+ return NetworkTemplate.buildTemplateMobileWildcard();
+ }
+ if (DataUsageUtils.hasWifiRadio(context)) {
+ return NetworkTemplate.buildTemplateWifiWildcard();
+ }
+ return NetworkTemplate.buildTemplateEthernet();
+ }
+
+ public static CharSequence getNotificationSummary(AppEntry appEntry, Context context,
+ NotificationBackend backend) {
+ AppRow appRow = backend.loadAppRow(context, context.getPackageManager(), appEntry.info);
+ return getNotificationSummary(appRow, context);
+ }
+
+ public static CharSequence getNotificationSummary(AppRow appRow, Context context) {
+ // TODO: implement summary when it is known what it should say
+ return "";
+ }
+
+ private void onPackageRemoved() {
+ getActivity().finishActivity(SUB_INFO_FRAGMENT);
+ getActivity().finishAndRemoveTask();
+ }
+
+ private class MemoryUpdater extends AsyncTask<Void, Void, ProcStatsPackageEntry> {
+
+ @Override
+ protected ProcStatsPackageEntry doInBackground(Void... params) {
+ if (getActivity() == null) {
+ return null;
+ }
+ if (mPackageInfo == null) {
+ return null;
+ }
+ if (mStatsManager == null) {
+ mStatsManager = new ProcStatsData(getActivity(), false);
+ mStatsManager.setDuration(ProcessStatsBase.sDurations[0]);
+ }
+ mStatsManager.refreshStats(true);
+ for (ProcStatsPackageEntry pkgEntry : mStatsManager.getEntries()) {
+ for (ProcStatsEntry entry : pkgEntry.mEntries) {
+ if (entry.mUid == mPackageInfo.applicationInfo.uid) {
+ pkgEntry.updateMetrics();
+ return pkgEntry;
+ }
+ }
+ }
+ return null;
+ }
+
+ @Override
+ protected void onPostExecute(ProcStatsPackageEntry entry) {
+ if (getActivity() == null) {
+ return;
+ }
+ if (entry != null) {
+ mStats = entry;
+ mMemoryPreference.setEnabled(true);
+ double amount = Math.max(entry.mRunWeight, entry.mBgWeight)
+ * mStatsManager.getMemInfo().weightToRam;
+ mMemoryPreference.setSummary(getString(R.string.memory_use_summary,
+ Formatter.formatShortFileSize(getContext(), (long) amount)));
+ } else {
+ mMemoryPreference.setEnabled(false);
+ mMemoryPreference.setSummary(getString(R.string.no_memory_use_summary));
+ }
+ }
+
+ }
+
+ /**
+ * Elicit this class for testing. Test cannot be done in robolectric because it
+ * invokes the new API.
+ */
+ @VisibleForTesting
+ public static class PackageUtil {
+ /**
+ * Count how many users in device have installed package {@paramref packageName}
+ */
+ public static int countPackageInUsers(PackageManager packageManager, UserManager
+ userManager, String packageName) {
+ final List<UserInfo> userInfos = userManager.getUsers(true);
+ int count = 0;
+
+ for (final UserInfo userInfo : userInfos) {
+ try {
+ // Use this API to check whether user has this package
+ final ApplicationInfo info = packageManager.getApplicationInfoAsUser(
+ packageName, PackageManager.GET_META_DATA, userInfo.id);
+ if ((info.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
+ count++;
+ }
+ } catch(NameNotFoundException e) {
+ Log.e(TAG, "Package: " + packageName + " not found for user: " + userInfo.id);
+ }
+ }
+
+ return count;
+ }
+ }
+
+ private static class DisableChanger extends AsyncTask<Object, Object, Object> {
+ final PackageManager mPm;
+ final WeakReference<AppInfoDashboardFragment> mActivity;
+ final ApplicationInfo mInfo;
+ final int mState;
+
+ DisableChanger(AppInfoDashboardFragment activity, ApplicationInfo info, int state) {
+ mPm = activity.mPm;
+ mActivity = new WeakReference<AppInfoDashboardFragment>(activity);
+ mInfo = info;
+ mState = state;
+ }
+
+ @Override
+ protected Object doInBackground(Object... params) {
+ mPm.setApplicationEnabledSetting(mInfo.packageName, mState, 0);
+ return null;
+ }
+ }
+
+ private final LoaderCallbacks<ChartData> mDataCallbacks = new LoaderCallbacks<ChartData>() {
+
+ @Override
+ public Loader<ChartData> onCreateLoader(int id, Bundle args) {
+ return new ChartDataLoader(getActivity(), mStatsSession, args);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<ChartData> loader, ChartData data) {
+ mChartData = data;
+ mDataPreference.setSummary(getDataSummary());
+ }
+
+ @Override
+ public void onLoaderReset(Loader<ChartData> loader) {
+ // Leave last result.
+ }
+ };
+
+ private final BroadcastReceiver mCheckKillProcessesReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final boolean enabled = getResultCode() != Activity.RESULT_CANCELED;
+ Log.d(LOG_TAG, "Got broadcast response: Restart status for "
+ + mAppEntry.info.packageName + " " + enabled);
+ updateForceStopButton(enabled);
+ }
+ };
+
+ private final PermissionsResultCallback mPermissionCallback
+ = new PermissionsResultCallback() {
+ @Override
+ public void onPermissionSummaryResult(int standardGrantedPermissionCount,
+ int requestedPermissionCount, int additionalGrantedPermissionCount,
+ List<CharSequence> grantedGroupLabels) {
+ if (getActivity() == null) {
+ return;
+ }
+ final Resources res = getResources();
+ CharSequence summary = null;
+
+ if (requestedPermissionCount == 0) {
+ summary = res.getString(
+ R.string.runtime_permissions_summary_no_permissions_requested);
+ mPermissionsPreference.setOnPreferenceClickListener(null);
+ mPermissionsPreference.setEnabled(false);
+ } else {
+ final ArrayList<CharSequence> list = new ArrayList<>(grantedGroupLabels);
+ if (additionalGrantedPermissionCount > 0) {
+ // N additional permissions.
+ list.add(res.getQuantityString(
+ R.plurals.runtime_permissions_additional_count,
+ additionalGrantedPermissionCount, additionalGrantedPermissionCount));
+ }
+ if (list.size() == 0) {
+ summary = res.getString(
+ R.string.runtime_permissions_summary_no_permissions_granted);
+ } else {
+ summary = ListFormatter.getInstance().format(list);
+ }
+ mPermissionsPreference.setOnPreferenceClickListener(AppInfoDashboardFragment.this);
+ mPermissionsPreference.setEnabled(true);
+ }
+ mPermissionsPreference.setSummary(summary);
+ }
+ };
+
+ private String retrieveAppEntry() {
+ final Bundle args = getArguments();
+ mPackageName = (args != null) ? args.getString(ARG_PACKAGE_NAME) : null;
+ if (mPackageName == null) {
+ Intent intent = (args == null) ?
+ getActivity().getIntent() : (Intent) args.getParcelable("intent");
+ if (intent != null) {
+ mPackageName = intent.getData().getSchemeSpecificPart();
+ }
+ }
+ mUserId = UserHandle.myUserId();
+ mAppEntry = mState.getEntry(mPackageName, mUserId);
+ if (mAppEntry != null) {
+ // Get application info again to refresh changed properties of application
+ try {
+ mPackageInfo = mPm.getPackageInfo(mAppEntry.info.packageName,
+ PackageManager.MATCH_DISABLED_COMPONENTS |
+ PackageManager.MATCH_ANY_USER |
+ PackageManager.GET_SIGNATURES |
+ PackageManager.GET_PERMISSIONS);
+ } catch (NameNotFoundException e) {
+ Log.e(TAG, "Exception when retrieving package:" + mAppEntry.info.packageName, e);
+ }
+ } else {
+ Log.w(TAG, "Missing AppEntry; maybe reinstalling?");
+ mPackageInfo = null;
+ }
+
+ return mPackageName;
+ }
+
+ private void setIntentAndFinish(boolean finish, boolean appChanged) {
+ if (localLOGV) Log.i(TAG, "appChanged="+appChanged);
+ Intent intent = new Intent();
+ intent.putExtra(ManageApplications.APP_CHG, appChanged);
+ SettingsActivity sa = (SettingsActivity)getActivity();
+ sa.finishPreferencePanel(this, Activity.RESULT_OK, intent);
+ mFinishing = true;
+ }
+
+ private void showDialogInner(int id, int moveErrorCode) {
+ DialogFragment newFragment =
+ AppInfoBase.MyAlertDialogFragment.newInstance(id, moveErrorCode);
+ newFragment.setTargetFragment(this, 0);
+ newFragment.show(getFragmentManager(), "dialog " + id);
+ }
+
+ @Override
+ public void onRunningStateChanged(boolean running) {
+ // No op.
+ }
+
+ @Override
+ public void onRebuildComplete(ArrayList<AppEntry> apps) {
+ // No op.
+ }
+
+ @Override
+ public void onPackageIconChanged() {
+ // No op.
+ }
+
+ @Override
+ public void onAllSizesComputed() {
+ // No op.
+ }
+
+ @Override
+ public void onLauncherInfoChanged() {
+ // No op.
+ }
+
+ @Override
+ public void onLoadEntriesCompleted() {
+ // No op.
+ }
+
+ @Override
+ public void onPackageListChanged() {
+ if (!refreshUi()) {
+ setIntentAndFinish(true, true);
+ }
+ }
+
+ public static void startAppInfoFragment(Class<?> fragment, int titleRes,
+ String pkg, int uid, Fragment source, int request, int sourceMetricsCategory) {
+ startAppInfoFragment(fragment, titleRes, pkg, uid, source.getActivity(), request,
+ sourceMetricsCategory);
+ }
+
+ public static void startAppInfoFragment(Class<?> fragment, int titleRes,
+ String pkg, int uid, Activity source, int request, int sourceMetricsCategory) {
+ Bundle args = new Bundle();
+ args.putString(AppInfoBase.ARG_PACKAGE_NAME, pkg);
+ args.putInt(AppInfoBase.ARG_PACKAGE_UID, uid);
+
+ Intent intent = Utils.onBuildStartFragmentIntent(source, fragment.getName(),
+ args, null, titleRes, null, false, sourceMetricsCategory);
+ source.startActivityForResultAsUser(intent, request,
+ new UserHandle(UserHandle.getUserId(uid)));
+ }
+
+ public static class MyAlertDialogFragment extends InstrumentedDialogFragment {
+
+ private static final String ARG_ID = "id";
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.DIALOG_APP_INFO_ACTION;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ int id = getArguments().getInt(ARG_ID);
+ int errorCode = getArguments().getInt("moveError");
+ Dialog dialog = ((AppInfoBase) getTargetFragment()).createDialog(id, errorCode);
+ if (dialog == null) {
+ throw new IllegalArgumentException("unknown id " + id);
+ }
+ return dialog;
+ }
+
+ public static AppInfoBase.MyAlertDialogFragment newInstance(int id, int errorCode) {
+ AppInfoBase.MyAlertDialogFragment
+ dialogFragment = new AppInfoBase.MyAlertDialogFragment();
+ Bundle args = new Bundle();
+ args.putInt(ARG_ID, id);
+ args.putInt("moveError", errorCode);
+ dialogFragment.setArguments(args);
+ return dialogFragment;
+ }
+ }
+
+ private void startListeningToPackageRemove() {
+ if (mListeningToPackageRemove) {
+ return;
+ }
+ mListeningToPackageRemove = true;
+ final IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REMOVED);
+ filter.addDataScheme("package");
+ getContext().registerReceiver(mPackageRemovedReceiver, filter);
+ }
+
+ private void stopListeningToPackageRemove() {
+ if (!mListeningToPackageRemove) {
+ return;
+ }
+ mListeningToPackageRemove = false;
+ getContext().unregisterReceiver(mPackageRemovedReceiver);
+ }
+
+ private final BroadcastReceiver mPackageRemovedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String packageName = intent.getData().getSchemeSpecificPart();
+ if (!mFinishing && (mAppEntry == null || mAppEntry.info == null
+ || TextUtils.equals(mAppEntry.info.packageName, packageName))) {
+ onPackageRemoved();
+ }
+ }
+ };
+
+}
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index 8b8f9cf..91d1cb3 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -121,7 +121,10 @@
* System applications that do not want clear user data do not have this option.
* For non-system applications, there is no option to clear data. Instead there is an option to
* uninstall the application.
+ *
+ * deprecated in favor of {@link AppInfoDashboardFragment}
*/
+@Deprecated
public class InstalledAppDetails extends AppInfoBase
implements OnPreferenceClickListener, LoaderManager.LoaderCallbacks<AppStorageStats> {
diff --git a/src/com/android/settings/applications/InstalledAppDetailsTop.java b/src/com/android/settings/applications/InstalledAppDetailsTop.java
index 8072694..174a86a 100644
--- a/src/com/android/settings/applications/InstalledAppDetailsTop.java
+++ b/src/com/android/settings/applications/InstalledAppDetailsTop.java
@@ -17,21 +17,29 @@
package com.android.settings.applications;
import android.content.Intent;
+import android.util.FeatureFlagUtils;
import com.android.settings.SettingsActivity;
+import com.android.settings.core.FeatureFlags;
public class InstalledAppDetailsTop extends SettingsActivity {
@Override
public Intent getIntent() {
Intent modIntent = new Intent(super.getIntent());
- modIntent.putExtra(EXTRA_SHOW_FRAGMENT, InstalledAppDetails.class.getName());
+ if (FeatureFlagUtils.isEnabled(this, FeatureFlags.APP_INFO_V2)) {
+ modIntent.putExtra(EXTRA_SHOW_FRAGMENT, AppInfoDashboardFragment.class.getName());
+ } else {
+ modIntent.putExtra(EXTRA_SHOW_FRAGMENT, InstalledAppDetails.class.getName());
+ }
return modIntent;
}
@Override
protected boolean isValidFragment(String fragmentName) {
- if (InstalledAppDetails.class.getName().equals(fragmentName)) return true;
- return false;
+ if (FeatureFlagUtils.isEnabled(this, FeatureFlags.APP_INFO_V2)) {
+ return AppInfoDashboardFragment.class.getName().equals(fragmentName);
+ }
+ return InstalledAppDetails.class.getName().equals(fragmentName);
}
}
diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java
index 090a5a7..c613a7b 100644
--- a/src/com/android/settings/applications/RecentAppsPreferenceController.java
+++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java
@@ -34,11 +34,13 @@
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
+import android.util.FeatureFlagUtils;
import android.util.IconDrawableFactory;
import android.util.Log;
import com.android.settings.R;
import com.android.settings.Utils;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.AppPreference;
import com.android.settingslib.applications.ApplicationsState;
@@ -241,10 +243,17 @@
System.currentTimeMillis() - stat.getLastTimeUsed(), false));
pref.setOrder(i);
pref.setOnPreferenceClickListener(preference -> {
- AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
- R.string.application_info_label, pkgName, appEntry.info.uid, mHost,
- 1001 /*RequestCode*/, SETTINGS_APP_NOTIF_CATEGORY);
- return true;
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.APP_INFO_V2)) {
+ AppInfoBase.startAppInfoFragment(AppInfoDashboardFragment.class,
+ R.string.application_info_label, pkgName, appEntry.info.uid, mHost,
+ 1001 /*RequestCode*/, SETTINGS_APP_NOTIF_CATEGORY);
+ return true;
+ } else {
+ AppInfoBase.startAppInfoFragment(InstalledAppDetails.class,
+ R.string.application_info_label, pkgName, appEntry.info.uid, mHost,
+ 1001 /*RequestCode*/, SETTINGS_APP_NOTIF_CATEGORY);
+ return true;
+ }
});
if (!rebindPref) {
mCategory.addPreference(pref);
diff --git a/src/com/android/settings/applications/manageapplications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
index d55c996..e9d105d 100644
--- a/src/com/android/settings/applications/manageapplications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -50,6 +50,7 @@
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.ArraySet;
+import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -95,6 +96,8 @@
import com.android.settings.applications.NotificationApps;
import com.android.settings.applications.UsageAccessDetails;
import com.android.settings.applications.WriteSettingsDetails;
+import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.fuelgauge.HighPowerDetail;
@@ -538,7 +541,13 @@
// process ahead of time, to avoid a long load of data when user clicks on a managed
// app. Maybe when they load the list of apps that contains managed profile apps.
default:
- startAppInfoFragment(InstalledAppDetails.class, R.string.application_info_label);
+ if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.APP_INFO_V2)) {
+ startAppInfoFragment(
+ AppInfoDashboardFragment.class, R.string.application_info_label);
+ } else {
+ startAppInfoFragment(
+ InstalledAppDetails.class, R.string.application_info_label);
+ }
break;
}
}
diff --git a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
index 043cb95..a0ce733 100644
--- a/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
+++ b/src/com/android/settings/bluetooth/BluetoothDevicePreference.java
@@ -52,19 +52,19 @@
private final CachedBluetoothDevice mCachedDevice;
private final UserManager mUserManager;
+ private final boolean mShowDevicesWithoutNames;
private AlertDialog mDisconnectDialog;
private String contentDescription = null;
- private DeviceListPreferenceFragment mDeviceListPreferenceFragment;
/* Talk-back descriptions for various BT icons */
Resources mResources;
public BluetoothDevicePreference(Context context, CachedBluetoothDevice cachedDevice,
- DeviceListPreferenceFragment deviceListPreferenceFragment) {
+ boolean showDeviceWithoutNames) {
super(context, null);
mResources = getContext().getResources();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- mDeviceListPreferenceFragment = deviceListPreferenceFragment;
+ mShowDevicesWithoutNames = showDeviceWithoutNames;
if (sDimAlpha == Integer.MIN_VALUE) {
TypedValue outValue = new TypedValue();
@@ -134,8 +134,7 @@
// Device is only visible in the UI if it has a valid name besides MAC address or when user
// allows showing devices without user-friendly name in developer settings
- setVisible(mDeviceListPreferenceFragment.shouldShowDevicesWithoutNames()
- || mCachedDevice.hasHumanReadableName());
+ setVisible(mShowDevicesWithoutNames || mCachedDevice.hasHumanReadableName());
// This could affect ordering, so notify that
notifyHierarchyChanged();
diff --git a/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
new file mode 100644
index 0000000..e053bc9
--- /dev/null
+++ b/src/com/android/settings/bluetooth/BluetoothDeviceUpdater.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2017 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.bluetooth;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.os.Bundle;
+import android.os.SystemProperties;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.connecteddevice.DevicePreferenceCallback;
+import com.android.settings.widget.GearPreference;
+import com.android.settingslib.bluetooth.BluetoothCallback;
+import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Update the bluetooth devices. It gets bluetooth event from {@link LocalBluetoothManager} using
+ * {@link BluetoothCallback}. It notifies the upper level whether to add/remove the preference
+ * through {@link DevicePreferenceCallback}
+ *
+ * In {@link BluetoothDeviceUpdater}, it uses {@link BluetoothDeviceFilter.Filter} to detect
+ * whether the {@link CachedBluetoothDevice} is relevant.
+ */
+public abstract class BluetoothDeviceUpdater implements BluetoothCallback {
+ private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
+ "persist.bluetooth.showdeviceswithoutnames";
+
+ protected final LocalBluetoothManager mLocalManager;
+ protected final DevicePreferenceCallback mDevicePreferenceCallback;
+ protected final Map<BluetoothDevice, Preference> mPreferenceMap;
+ protected Context mPrefContext;
+
+ private final boolean mShowDeviceWithoutNames;
+ private DashboardFragment mFragment;
+
+ @VisibleForTesting
+ final GearPreference.OnGearClickListener mDeviceProfilesListener = pref -> {
+ final CachedBluetoothDevice device =
+ ((BluetoothDevicePreference) pref).getBluetoothDevice();
+ if (device == null) {
+ return;
+ }
+ final Bundle args = new Bundle();
+ args.putString(BluetoothDeviceDetailsFragment.KEY_DEVICE_ADDRESS,
+ device.getDevice().getAddress());
+ final SettingsActivity activity = (SettingsActivity) mFragment.getActivity();
+ activity.startPreferencePanel(mFragment,
+ BluetoothDeviceDetailsFragment.class.getName(), args,
+ R.string.device_details_title, null, null, 0);
+
+ };
+
+ public BluetoothDeviceUpdater(DashboardFragment fragment,
+ DevicePreferenceCallback devicePreferenceCallback) {
+ this(fragment, devicePreferenceCallback, Utils.getLocalBtManager(fragment.getContext()));
+ }
+
+ @VisibleForTesting
+ BluetoothDeviceUpdater(DashboardFragment fragment,
+ DevicePreferenceCallback devicePreferenceCallback, LocalBluetoothManager localManager) {
+ mFragment = fragment;
+ mDevicePreferenceCallback = devicePreferenceCallback;
+ mShowDeviceWithoutNames = SystemProperties.getBoolean(
+ BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false);
+ mPreferenceMap = new HashMap<>();
+ mLocalManager = localManager;
+ }
+
+ /**
+ * Register the bluetooth event callback and update the list
+ */
+ public void registerCallback() {
+ mLocalManager.setForegroundActivity(mFragment.getContext());
+ mLocalManager.getEventManager().registerCallback(this);
+ forceUpdate();
+ }
+
+ /**
+ * Unregister the bluetooth event callback
+ */
+ public void unregisterCallback() {
+ mLocalManager.setForegroundActivity(null);
+ mLocalManager.getEventManager().unregisterCallback(this);
+ }
+
+ /**
+ * Force to update the list of bluetooth devices
+ */
+ public void forceUpdate() {
+ Collection<CachedBluetoothDevice> cachedDevices =
+ mLocalManager.getCachedDeviceManager().getCachedDevicesCopy();
+ for (CachedBluetoothDevice cachedBluetoothDevice : cachedDevices) {
+ update(cachedBluetoothDevice);
+ }
+ }
+
+ @Override
+ public void onBluetoothStateChanged(int bluetoothState) {
+ forceUpdate();
+ }
+
+ @Override
+ public void onScanningStateChanged(boolean started) {}
+
+ @Override
+ public void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
+ update(cachedDevice);
+ }
+
+ @Override
+ public void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {}
+
+ @Override
+ public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
+ update(cachedDevice);
+ }
+
+ @Override
+ public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {}
+
+ /**
+ * Set the context to generate the {@link Preference}, so it could get the correct theme.
+ */
+ public void setPrefContext(Context context) {
+ mPrefContext = context;
+ }
+
+ /**
+ * Update whether to show {@cde cachedBluetoothDevice} in the list.
+ */
+ abstract public void update(CachedBluetoothDevice cachedBluetoothDevice);
+
+ /**
+ * Add the {@link Preference} that represents the {@code cachedDevice}
+ */
+ protected void addPreference(CachedBluetoothDevice cachedDevice) {
+ final BluetoothDevice device = cachedDevice.getDevice();
+ if (!mPreferenceMap.containsKey(device)) {
+ BluetoothDevicePreference btPreference =
+ new BluetoothDevicePreference(mPrefContext, cachedDevice,
+ mShowDeviceWithoutNames);
+ btPreference.setOnGearClickListener(mDeviceProfilesListener);
+ mPreferenceMap.put(device, btPreference);
+ mDevicePreferenceCallback.onDeviceAdded(btPreference);
+ }
+ }
+
+ /**
+ * Remove the {@link Preference} that represents the {@code cachedDevice}
+ */
+ protected void removePreference(CachedBluetoothDevice cachedDevice) {
+ final BluetoothDevice device = cachedDevice.getDevice();
+ if (mPreferenceMap.containsKey(device)) {
+ mDevicePreferenceCallback.onDeviceRemoved(mPreferenceMap.get(device));
+ mPreferenceMap.remove(device);
+ }
+ }
+}
diff --git a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java
index 8d9e1c4..c4962d6 100644
--- a/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java
+++ b/src/com/android/settings/bluetooth/BluetoothFeatureProviderImpl.java
@@ -14,4 +14,4 @@
public boolean isDeviceDetailPageEnabled() {
return false;
}
-}
+}
\ No newline at end of file
diff --git a/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java
new file mode 100644
index 0000000..239e405
--- /dev/null
+++ b/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdater.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2017 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.bluetooth;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.settings.connecteddevice.DevicePreferenceCallback;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+import com.android.settingslib.bluetooth.LocalBluetoothManager;
+
+/**
+ * Controller to maintain connected bluetooth devices
+ */
+public class ConnectedBluetoothDeviceUpdater extends BluetoothDeviceUpdater {
+
+ public ConnectedBluetoothDeviceUpdater(DashboardFragment fragment,
+ DevicePreferenceCallback devicePreferenceCallback) {
+ super(fragment, devicePreferenceCallback);
+ }
+
+ @VisibleForTesting
+ ConnectedBluetoothDeviceUpdater(DashboardFragment fragment,
+ DevicePreferenceCallback devicePreferenceCallback,
+ LocalBluetoothManager localBluetoothManager) {
+ super(fragment, devicePreferenceCallback, localBluetoothManager);
+ }
+
+ @Override
+ public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
+ if (state == BluetoothAdapter.STATE_CONNECTED) {
+ addPreference(cachedDevice);
+ } else if (state == BluetoothAdapter.STATE_DISCONNECTED) {
+ removePreference(cachedDevice);
+ }
+ }
+
+ @Override
+ public void update(CachedBluetoothDevice cachedDevice) {
+ final BluetoothDevice device = cachedDevice.getDevice();
+ final boolean filterMatch =
+ device.getBondState() == BluetoothDevice.BOND_BONDED && device.isConnected();
+
+ if (filterMatch) {
+ // Add the preference if it is new one
+ addPreference(cachedDevice);
+ } else {
+ removePreference(cachedDevice);
+ }
+ }
+}
diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
index 9d47c65..0a90edc 100644
--- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
+++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
@@ -27,8 +27,8 @@
import android.text.BidiFormatter;
import android.util.Log;
-import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.R;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settingslib.bluetooth.BluetoothCallback;
import com.android.settingslib.bluetooth.BluetoothDeviceFilter;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
@@ -98,6 +98,8 @@
return;
}
mLocalAdapter = mLocalManager.getBluetoothAdapter();
+ mShowDevicesWithoutNames = SystemProperties.getBoolean(
+ BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false);
initPreferencesFromPreferenceScreen();
@@ -110,8 +112,6 @@
@Override
public void onStart() {
super.onStart();
- mShowDevicesWithoutNames = SystemProperties.getBoolean(
- BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false);
if (mLocalManager == null || isUiRestricted()) return;
mLocalManager.setForegroundActivity(getActivity());
@@ -190,7 +190,8 @@
BluetoothDevicePreference preference = (BluetoothDevicePreference) getCachedPreference(key);
if (preference == null) {
- preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice, this);
+ preference = new BluetoothDevicePreference(getPrefContext(), cachedDevice,
+ mShowDevicesWithoutNames);
preference.setKey(key);
mDeviceListGroup.addPreference(preference);
} else {
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
index 483b00c..14acd89 100644
--- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java
@@ -17,33 +17,25 @@
import android.app.Activity;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.provider.SearchIndexableResource;
import android.support.annotation.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
-import com.android.settings.SettingsActivity;
-import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController;
-import com.android.settings.bluetooth.Utils;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.deviceinfo.UsbBackend;
import com.android.settings.nfc.NfcPreferenceController;
-import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
public class ConnectedDeviceDashboardFragment extends DashboardFragment {
private static final String TAG = "ConnectedDeviceFrag";
- private UsbModePreferenceController mUsbPrefController;
@Override
public int getMetricsCategory() {
@@ -69,26 +61,12 @@
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
final Lifecycle lifecycle = getLifecycle();
- final NfcPreferenceController nfcPreferenceController =
- new NfcPreferenceController(context);
- lifecycle.addObserver(nfcPreferenceController);
- controllers.add(nfcPreferenceController);
- mUsbPrefController = new UsbModePreferenceController(context, new UsbBackend(context));
- lifecycle.addObserver(mUsbPrefController);
- controllers.add(mUsbPrefController);
- final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController =
- new BluetoothMasterSwitchPreferenceController(
- context, Utils.getLocalBtManager(context), this,
- (SettingsActivity) getActivity());
- lifecycle.addObserver(bluetoothPreferenceController);
- controllers.add(bluetoothPreferenceController);
- SmsMirroringFeatureProvider smsMirroringFeatureProvider =
- FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider();
- AbstractPreferenceController smsMirroringController =
- smsMirroringFeatureProvider.getController(context);
- controllers.add(smsMirroringController);
+ final ConnectedDeviceGroupController connectedDeviceGroupController =
+ new ConnectedDeviceGroupController(this, lifecycle);
+ controllers.add(connectedDeviceGroupController);
return controllers;
+
}
@VisibleForTesting
@@ -131,33 +109,26 @@
/**
* For Search.
*/
+ //TODO(b/69333961): update the index for this new fragment
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.connected_devices;
- return Arrays.asList(sir);
+ return new ArrayList<>();
}
@Override
public List<String> getNonIndexableKeys(Context context) {
- final List<String> keys = super.getNonIndexableKeys(context);
- PackageManager pm = context.getPackageManager();
- if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
- keys.add(NfcPreferenceController.KEY_TOGGLE_NFC);
- keys.add(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS);
- }
- keys.add(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH);
- SmsMirroringFeatureProvider smsMirroringFeatureProvider =
- FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider();
- SmsMirroringPreferenceController smsMirroringController =
- smsMirroringFeatureProvider.getController(context);
- smsMirroringController.updateNonIndexableKeys(keys);
+ return new ArrayList<>();
+ }
- return keys;
+ @Override
+ public List<AbstractPreferenceController> getPreferenceControllers(
+ Context context) {
+ //TODO(b/69333961): update the index for controllers
+ return super.getPreferenceControllers(context);
}
};
}
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java
new file mode 100644
index 0000000..6a8f26d
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2016 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.app.Activity;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.provider.SearchIndexableResource;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.bluetooth.BluetoothMasterSwitchPreferenceController;
+import com.android.settings.bluetooth.Utils;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.deviceinfo.UsbBackend;
+import com.android.settings.nfc.NfcPreferenceController;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This is the previous {@link ConnectedDeviceDashboardFragment} in Android O, in Android P the
+ * main entry will be {@link ConnectedDeviceDashboardFragment}
+ *
+ * @deprecated
+ */
+@Deprecated
+public class ConnectedDeviceDashboardFragmentOld extends DashboardFragment {
+
+ private static final String TAG = "ConnectedDeviceFrag2";
+ private UsbModePreferenceController mUsbPrefController;
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.SETTINGS_CONNECTED_DEVICE_CATEGORY;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getHelpResource() {
+ return R.string.help_url_connected_devices;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.connected_devices_old;
+ }
+
+ @Override
+ protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ final List<AbstractPreferenceController> controllers = new ArrayList<>();
+ final Lifecycle lifecycle = getLifecycle();
+ final NfcPreferenceController nfcPreferenceController =
+ new NfcPreferenceController(context);
+ lifecycle.addObserver(nfcPreferenceController);
+ controllers.add(nfcPreferenceController);
+ mUsbPrefController = new UsbModePreferenceController(context, new UsbBackend(context));
+ lifecycle.addObserver(mUsbPrefController);
+ controllers.add(mUsbPrefController);
+ final BluetoothMasterSwitchPreferenceController bluetoothPreferenceController =
+ new BluetoothMasterSwitchPreferenceController(
+ context, Utils.getLocalBtManager(context), this,
+ (SettingsActivity) getActivity());
+ lifecycle.addObserver(bluetoothPreferenceController);
+ controllers.add(bluetoothPreferenceController);
+
+ SmsMirroringFeatureProvider smsMirroringFeatureProvider =
+ FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider();
+ AbstractPreferenceController smsMirroringController =
+ smsMirroringFeatureProvider.getController(context);
+ controllers.add(smsMirroringController);
+ return controllers;
+ }
+
+ @VisibleForTesting
+ static class SummaryProvider implements SummaryLoader.SummaryProvider {
+
+ private final Context mContext;
+ private final SummaryLoader mSummaryLoader;
+ private final NfcPreferenceController mNfcPreferenceController;
+
+ public SummaryProvider(Context context, SummaryLoader summaryLoader) {
+ mContext = context;
+ mSummaryLoader = summaryLoader;
+ mNfcPreferenceController = new NfcPreferenceController(context);
+ }
+
+ @Override
+ public void setListening(boolean listening) {
+ if (listening) {
+ if (mNfcPreferenceController.isAvailable()) {
+ mSummaryLoader.setSummary(this,
+ mContext.getString(R.string.connected_devices_dashboard_summary));
+ } else {
+ mSummaryLoader.setSummary(this, mContext.getString(
+ R.string.connected_devices_dashboard_no_nfc_summary));
+ }
+ }
+ }
+ }
+
+ public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
+ = new SummaryLoader.SummaryProviderFactory() {
+ @Override
+ public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
+ SummaryLoader summaryLoader) {
+ return new SummaryProvider(activity, summaryLoader);
+ }
+ };
+
+ /**
+ * For Search.
+ */
+ public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+ new BaseSearchIndexProvider() {
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(
+ Context context, boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.connected_devices_old;
+ return Arrays.asList(sir);
+ }
+
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ final List<String> keys = super.getNonIndexableKeys(context);
+ PackageManager pm = context.getPackageManager();
+ if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC)) {
+ keys.add(NfcPreferenceController.KEY_TOGGLE_NFC);
+ keys.add(NfcPreferenceController.KEY_ANDROID_BEAM_SETTINGS);
+ }
+ keys.add(BluetoothMasterSwitchPreferenceController.KEY_TOGGLE_BLUETOOTH);
+
+ SmsMirroringFeatureProvider smsMirroringFeatureProvider =
+ FeatureFactory.getFactory(context).getSmsMirroringFeatureProvider();
+ SmsMirroringPreferenceController smsMirroringController =
+ smsMirroringFeatureProvider.getController(context);
+ smsMirroringController.updateNonIndexableKeys(keys);
+
+ return keys;
+ }
+ };
+}
diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java
new file mode 100644
index 0000000..a0b5cb8
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/ConnectedDeviceGroupController.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2017 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.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceGroup;
+import android.support.v7.preference.PreferenceScreen;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.bluetooth.BluetoothDeviceUpdater;
+import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater;
+import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.core.lifecycle.events.OnStart;
+import com.android.settingslib.core.lifecycle.events.OnStop;
+
+/**
+ * Controller to maintain the {@link android.support.v7.preference.PreferenceGroup} for all
+ * connected devices. It uses {@link DevicePreferenceCallback} to add/remove {@link Preference}
+ */
+public class ConnectedDeviceGroupController extends AbstractPreferenceController
+ implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop,
+ DevicePreferenceCallback {
+
+ private static final String KEY = "connected_device_list";
+
+ @VisibleForTesting
+ PreferenceGroup mPreferenceGroup;
+ private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
+
+ public ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle) {
+ super(fragment.getContext());
+ init(lifecycle, new ConnectedBluetoothDeviceUpdater(fragment, this));
+ }
+
+ @VisibleForTesting
+ ConnectedDeviceGroupController(DashboardFragment fragment, Lifecycle lifecycle,
+ BluetoothDeviceUpdater bluetoothDeviceUpdater) {
+ super(fragment.getContext());
+ init(lifecycle, bluetoothDeviceUpdater);
+ }
+
+ @Override
+ public void onStart() {
+ mBluetoothDeviceUpdater.registerCallback();
+ }
+
+ @Override
+ public void onStop() {
+ mBluetoothDeviceUpdater.unregisterCallback();
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreferenceGroup = (PreferenceGroup) screen.findPreference(KEY);
+ mPreferenceGroup.setVisible(false);
+ mBluetoothDeviceUpdater.setPrefContext(screen.getContext());
+ mBluetoothDeviceUpdater.forceUpdate();
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY;
+ }
+
+ @Override
+ public void onDeviceAdded(Preference preference) {
+ if (mPreferenceGroup.getPreferenceCount() == 0) {
+ mPreferenceGroup.setVisible(true);
+ }
+ mPreferenceGroup.addPreference(preference);
+ }
+
+ @Override
+ public void onDeviceRemoved(Preference preference) {
+ mPreferenceGroup.removePreference(preference);
+ if (mPreferenceGroup.getPreferenceCount() == 0) {
+ mPreferenceGroup.setVisible(false);
+ }
+ }
+
+ private void init(Lifecycle lifecycle, BluetoothDeviceUpdater bluetoothDeviceUpdater) {
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
+ mBluetoothDeviceUpdater = bluetoothDeviceUpdater;
+ }
+}
diff --git a/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java b/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java
new file mode 100644
index 0000000..5f04700
--- /dev/null
+++ b/src/com/android/settings/connecteddevice/DevicePreferenceCallback.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2017 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.support.v7.preference.Preference;
+
+/**
+ * Callback to add or remove {@link Preference} in device group.
+ */
+public interface DevicePreferenceCallback {
+ /**
+ * Called when a device(i.e. bluetooth, usb) is added
+ * @param preference present the device
+ */
+ void onDeviceAdded(Preference preference);
+
+ /**
+ * Called when a device(i.e. bluetooth, usb) is removed
+ * @param preference present the device
+ */
+ void onDeviceRemoved(Preference preference);
+}
diff --git a/src/com/android/settings/core/FeatureFlags.java b/src/com/android/settings/core/FeatureFlags.java
index 91699d4..547318f 100644
--- a/src/com/android/settings/core/FeatureFlags.java
+++ b/src/com/android/settings/core/FeatureFlags.java
@@ -21,7 +21,8 @@
*/
public class FeatureFlags {
public static final String DEVICE_INFO_V2 = "device_info_v2";
- public static final String DEV_OPTION_V1 = "dev_option_v1";
public static final String SEARCH_V2 = "settings_search_v2";
public static final String SUGGESTIONS_V2 = "new_settings_suggestion";
+ public static final String APP_INFO_V2 = "settings_app_info_v2";
+ public static final String CONNECTED_DEVICE_V2 = "settings_connected_device_v2";
}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 3b5604b..37cd431 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -52,17 +52,18 @@
import com.android.settings.applications.UsageAccessDetails;
import com.android.settings.applications.VrListenerSettings;
import com.android.settings.applications.WriteSettingsDetails;
+import com.android.settings.applications.AppInfoDashboardFragment;
import com.android.settings.applications.assist.ManageAssist;
import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.bluetooth.BluetoothDeviceDetailsFragment;
import com.android.settings.bluetooth.BluetoothSettings;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
+import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld;
import com.android.settings.dashboard.SupportFragment;
import com.android.settings.datausage.DataPlanUsageSummary;
import com.android.settings.datausage.DataUsageList;
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
-import com.android.settings.development.DevelopmentSettings;
import com.android.settings.development.DevelopmentSettingsDashboardFragment;
import com.android.settings.deviceinfo.ImeiInformation;
import com.android.settings.deviceinfo.PrivateVolumeForget;
@@ -176,7 +177,6 @@
PrivateVolumeForget.class.getName(),
PrivateVolumeSettings.class.getName(),
PublicVolumeSettings.class.getName(),
- DevelopmentSettings.class.getName(),
DevelopmentSettingsDashboardFragment.class.getName(),
AndroidBeam.class.getName(),
WifiDisplaySettings.class.getName(),
@@ -208,6 +208,7 @@
ChooseLockPassword.ChooseLockPasswordFragment.class.getName(),
ChooseLockPattern.ChooseLockPatternFragment.class.getName(),
InstalledAppDetails.class.getName(),
+ AppInfoDashboardFragment.class.getName(),
BatterySaverSettings.class.getName(),
AppNotificationSettings.class.getName(),
ChannelNotificationSettings.class.getName(),
@@ -248,6 +249,7 @@
SystemDashboardFragment.class.getName(),
NetworkDashboardFragment.class.getName(),
ConnectedDeviceDashboardFragment.class.getName(),
+ ConnectedDeviceDashboardFragmentOld.class.getName(),
AppAndNotificationDashboardFragment.class.getName(),
UserAndAccountDashboardFragment.class.getName(),
EnterprisePrivacySettings.class.getName(),
@@ -261,6 +263,7 @@
// Home page
Settings.NetworkDashboardActivity.class.getName(),
Settings.ConnectedDeviceDashboardActivity.class.getName(),
+ Settings.ConnectedDeviceDashboardActivityOld.class.getName(),
Settings.AppAndNotificationDashboardActivity.class.getName(),
Settings.DisplaySettingsActivity.class.getName(),
Settings.SoundSettingsActivity.class.getName(),
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index 42eea2d..af00dc6 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -19,13 +19,11 @@
import android.util.ArrayMap;
import com.android.settings.DisplaySettings;
-import com.android.settings.Settings;
import com.android.settings.accounts.AccountDetailDashboardFragment;
import com.android.settings.accounts.UserAndAccountDashboardFragment;
import com.android.settings.applications.AppAndNotificationDashboardFragment;
import com.android.settings.applications.DefaultAppSettings;
-import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
-import com.android.settings.development.DevelopmentSettings;
+import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld;
import com.android.settings.development.DevelopmentSettingsDashboardFragment;
import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.fuelgauge.PowerUsageSummary;
@@ -61,7 +59,8 @@
PARENT_TO_CATEGORY_KEY_MAP = new ArrayMap<>();
PARENT_TO_CATEGORY_KEY_MAP.put(
NetworkDashboardFragment.class.getName(), CategoryKey.CATEGORY_NETWORK);
- PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragment.class.getName(),
+ //TODO(b/69471219): update ConnectedDeviceDashboardFragment once new feature is done.
+ PARENT_TO_CATEGORY_KEY_MAP.put(ConnectedDeviceDashboardFragmentOld.class.getName(),
CategoryKey.CATEGORY_DEVICE);
PARENT_TO_CATEGORY_KEY_MAP.put(AppAndNotificationDashboardFragment.class.getName(),
CategoryKey.CATEGORY_APPS);
@@ -85,13 +84,8 @@
SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndInputSettings.class.getName(),
CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
- if (Settings.DevelopmentSettingsActivity.isEnabled()) {
- PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettings.class.getName(),
- CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
- } else {
- PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettingsDashboardFragment.class.getName(),
- CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
- }
+ PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettingsDashboardFragment.class.getName(),
+ CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
PARENT_TO_CATEGORY_KEY_MAP.put(ConfigureNotificationSettings.class.getName(),
CategoryKey.CATEGORY_NOTIFICATIONS);
PARENT_TO_CATEGORY_KEY_MAP.put(LockscreenDashboardFragment.class.getName(),
diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java
index be289b2..b382b8c 100644
--- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java
+++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java
@@ -20,6 +20,7 @@
import android.os.UserHandle;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceViewHolder;
+import android.util.FeatureFlagUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -31,6 +32,8 @@
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.applications.AppStateBaseBridge;
import com.android.settings.applications.InstalledAppDetails;
+import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.AppSwitchPreference;
@@ -271,10 +274,17 @@
protected void onClick() {
if (mState.isDataSaverBlacklisted) {
// app is blacklisted, launch App Data Usage screen
- InstalledAppDetails.startAppInfoFragment(AppDataUsage.class,
- R.string.app_data_usage,
- UnrestrictedDataAccess.this,
- mEntry);
+ if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.APP_INFO_V2)) {
+ AppInfoDashboardFragment.startAppInfoFragment(AppDataUsage.class,
+ R.string.app_data_usage,
+ UnrestrictedDataAccess.this,
+ mEntry);
+ } else {
+ InstalledAppDetails.startAppInfoFragment(AppDataUsage.class,
+ R.string.app_data_usage,
+ UnrestrictedDataAccess.this,
+ mEntry);
+ }
} else {
// app is not blacklisted, let superclass handle toggle switch
super.onClick();
diff --git a/src/com/android/settings/development/BugReportInPowerPreferenceController.java b/src/com/android/settings/development/BugReportInPowerPreferenceController.java
deleted file mode 100644
index 2c448f5..0000000
--- a/src/com/android/settings/development/BugReportInPowerPreferenceController.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2016 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.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-/**
- * deprecated in favor of {@link BugReportInPowerPreferenceControllerV2}
- */
-@Deprecated
-public class BugReportInPowerPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
-
- private static final String KEY_BUGREPORT_IN_POWER = "bugreport_in_power";
-
- private UserManager mUserManager;
- private SwitchPreference mPreference;
-
- public BugReportInPowerPreferenceController(Context context) {
- super(context);
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (KEY_BUGREPORT_IN_POWER.equals(preference.getKey())) {
- final SwitchPreference switchPreference = (SwitchPreference) preference;
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU,
- switchPreference.isChecked() ? 1 : 0);
- setBugreportStorageProviderStatus();
- return true;
- }
- return false;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- if (isAvailable()) {
- mPreference = (SwitchPreference) screen.findPreference(KEY_BUGREPORT_IN_POWER);
- }
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_BUGREPORT_IN_POWER;
- }
-
- @Override
- public boolean isAvailable() {
- return !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
- }
-
- @Override
- public void updateState(Preference preference) {
- updatePreference();
- }
-
- public void enablePreference(boolean enabled) {
- if (isAvailable()) {
- mPreference.setEnabled(enabled);
- }
- }
-
- public void resetPreference() {
- if (mPreference.isChecked()) {
- mPreference.setChecked(false);
- handlePreferenceTreeClick(mPreference);
- }
- }
-
- public boolean updatePreference() {
- if (!isAvailable()) {
- return false;
- }
- final boolean enabled = Settings.Secure.getInt(
- mContext.getContentResolver(), Settings.Global.BUGREPORT_IN_POWER_MENU, 0) != 0;
- mPreference.setChecked(enabled);
- return enabled;
- }
-
- public void updateBugreportOptions() {
- if (!isAvailable()) {
- return;
- }
- mPreference.setEnabled(true);
- setBugreportStorageProviderStatus();
- }
-
- private void setBugreportStorageProviderStatus() {
- final ComponentName componentName = new ComponentName("com.android.shell",
- "com.android.shell.BugreportStorageProvider");
- final boolean enabled = mPreference.isChecked();
- mContext.getPackageManager().setComponentEnabledSetting(componentName,
- enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
- : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT,
- 0);
- }
-
-}
diff --git a/src/com/android/settings/development/BugReportPreferenceController.java b/src/com/android/settings/development/BugReportPreferenceController.java
deleted file mode 100644
index c05dd26..0000000
--- a/src/com/android/settings/development/BugReportPreferenceController.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2016 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.os.UserManager;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-/**
- * deprecated in favor of {@link BugReportPreferenceControllerV2}
- */
-@Deprecated
-public class BugReportPreferenceController extends AbstractPreferenceController implements
- PreferenceControllerMixin {
-
- private static final String KEY_BUGREPORT = "bugreport";
-
- private UserManager mUserManager;
- private Preference mPreference;
-
- public BugReportPreferenceController(Context context) {
- super(context);
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- if (isAvailable()) {
- mPreference = screen.findPreference(KEY_BUGREPORT);
- }
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_BUGREPORT;
- }
-
- @Override
- public boolean isAvailable() {
- return !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
- }
-
- public void enablePreference(boolean enabled) {
- if (isAvailable()) {
- mPreference.setEnabled(enabled);
- }
- }
-
-}
diff --git a/src/com/android/settings/development/CameraLaserSensorPreferenceController.java b/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
deleted file mode 100644
index 3f47b88..0000000
--- a/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2017 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.os.SystemProperties;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import android.widget.Toast;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-/**
- * deprecated in favor of {@link CameraLaserSensorPreferenceControllerV2}
- */
-@Deprecated
-public class CameraLaserSensorPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
-
- private static final String KEY_CAMERA_LASER_SENSOR_SWITCH = "camera_laser_sensor_switch";
- @VisibleForTesting
- static final String BUILD_TYPE = "ro.build.type";
- @VisibleForTesting
- static final String PROPERTY_CAMERA_LASER_SENSOR = "persist.camera.stats.disablehaf";
- @VisibleForTesting
- static final int ENABLED = 0;
- @VisibleForTesting
- static final int DISABLED = 2;
-
- private SwitchPreference mPreference;
-
- public CameraLaserSensorPreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mPreference = (SwitchPreference) screen.findPreference(KEY_CAMERA_LASER_SENSOR_SWITCH);
- updatePreference();
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_CAMERA_LASER_SENSOR_SWITCH;
- }
-
- @Override
- public boolean isAvailable() {
- String buildType = SystemProperties.get(BUILD_TYPE);
- return mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor) &&
- (buildType.equals("userdebug") || buildType.equals("eng"));
- }
-
- @Override
- public void updateState(Preference preference) {
- updatePreference();
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (KEY_CAMERA_LASER_SENSOR_SWITCH.equals(preference.getKey())) {
- final SwitchPreference switchPreference = (SwitchPreference)preference;
- String value = Integer.toString(switchPreference.isChecked() ? ENABLED : DISABLED);
- SystemProperties.set(PROPERTY_CAMERA_LASER_SENSOR, value);
- return true;
- }
- return false;
- }
-
- public void enablePreference(boolean enabled) {
- if (isAvailable()) {
- mPreference.setEnabled(enabled);
- }
- }
-
- public boolean updatePreference() {
- if (!isAvailable()) {
- return false;
- }
- final boolean enabled = isLaserSensorEnabled();
- mPreference.setChecked(enabled);
- return enabled;
- }
-
- private boolean isLaserSensorEnabled() {
- String prop = SystemProperties.get(PROPERTY_CAMERA_LASER_SENSOR, Integer.toString(ENABLED));
- return prop.equals(Integer.toString(ENABLED));
- }
-}
diff --git a/src/com/android/settings/development/ClearAdbKeysPreferenceController.java b/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
index 2248b89..b512757 100644
--- a/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
+++ b/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
@@ -28,6 +28,7 @@
import android.text.TextUtils;
import android.util.Log;
+import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
@@ -75,6 +76,10 @@
@Override
public boolean handlePreferenceTreeClick(Preference preference) {
+ if (Utils.isMonkeyRunning()) {
+ return false;
+ }
+
if (TextUtils.equals(preference.getKey(), getPreferenceKey())) {
ClearAdbKeysWarningDialog.show(mFragment);
return true;
diff --git a/src/com/android/settings/development/ConnectivityMonitorPreferenceController.java b/src/com/android/settings/development/ConnectivityMonitorPreferenceController.java
deleted file mode 100644
index e481809..0000000
--- a/src/com/android/settings/development/ConnectivityMonitorPreferenceController.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Copyright (C) 2017 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.os.SystemProperties;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import android.widget.Toast;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.R;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-/**
- * deprecated in favor of {@link ConnectivityMonitorPreferenceControllerV2}
- */
-@Deprecated
-public class ConnectivityMonitorPreferenceController extends AbstractPreferenceController implements
- PreferenceControllerMixin {
-
- private static final String KEY_CONNECTIVITY_MONITOR_SWITCH = "connectivity_monitor_switch";
- @VisibleForTesting
- static final String BUILD_TYPE = "ro.build.type";
- @VisibleForTesting
- static final String PROPERTY_CONNECTIVITY_MONITOR = "persist.radio.enable_tel_mon";
-
- @VisibleForTesting
- static final String ENABLED_STATUS = "enabled";
- @VisibleForTesting
- static final String DISABLED_STATUS = "disabled";
- @VisibleForTesting
- static final String USER_ENABLED_STATUS = "user_enabled";
- @VisibleForTesting
- static final String USER_DISABLED_STATUS = "user_disabled";
-
- private SwitchPreference mPreference;
-
- public ConnectivityMonitorPreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- if (isAvailable()) {
- mPreference = (SwitchPreference) screen.findPreference(KEY_CONNECTIVITY_MONITOR_SWITCH);
- mPreference.setChecked(isConnectivityMonitorEnabled());
- }
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_CONNECTIVITY_MONITOR_SWITCH;
- }
-
- @Override
- public boolean isAvailable() {
- return mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor) &&
- (SystemProperties.get(BUILD_TYPE).equals("userdebug") ||
- SystemProperties.get(BUILD_TYPE).equals("eng"));
- }
-
- @Override
- public void updateState(Preference preference) {
- updatePreference();
- }
-
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (KEY_CONNECTIVITY_MONITOR_SWITCH.equals(preference.getKey())) {
- final SwitchPreference switchPreference = (SwitchPreference) preference;
- SystemProperties.set(PROPERTY_CONNECTIVITY_MONITOR,
- switchPreference.isChecked() ? USER_ENABLED_STATUS : USER_DISABLED_STATUS);
- Toast.makeText(mContext, R.string.connectivity_monitor_toast,
- Toast.LENGTH_LONG).show();
- return true;
- }
- return false;
- }
-
- public void enablePreference(boolean enabled) {
- if (isAvailable()) {
- mPreference.setEnabled(enabled);
- }
- }
-
- public boolean updatePreference() {
- if (!isAvailable()) {
- return false;
- }
- final boolean enabled = isConnectivityMonitorEnabled();
- mPreference.setChecked(enabled);
- return enabled;
- }
-
- private boolean isConnectivityMonitorEnabled() {
- final String cmStatus = SystemProperties.get(PROPERTY_CONNECTIVITY_MONITOR,
- DISABLED_STATUS);
- return ENABLED_STATUS.equals(cmStatus) || USER_ENABLED_STATUS.equals(cmStatus);
- }
-
-}
diff --git a/src/com/android/settings/development/DevelopmentSettings.java b/src/com/android/settings/development/DevelopmentSettings.java
deleted file mode 100644
index 1a43808..0000000
--- a/src/com/android/settings/development/DevelopmentSettings.java
+++ /dev/null
@@ -1,2644 +0,0 @@
-/*
- * Copyright (C) 2008 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.Manifest;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.app.AlertDialog;
-import android.app.AppOpsManager;
-import android.app.AppOpsManager.PackageOps;
-import android.app.Dialog;
-import android.app.backup.IBackupManager;
-import android.bluetooth.BluetoothA2dp;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothCodecConfig;
-import android.bluetooth.BluetoothCodecStatus;
-import android.bluetooth.BluetoothHeadset;
-import android.bluetooth.BluetoothProfile;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IShortcutService;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.hardware.usb.IUsbManager;
-import android.hardware.usb.UsbManager;
-import android.net.wifi.WifiManager;
-import android.os.BatteryManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.Parcel;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.StrictMode;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.os.storage.IStorageManager;
-import android.provider.SearchIndexableResource;
-import android.provider.Settings;
-import android.service.oemlock.OemLockManager;
-import android.support.annotation.VisibleForTesting;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v4.content.LocalBroadcastManager;
-import android.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-import android.support.v7.preference.PreferenceGroup;
-import android.support.v7.preference.PreferenceScreen;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.IWindowManager;
-import android.view.LayoutInflater;
-import android.view.ThreadedRenderer;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityManager;
-import android.webkit.IWebViewUpdateService;
-import android.webkit.WebViewFactory;
-import android.widget.Switch;
-import android.widget.Toast;
-
-import com.android.internal.app.LocalePicker;
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.settings.R;
-import com.android.settings.RestrictedSettingsFragment;
-import com.android.settings.SettingsActivity;
-import com.android.settings.Utils;
-import com.android.settings.dashboard.DashboardFeatureProvider;
-import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.password.ChooseLockSettingsHelper;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
-import com.android.settings.webview.WebViewAppPreferenceController;
-import com.android.settings.widget.SwitchBar;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-import com.android.settingslib.RestrictedSwitchPreference;
-import com.android.settingslib.core.ConfirmationDialogController;
-import com.android.settingslib.development.AbstractEnableAdbPreferenceController;
-import com.android.settingslib.development.DevelopmentSettingsEnabler;
-import com.android.settingslib.development.SystemPropPoker;
-import com.android.settingslib.drawer.CategoryKey;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-
-/*
- * Displays preferences for application developers.
- * @deprecated in favor of {@link DevelopmentSettingsDashboardFragment}
- */
-@Deprecated
-public class DevelopmentSettings extends RestrictedSettingsFragment
- implements DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
- OnPreferenceChangeListener, SwitchBar.OnSwitchChangeListener, Indexable {
- private static final String TAG = "DevelopmentSettings";
-
- private static final String CLEAR_ADB_KEYS = "clear_adb_keys";
- private static final String ENABLE_TERMINAL = "enable_terminal";
- private static final String KEEP_SCREEN_ON = "keep_screen_on";
- private static final String BT_HCI_SNOOP_LOG = "bt_hci_snoop_log";
- private static final String ENABLE_OEM_UNLOCK = "oem_unlock_enable";
- private static final String HDCP_CHECKING_KEY = "hdcp_checking";
- private static final String HDCP_CHECKING_PROPERTY = "persist.sys.hdcp_checking";
- private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
- private static final String HARDWARE_UI_PROPERTY = "persist.sys.ui.hw";
- private static final String MSAA_PROPERTY = "debug.egl.force_msaa";
- private static final String COLOR_TEMPERATURE_PROPERTY = "persist.sys.debug.color_temp";
-
- private static final String DEBUG_APP_KEY = "debug_app";
- private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
- private static final String MOCK_LOCATION_APP_KEY = "mock_location_app";
- private static final String DEBUG_VIEW_ATTRIBUTES = "debug_view_attributes";
- private static final String FORCE_ALLOW_ON_EXTERNAL_KEY = "force_allow_on_external";
- private static final String STRICT_MODE_KEY = "strict_mode";
- private static final String POINTER_LOCATION_KEY = "pointer_location";
- private static final String SHOW_TOUCHES_KEY = "show_touches";
- private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
- private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
- private static final String SIMULATE_COLOR_SPACE = "simulate_color_space";
- private static final String USB_AUDIO_KEY = "usb_audio";
- private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
- private static final String FORCE_MSAA_KEY = "force_msaa";
- private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
- private static final String SHOW_NON_RECTANGULAR_CLIP_KEY = "show_non_rect_clip";
- private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_updates";
- private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_updates";
- private static final String DEBUG_HW_OVERDRAW_KEY = "debug_hw_overdraw";
- private static final String DEBUG_HW_RENDERER_KEY = "debug_hw_renderer";
- private static final String DEBUG_LAYOUT_KEY = "debug_layout";
- private static final String FORCE_RTL_LAYOUT_KEY = "force_rtl_layout_all_locales";
- private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
- private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
- private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
- private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
- private static final String DEBUG_DEBUGGING_CATEGORY_KEY = "debug_debugging_category";
-
- private static final String WIFI_DISPLAY_CERTIFICATION_KEY = "wifi_display_certification";
- private static final String WIFI_VERBOSE_LOGGING_KEY = "wifi_verbose_logging";
- private static final String WIFI_AGGRESSIVE_HANDOVER_KEY = "wifi_aggressive_handover";
- private static final String WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY = "wifi_allow_scan_with_traffic";
- private static final String USB_CONFIGURATION_KEY = "select_usb_configuration";
- private static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
- private static final String TETHERING_HARDWARE_OFFLOAD = "tethering_hardware_offload";
- private static final String KEY_COLOR_MODE = "picture_color_mode";
- private static final String FORCE_RESIZABLE_KEY = "force_resizable_activities";
- private static final String ENABLE_FREEFORM_SUPPORT_KEY = "enable_freeform_support";
- private static final String COLOR_TEMPERATURE_KEY = "color_temperature";
-
- private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_KEY =
- "bluetooth_show_devices_without_names";
- private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
- "persist.bluetooth.showdeviceswithoutnames";
- private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY =
- "bluetooth_disable_absolute_volume";
- private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY =
- "persist.bluetooth.disableabsvol";
- private static final String BLUETOOTH_AVRCP_VERSION_PROPERTY =
- "persist.bluetooth.avrcpversion";
- private static final String BLUETOOTH_ENABLE_INBAND_RINGING_PROPERTY =
- "persist.bluetooth.enableinbandringing";
- private static final String BLUETOOTH_BTSNOOP_ENABLE_PROPERTY =
- "persist.bluetooth.btsnoopenable";
-
- private static final String BLUETOOTH_ENABLE_INBAND_RINGING_KEY = "bluetooth_enable_inband_ringing";
- private static final String BLUETOOTH_SELECT_AVRCP_VERSION_KEY = "bluetooth_select_avrcp_version";
- private static final String BLUETOOTH_SELECT_A2DP_CODEC_KEY = "bluetooth_select_a2dp_codec";
- private static final String BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY = "bluetooth_select_a2dp_sample_rate";
- private static final String BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY = "bluetooth_select_a2dp_bits_per_sample";
- private static final String BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY = "bluetooth_select_a2dp_channel_mode";
- private static final String BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY = "bluetooth_select_a2dp_ldac_playback_quality";
-
- private static final String INACTIVE_APPS_KEY = "inactive_apps";
-
- private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
- = "immediately_destroy_activities";
- private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
-
- private static final String BACKGROUND_CHECK_KEY = "background_check";
-
- private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
-
- private static final String SHOW_NOTIFICATION_CHANNEL_WARNINGS_KEY = "show_notification_channel_warnings";
-
- private static final String TERMINAL_APP_PACKAGE = "com.android.terminal";
-
- private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
-
- private static final String OTA_DISABLE_AUTOMATIC_UPDATE_KEY = "ota_disable_automatic_update";
-
- private static final int RESULT_DEBUG_APP = 1000;
- private static final int RESULT_MOCK_LOCATION_APP = 1001;
-
- private static final String SHORTCUT_MANAGER_RESET_KEY = "reset_shortcut_manager_throttling";
-
- private static final int REQUEST_CODE_ENABLE_OEM_UNLOCK = 0;
-
- private static final int[] MOCK_LOCATION_APP_OPS = new int[]{AppOpsManager.OP_MOCK_LOCATION};
-
- private static final String STATE_SHOWING_DIALOG_KEY = "showing_dialog_key";
-
- private String mPendingDialogKey;
-
- private IWindowManager mWindowManager;
- private IBackupManager mBackupManager;
- private IWebViewUpdateService mWebViewUpdateService;
- private UserManager mUm;
- private WifiManager mWifiManager;
- private OemLockManager mOemLockManager;
- private TelephonyManager mTelephonyManager;
-
- private SwitchBar mSwitchBar;
-
- private boolean mHaveDebugSettings;
- private EnableAdbPreferenceController mEnableAdbController;
- private Preference mClearAdbKeys;
- private SwitchPreference mEnableTerminal;
- private RestrictedSwitchPreference mKeepScreenOn;
- private SwitchPreference mBtHciSnoopLog;
- private RestrictedSwitchPreference mEnableOemUnlock;
- private SwitchPreference mDebugViewAttributes;
- private SwitchPreference mForceAllowOnExternal;
-
- private Preference mPassword;
- private String mDebugApp;
- private Preference mDebugAppPref;
-
- private String mMockLocationApp;
- private Preference mMockLocationAppPref;
-
- private SwitchPreference mWaitForDebugger;
- private VerifyAppsOverUsbPreferenceController mVerifyAppsOverUsbController;
- private SwitchPreference mWifiDisplayCertification;
- private SwitchPreference mWifiVerboseLogging;
- private SwitchPreference mWifiAggressiveHandover;
- private SwitchPreference mMobileDataAlwaysOn;
- private SwitchPreference mTetheringHardwareOffload;
- private SwitchPreference mBluetoothShowDevicesWithoutNames;
- private SwitchPreference mBluetoothDisableAbsVolume;
- private SwitchPreference mBluetoothEnableInbandRinging;
-
- private BluetoothA2dp mBluetoothA2dp;
- private final Object mBluetoothA2dpLock = new Object();
- private ListPreference mBluetoothSelectAvrcpVersion;
- private ListPreference mBluetoothSelectA2dpCodec;
- private ListPreference mBluetoothSelectA2dpSampleRate;
- private ListPreference mBluetoothSelectA2dpBitsPerSample;
- private ListPreference mBluetoothSelectA2dpChannelMode;
- private ListPreference mBluetoothSelectA2dpLdacPlaybackQuality;
-
- private SwitchPreference mOtaDisableAutomaticUpdate;
- private SwitchPreference mWifiAllowScansWithTraffic;
- private SwitchPreference mStrictMode;
- private SwitchPreference mPointerLocation;
- private SwitchPreference mShowTouches;
- private SwitchPreference mShowScreenUpdates;
- private SwitchPreference mDisableOverlays;
- private SwitchPreference mForceHardwareUi;
- private SwitchPreference mForceMsaa;
- private SwitchPreference mShowHwScreenUpdates;
- private SwitchPreference mShowHwLayersUpdates;
- private SwitchPreference mDebugLayout;
- private SwitchPreference mForceRtlLayout;
- private ListPreference mDebugHwOverdraw;
- private ListPreference mDebugHwRenderer;
- private LogdSizePreferenceController mLogdSizeController;
- private LogpersistPreferenceController mLogpersistController;
- private ListPreference mUsbConfiguration;
- private ListPreference mTrackFrameTime;
- private ListPreference mShowNonRectClip;
- private ListPreference mWindowAnimationScale;
- private ListPreference mTransitionAnimationScale;
- private ListPreference mAnimatorDurationScale;
- private ListPreference mOverlayDisplayDevices;
-
- private WebViewAppPreferenceController mWebViewAppPrefController;
-
- private ListPreference mSimulateColorSpace;
-
- private SwitchPreference mUSBAudio;
- private SwitchPreference mImmediatelyDestroyActivities;
-
- private ListPreference mAppProcessLimit;
-
- private SwitchPreference mShowAllANRs;
-
- private SwitchPreference mShowNotificationChannelWarnings;
-
- private ColorModePreference mColorModePreference;
-
- private SwitchPreference mForceResizable;
-
- private SwitchPreference mEnableFreeformSupport;
-
- private SwitchPreference mColorTemperaturePreference;
-
- private final ArrayList<Preference> mAllPrefs = new ArrayList<>();
-
- private final ArrayList<SwitchPreference> mResetSwitchPrefs = new ArrayList<>();
-
- private final HashSet<Preference> mDisabledPrefs = new HashSet<>();
- // To track whether a confirmation dialog was clicked.
- private boolean mDialogClicked;
- private Dialog mEnableDialog;
-
- private Dialog mAdbKeysDialog;
- private boolean mUnavailable;
-
- private DashboardFeatureProvider mDashboardFeatureProvider;
- private DevelopmentSwitchBarController mSwitchBarController;
- private BugReportPreferenceController mBugReportController;
- private BugReportInPowerPreferenceController mBugReportInPowerController;
- private ConnectivityMonitorPreferenceController mConnectivityMonitorController;
- private CameraLaserSensorPreferenceController mCameraLaserSensorController;
-
- private BroadcastReceiver mEnableAdbReceiver;
-
- public DevelopmentSettings() {
- super(UserManager.DISALLOW_DEBUGGING_FEATURES);
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.DEVELOPMENT;
- }
-
- @Override
- public void onAttach(Context context) {
- super.onAttach(context);
- mDashboardFeatureProvider = FeatureFactory.getFactory(context)
- .getDashboardFeatureProvider(context);
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- if (icicle != null) {
- // Don't show this in onCreate since we might be on the back stack
- mPendingDialogKey = icicle.getString(STATE_SHOWING_DIALOG_KEY);
- }
-
- mWindowManager = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));
- mBackupManager = IBackupManager.Stub.asInterface(
- ServiceManager.getService(Context.BACKUP_SERVICE));
- mWebViewUpdateService = WebViewFactory.getUpdateService();
- mOemLockManager = (OemLockManager) getSystemService(Context.OEM_LOCK_SERVICE);
- mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
-
- mUm = (UserManager) getSystemService(Context.USER_SERVICE);
-
- mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
-
- mBugReportController = new BugReportPreferenceController(getActivity());
- mBugReportInPowerController = new BugReportInPowerPreferenceController(getActivity());
- mConnectivityMonitorController = new ConnectivityMonitorPreferenceController(getActivity());
- mLogdSizeController = new LogdSizePreferenceController(getActivity());
- mLogpersistController = new LogpersistPreferenceController(getActivity(), getLifecycle());
- mWebViewAppPrefController = new WebViewAppPreferenceController(getActivity());
- mVerifyAppsOverUsbController = new VerifyAppsOverUsbPreferenceController(getActivity());
- mCameraLaserSensorController = new CameraLaserSensorPreferenceController(getActivity());
-
- setIfOnlyAvailableForAdmins(true);
- if (isUiRestricted() || !Utils.isDeviceProvisioned(getActivity())) {
- // Block access to developer options if the user is not the owner, if user policy
- // restricts it, or if the device has not been provisioned
- mUnavailable = true;
- addPreferencesFromResource(R.xml.placeholder_prefs);
- return;
- }
-
- addPreferencesFromResource(R.xml.development_settings);
- final PreferenceScreen preferenceScreen = getPreferenceScreen();
-
- final PreferenceGroup debugDebuggingCategory = (PreferenceGroup)
- findPreference(DEBUG_DEBUGGING_CATEGORY_KEY);
- mEnableAdbController = new EnableAdbPreferenceController(getActivity());
- mClearAdbKeys = findPreference(CLEAR_ADB_KEYS);
- if (!SystemProperties.getBoolean("ro.adb.secure", false)) {
- if (debugDebuggingCategory != null) {
- debugDebuggingCategory.removePreference(mClearAdbKeys);
- }
- }
- mAllPrefs.add(mClearAdbKeys);
- mEnableTerminal = findAndInitSwitchPref(ENABLE_TERMINAL);
- if (!isPackageInstalled(getActivity(), TERMINAL_APP_PACKAGE)) {
- debugDebuggingCategory.removePreference(mEnableTerminal);
- mEnableTerminal = null;
- }
-
- mBugReportController.displayPreference(preferenceScreen);
- mBugReportInPowerController.displayPreference(preferenceScreen);
- mConnectivityMonitorController.displayPreference(preferenceScreen);
- mLogdSizeController.displayPreference(preferenceScreen);
- mLogpersistController.displayPreference(preferenceScreen);
- mWebViewAppPrefController.displayPreference(preferenceScreen);
- mEnableAdbController.displayPreference(preferenceScreen);
-
- mCameraLaserSensorController.displayPreference(getPreferenceScreen());
-
- mKeepScreenOn = (RestrictedSwitchPreference) findAndInitSwitchPref(KEEP_SCREEN_ON);
- mBtHciSnoopLog = findAndInitSwitchPref(BT_HCI_SNOOP_LOG);
- mEnableOemUnlock = (RestrictedSwitchPreference) findAndInitSwitchPref(ENABLE_OEM_UNLOCK);
- if (!showEnableOemUnlockPreference(getActivity())) {
- removePreference(mEnableOemUnlock);
- mEnableOemUnlock = null;
- }
-
- mDebugViewAttributes = findAndInitSwitchPref(DEBUG_VIEW_ATTRIBUTES);
- mForceAllowOnExternal = findAndInitSwitchPref(FORCE_ALLOW_ON_EXTERNAL_KEY);
- mPassword = findPreference(LOCAL_BACKUP_PASSWORD);
- mAllPrefs.add(mPassword);
-
- if (!mUm.isAdminUser()) {
- disableForUser(mClearAdbKeys);
- disableForUser(mEnableTerminal);
- disableForUser(mPassword);
- }
-
- mDebugAppPref = findPreference(DEBUG_APP_KEY);
- mAllPrefs.add(mDebugAppPref);
- mWaitForDebugger = findAndInitSwitchPref(WAIT_FOR_DEBUGGER_KEY);
-
- mMockLocationAppPref = findPreference(MOCK_LOCATION_APP_KEY);
- mAllPrefs.add(mMockLocationAppPref);
-
- mVerifyAppsOverUsbController.displayPreference(preferenceScreen);
-
- mStrictMode = findAndInitSwitchPref(STRICT_MODE_KEY);
- mPointerLocation = findAndInitSwitchPref(POINTER_LOCATION_KEY);
- mShowTouches = findAndInitSwitchPref(SHOW_TOUCHES_KEY);
- mShowScreenUpdates = findAndInitSwitchPref(SHOW_SCREEN_UPDATES_KEY);
- mDisableOverlays = findAndInitSwitchPref(DISABLE_OVERLAYS_KEY);
- mForceHardwareUi = findAndInitSwitchPref(FORCE_HARDWARE_UI_KEY);
- mForceMsaa = findAndInitSwitchPref(FORCE_MSAA_KEY);
- mTrackFrameTime = addListPreference(TRACK_FRAME_TIME_KEY);
- mShowNonRectClip = addListPreference(SHOW_NON_RECTANGULAR_CLIP_KEY);
- mShowHwScreenUpdates = findAndInitSwitchPref(SHOW_HW_SCREEN_UPDATES_KEY);
- mShowHwLayersUpdates = findAndInitSwitchPref(SHOW_HW_LAYERS_UPDATES_KEY);
- mDebugLayout = findAndInitSwitchPref(DEBUG_LAYOUT_KEY);
- mForceRtlLayout = findAndInitSwitchPref(FORCE_RTL_LAYOUT_KEY);
- mDebugHwOverdraw = addListPreference(DEBUG_HW_OVERDRAW_KEY);
- mDebugHwRenderer = addListPreference(DEBUG_HW_RENDERER_KEY);
- mWifiDisplayCertification = findAndInitSwitchPref(WIFI_DISPLAY_CERTIFICATION_KEY);
- mWifiVerboseLogging = findAndInitSwitchPref(WIFI_VERBOSE_LOGGING_KEY);
- mWifiAggressiveHandover = findAndInitSwitchPref(WIFI_AGGRESSIVE_HANDOVER_KEY);
- mWifiAllowScansWithTraffic = findAndInitSwitchPref(WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY);
- mMobileDataAlwaysOn = findAndInitSwitchPref(MOBILE_DATA_ALWAYS_ON);
- mTetheringHardwareOffload = findAndInitSwitchPref(TETHERING_HARDWARE_OFFLOAD);
- mUsbConfiguration = addListPreference(USB_CONFIGURATION_KEY);
- mBluetoothShowDevicesWithoutNames =
- findAndInitSwitchPref(BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_KEY);
- mBluetoothDisableAbsVolume = findAndInitSwitchPref(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY);
- mBluetoothEnableInbandRinging = findAndInitSwitchPref(BLUETOOTH_ENABLE_INBAND_RINGING_KEY);
- if (!BluetoothHeadset.isInbandRingingSupported(getContext())) {
- removePreference(mBluetoothEnableInbandRinging);
- mBluetoothEnableInbandRinging = null;
- }
-
- mBluetoothSelectAvrcpVersion = addListPreference(BLUETOOTH_SELECT_AVRCP_VERSION_KEY);
- mBluetoothSelectA2dpCodec = addListPreference(BLUETOOTH_SELECT_A2DP_CODEC_KEY);
- mBluetoothSelectA2dpSampleRate = addListPreference(BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY);
- mBluetoothSelectA2dpBitsPerSample = addListPreference(BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY);
- mBluetoothSelectA2dpChannelMode = addListPreference(BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY);
- mBluetoothSelectA2dpLdacPlaybackQuality = addListPreference(BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY);
- initBluetoothConfigurationValues();
-
- mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
- mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY);
- mAnimatorDurationScale = addListPreference(ANIMATOR_DURATION_SCALE_KEY);
- mOverlayDisplayDevices = addListPreference(OVERLAY_DISPLAY_DEVICES_KEY);
- mSimulateColorSpace = addListPreference(SIMULATE_COLOR_SPACE);
- mUSBAudio = findAndInitSwitchPref(USB_AUDIO_KEY);
- mForceResizable = findAndInitSwitchPref(FORCE_RESIZABLE_KEY);
- mEnableFreeformSupport = findAndInitSwitchPref(ENABLE_FREEFORM_SUPPORT_KEY);
- removePreferenceForProduction(mEnableFreeformSupport);
-
- mImmediatelyDestroyActivities = (SwitchPreference) findPreference(
- IMMEDIATELY_DESTROY_ACTIVITIES_KEY);
- mAllPrefs.add(mImmediatelyDestroyActivities);
- mResetSwitchPrefs.add(mImmediatelyDestroyActivities);
-
- mAppProcessLimit = addListPreference(APP_PROCESS_LIMIT_KEY);
-
- mShowAllANRs = (SwitchPreference) findPreference(
- SHOW_ALL_ANRS_KEY);
- mAllPrefs.add(mShowAllANRs);
- mResetSwitchPrefs.add(mShowAllANRs);
-
- mShowNotificationChannelWarnings = (SwitchPreference) findPreference(
- SHOW_NOTIFICATION_CHANNEL_WARNINGS_KEY);
- mAllPrefs.add(mShowNotificationChannelWarnings);
- mResetSwitchPrefs.add(mShowNotificationChannelWarnings);
-
- Preference hdcpChecking = findPreference(HDCP_CHECKING_KEY);
- if (hdcpChecking != null) {
- mAllPrefs.add(hdcpChecking);
- removePreferenceForProduction(hdcpChecking);
- }
-
- Preference convertFbePreference = findPreference(KEY_CONVERT_FBE);
-
- try {
- IBinder service = ServiceManager.getService("mount");
- IStorageManager storageManager = IStorageManager.Stub.asInterface(service);
- if (!storageManager.isConvertibleToFBE()) {
- removePreference(KEY_CONVERT_FBE);
- } else if ("file".equals(SystemProperties.get("ro.crypto.type", "none"))) {
- convertFbePreference.setEnabled(false);
- convertFbePreference.setSummary(getResources()
- .getString(R.string.convert_to_file_encryption_done));
- }
- } catch (RemoteException e) {
- removePreference(KEY_CONVERT_FBE);
- }
-
- mOtaDisableAutomaticUpdate = findAndInitSwitchPref(OTA_DISABLE_AUTOMATIC_UPDATE_KEY);
-
- mColorModePreference = (ColorModePreference) findPreference(KEY_COLOR_MODE);
- mColorModePreference.updateCurrentAndSupported();
- if (mColorModePreference.getColorModeCount() < 2 ||
- getContext().getResources().getConfiguration().isScreenWideColorGamut()) {
- removePreference(KEY_COLOR_MODE);
- mColorModePreference = null;
- }
-
- mColorTemperaturePreference = (SwitchPreference) findPreference(COLOR_TEMPERATURE_KEY);
- if (getResources().getBoolean(R.bool.config_enableColorTemperature)) {
- mAllPrefs.add(mColorTemperaturePreference);
- mResetSwitchPrefs.add(mColorTemperaturePreference);
- } else {
- removePreference(COLOR_TEMPERATURE_KEY);
- mColorTemperaturePreference = null;
- }
-
- addDashboardCategoryPreferences();
- }
-
- @VisibleForTesting
- void addDashboardCategoryPreferences() {
- final PreferenceScreen screen = getPreferenceScreen();
- final List<Preference> tilePrefs = mDashboardFeatureProvider.getPreferencesForCategory(
- getActivity(), getPrefContext(), getMetricsCategory(),
- CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
- if (tilePrefs != null) {
- for (Preference preference : tilePrefs) {
- screen.addPreference(preference);
- }
- }
- }
-
- private ListPreference addListPreference(String prefKey) {
- ListPreference pref = (ListPreference) findPreference(prefKey);
- mAllPrefs.add(pref);
- pref.setOnPreferenceChangeListener(this);
- return pref;
- }
-
- private void disableForUser(Preference pref) {
- if (pref != null) {
- pref.setEnabled(false);
- mDisabledPrefs.add(pref);
- }
- }
-
- private SwitchPreference findAndInitSwitchPref(String key) {
- SwitchPreference pref = (SwitchPreference) findPreference(key);
- if (pref == null) {
- throw new IllegalArgumentException("Cannot find preference with key = " + key);
- }
- mAllPrefs.add(pref);
- mResetSwitchPrefs.add(pref);
- return pref;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
- mSwitchBarController = new DevelopmentSwitchBarController(
- this /* DevelopmentSettings */, mSwitchBar, !mUnavailable, getLifecycle());
- }
-
- private boolean removePreferenceForProduction(Preference preference) {
- if ("user".equals(Build.TYPE)) {
- removePreference(preference);
- return true;
- }
- return false;
- }
-
- private void removePreference(Preference preference) {
- if (preference == null) {
- return;
- }
-
- final PreferenceGroup parent = preference.getParent();
-
- if (parent != null) {
- parent.removePreference(preference);
- }
-
- mAllPrefs.remove(preference);
- mResetSwitchPrefs.remove(preference);
- }
-
- private void setPrefsEnabledState(boolean enabled) {
- for (int i = 0; i < mAllPrefs.size(); i++) {
- Preference pref = mAllPrefs.get(i);
- pref.setEnabled(enabled && !mDisabledPrefs.contains(pref));
- }
- mEnableAdbController.enablePreference(enabled);
- mBugReportInPowerController.enablePreference(enabled);
- mConnectivityMonitorController.enablePreference(enabled);
- mLogdSizeController.enablePreference(enabled);
- mLogpersistController.enablePreference(enabled);
- mWebViewAppPrefController.enablePreference(enabled);
- mCameraLaserSensorController.enablePreference(enabled);
- updateAllOptions();
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- if (mUnavailable) {
- // Show error message
- if (!isUiRestrictedByOnlyAdmin()) {
- getEmptyTextView().setText(R.string.development_settings_not_available);
- }
- getPreferenceScreen().removeAll();
- return;
- }
-
- // A DeviceAdmin has specified a maximum time until the device
- // will lock... in this case we can't allow the user to turn
- // on "stay awake when plugged in" because that would defeat the
- // restriction.
- final EnforcedAdmin admin = RestrictedLockUtils.checkIfMaximumTimeToLockIsSet(
- getActivity());
- mKeepScreenOn.setDisabledByAdmin(admin);
- if (admin == null) {
- mDisabledPrefs.remove(mKeepScreenOn);
- } else {
- mDisabledPrefs.add(mKeepScreenOn);
- }
-
- final boolean developmentEnabledState =
- DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext());
- mSwitchBar.setChecked(developmentEnabledState);
- setPrefsEnabledState(developmentEnabledState);
-
- if (mHaveDebugSettings && !developmentEnabledState) {
- // Overall debugging is disabled, but there are some debug
- // settings that are enabled. This is an invalid state. Switch
- // to debug settings being enabled, so the user knows there is
- // stuff enabled and can turn it all off if they want.
- DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), true);
- mSwitchBar.setChecked(true);
- setPrefsEnabledState(true);
- }
- mSwitchBar.show();
-
- if (mColorModePreference != null) {
- mColorModePreference.startListening();
- mColorModePreference.updateCurrentAndSupported();
- }
-
- if (mPendingDialogKey != null) {
- recreateDialogForKey(mPendingDialogKey);
- mPendingDialogKey = null;
- }
- }
-
- @Override
- public void onPause() {
- super.onPause();
- if (mColorModePreference != null) {
- mColorModePreference.stopListening();
- }
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putString(STATE_SHOWING_DIALOG_KEY, getKeyForShowingDialog());
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- IntentFilter filter = new IntentFilter();
- filter.addAction(UsbManager.ACTION_USB_STATE);
- if (getActivity().registerReceiver(mUsbReceiver, filter) == null) {
- updateUsbConfigurationValues();
- }
-
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter != null) {
- adapter.getProfileProxy(getActivity(),
- mBluetoothA2dpServiceListener,
- BluetoothProfile.A2DP);
- }
- filter = new IntentFilter();
- filter.addAction(BluetoothA2dp.ACTION_CODEC_CONFIG_CHANGED);
- if (getActivity().registerReceiver(mBluetoothA2dpReceiver, filter) == null) {
- updateBluetoothA2dpConfigurationValues();
- }
-
- mEnableAdbReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- mVerifyAppsOverUsbController.updatePreference();
- updateBugreportOptions();
- }
- };
- LocalBroadcastManager.getInstance(getContext())
- .registerReceiver(mEnableAdbReceiver, new IntentFilter(
- AbstractEnableAdbPreferenceController.ACTION_ENABLE_ADB_STATE_CHANGED));
-
- return super.onCreateView(inflater, container, savedInstanceState);
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
-
- if (mUnavailable) {
- return;
- }
- getActivity().unregisterReceiver(mUsbReceiver);
- getActivity().unregisterReceiver(mBluetoothA2dpReceiver);
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter != null) {
- adapter.closeProfileProxy(BluetoothProfile.A2DP, mBluetoothA2dp);
- mBluetoothA2dp = null;
- }
-
- if (mEnableAdbReceiver != null) {
- LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mEnableAdbReceiver);
- mEnableAdbReceiver = null;
- }
- }
-
- void updateSwitchPreference(SwitchPreference switchPreference, boolean value) {
- switchPreference.setChecked(value);
- mHaveDebugSettings |= value;
- }
-
- private void updateAllOptions() {
- final Context context = getActivity();
- final ContentResolver cr = context.getContentResolver();
- mHaveDebugSettings = false;
- final Preference enableAdb = findPreference(mEnableAdbController.getPreferenceKey());
- mEnableAdbController.updateState(enableAdb);
- mHaveDebugSettings |= mEnableAdbController.haveDebugSettings();
- if (mEnableTerminal != null) {
- updateSwitchPreference(mEnableTerminal,
- context.getPackageManager().getApplicationEnabledSetting(TERMINAL_APP_PACKAGE)
- == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
- }
- mHaveDebugSettings |= mBugReportInPowerController.updatePreference();
- mHaveDebugSettings |= mConnectivityMonitorController.updatePreference();
- mHaveDebugSettings |= mCameraLaserSensorController.updatePreference();
- updateSwitchPreference(mKeepScreenOn, Settings.Global.getInt(cr,
- Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0) != 0);
- updateSwitchPreference(mBtHciSnoopLog, SystemProperties.getBoolean(
- BLUETOOTH_BTSNOOP_ENABLE_PROPERTY, false));
- updateSwitchPreference(mDebugViewAttributes, Settings.Global.getInt(cr,
- Settings.Global.DEBUG_VIEW_ATTRIBUTES, 0) != 0);
- updateSwitchPreference(mForceAllowOnExternal, Settings.Global.getInt(cr,
- Settings.Global.FORCE_ALLOW_ON_EXTERNAL, 0) != 0);
- updateHdcpValues();
- updatePasswordSummary();
- updateDebuggerOptions();
- updateMockLocation();
- updateStrictModeVisualOptions();
- updatePointerLocationOptions();
- updateShowTouchesOptions();
- updateFlingerOptions();
- updateHardwareUiOptions();
- updateMsaaOptions();
- updateTrackFrameTimeOptions();
- updateShowNonRectClipOptions();
- updateShowHwScreenUpdatesOptions();
- updateShowHwLayersUpdatesOptions();
- updateDebugHwOverdrawOptions();
- updateDebugHwRendererOptions();
- updateDebugLayoutOptions();
- updateAnimationScaleOptions();
- updateOverlayDisplayDevicesOptions();
- updateImmediatelyDestroyActivitiesOptions();
- updateAppProcessLimitOptions();
- updateShowAllANRsOptions();
- updateShowNotificationChannelWarningsOptions();
- mVerifyAppsOverUsbController.updatePreference();
- updateOtaDisableAutomaticUpdateOptions();
- updateBugreportOptions();
- updateForceRtlOptions();
- mLogdSizeController.updateLogdSizeValues();
- mLogpersistController.updateLogpersistValues();
- updateWifiDisplayCertificationOptions();
- updateWifiVerboseLoggingOptions();
- updateWifiAggressiveHandoverOptions();
- updateWifiAllowScansWithTrafficOptions();
- updateMobileDataAlwaysOnOptions();
- updateTetheringHardwareOffloadOptions();
- updateSimulateColorSpace();
- updateUSBAudioOptions();
- updateForceResizableOptions();
- updateEnableFreeformWindowsSupportOptions();
- Preference webViewAppPref = findPreference(mWebViewAppPrefController.getPreferenceKey());
- mWebViewAppPrefController.updateState(webViewAppPref);
- updateOemUnlockOptions();
- if (mColorTemperaturePreference != null) {
- updateColorTemperature();
- }
- updateBluetoothShowDevicesWithoutUserFriendlyNameOptions();
- updateBluetoothDisableAbsVolumeOptions();
- updateBluetoothEnableInbandRingingOptions();
- updateBluetoothA2dpConfigurationValues();
- }
-
- private void resetDangerousOptions() {
- SystemPropPoker.getInstance().blockPokes();
- for (int i = 0; i < mResetSwitchPrefs.size(); i++) {
- SwitchPreference cb = mResetSwitchPrefs.get(i);
- if (cb.isChecked()) {
- cb.setChecked(false);
- onPreferenceTreeClick(cb);
- }
- }
- if (mBluetoothEnableInbandRinging != null) {
- mBluetoothEnableInbandRinging.setChecked(true);
- onPreferenceTreeClick(mBluetoothEnableInbandRinging);
- }
- mBugReportInPowerController.resetPreference();
- mEnableAdbController.resetPreference();
- resetDebuggerOptions();
- mLogpersistController.writeLogpersistOption(null, true);
- mLogdSizeController.writeLogdSizeOption(null);
- writeAnimationScaleOption(0, mWindowAnimationScale, null);
- writeAnimationScaleOption(1, mTransitionAnimationScale, null);
- writeAnimationScaleOption(2, mAnimatorDurationScale, null);
- // Only poke the color space setting if we control it.
- if (usingDevelopmentColorSpace()) {
- writeSimulateColorSpace(-1);
- }
- writeOverlayDisplayDevicesOptions(null);
- writeAppProcessLimitOptions(null);
- mHaveDebugSettings = false;
- updateAllOptions();
- SystemPropPoker.getInstance().unblockPokes();
- SystemPropPoker.getInstance().poke();
- }
-
- private void updateHdcpValues() {
- ListPreference hdcpChecking = (ListPreference) findPreference(HDCP_CHECKING_KEY);
- if (hdcpChecking != null) {
- String currentValue = SystemProperties.get(HDCP_CHECKING_PROPERTY);
- String[] values = getResources().getStringArray(R.array.hdcp_checking_values);
- String[] summaries = getResources().getStringArray(R.array.hdcp_checking_summaries);
- int index = 1; // Defaults to drm-only. Needs to match with R.array.hdcp_checking_values
- for (int i = 0; i < values.length; i++) {
- if (currentValue.equals(values[i])) {
- index = i;
- break;
- }
- }
- hdcpChecking.setValue(values[index]);
- hdcpChecking.setSummary(summaries[index]);
- hdcpChecking.setOnPreferenceChangeListener(this);
- }
- }
-
- private void updatePasswordSummary() {
- mPassword.setEnabled(mBackupManager != null);
- if (mBackupManager != null) {
- try {
- if (mBackupManager.hasBackupPassword()) {
- mPassword.setSummary(R.string.local_backup_password_summary_change);
- } else {
- mPassword.setSummary(R.string.local_backup_password_summary_none);
- }
- } catch (RemoteException e) {
- // Not much we can do here
- }
- }
- }
-
- private void writeBtHciSnoopLogOptions() {
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- SystemProperties.set(BLUETOOTH_BTSNOOP_ENABLE_PROPERTY,
- Boolean.toString(mBtHciSnoopLog.isChecked()));
- }
-
- private void writeDebuggerOptions() {
- try {
- ActivityManager.getService().setDebugApp(
- mDebugApp, mWaitForDebugger.isChecked(), true);
- } catch (RemoteException ex) {
- }
- }
-
- private void writeMockLocation() {
- AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
-
- // Disable the app op of the previous mock location app if such.
- List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
- if (packageOps != null) {
- // Should be one but in case we are in a bad state due to use of command line tools.
- for (PackageOps packageOp : packageOps) {
- if (packageOp.getOps().get(0).getMode() != AppOpsManager.MODE_ERRORED) {
- String oldMockLocationApp = packageOp.getPackageName();
- try {
- ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(
- oldMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
- appOpsManager.setMode(AppOpsManager.OP_MOCK_LOCATION, ai.uid,
- oldMockLocationApp, AppOpsManager.MODE_ERRORED);
- } catch (NameNotFoundException e) {
- /* ignore */
- }
- }
- }
- }
-
- // Enable the app op of the new mock location app if such.
- if (!TextUtils.isEmpty(mMockLocationApp)) {
- try {
- ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(
- mMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
- appOpsManager.setMode(AppOpsManager.OP_MOCK_LOCATION, ai.uid,
- mMockLocationApp, AppOpsManager.MODE_ALLOWED);
- } catch (NameNotFoundException e) {
- /* ignore */
- }
- }
- }
-
- private static void resetDebuggerOptions() {
- try {
- ActivityManager.getService().setDebugApp(
- null, false, true);
- } catch (RemoteException ex) {
- }
- }
-
- private void updateDebuggerOptions() {
- mDebugApp = Settings.Global.getString(
- getActivity().getContentResolver(), Settings.Global.DEBUG_APP);
- updateSwitchPreference(mWaitForDebugger, Settings.Global.getInt(
- getActivity().getContentResolver(), Settings.Global.WAIT_FOR_DEBUGGER, 0) != 0);
- if (mDebugApp != null && mDebugApp.length() > 0) {
- String label;
- try {
- ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(mDebugApp,
- PackageManager.GET_DISABLED_COMPONENTS);
- CharSequence lab = getActivity().getPackageManager().getApplicationLabel(ai);
- label = lab != null ? lab.toString() : mDebugApp;
- } catch (PackageManager.NameNotFoundException e) {
- label = mDebugApp;
- }
- mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_set, label));
- mWaitForDebugger.setEnabled(true);
- mHaveDebugSettings = true;
- } else {
- mDebugAppPref.setSummary(getResources().getString(R.string.debug_app_not_set));
- mWaitForDebugger.setEnabled(false);
- }
- }
-
- private void updateMockLocation() {
- AppOpsManager appOpsManager = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
-
- List<PackageOps> packageOps = appOpsManager.getPackagesForOps(MOCK_LOCATION_APP_OPS);
- if (packageOps != null) {
- for (PackageOps packageOp : packageOps) {
- if (packageOp.getOps().get(0).getMode() == AppOpsManager.MODE_ALLOWED) {
- mMockLocationApp = packageOps.get(0).getPackageName();
- break;
- }
- }
- }
-
- if (!TextUtils.isEmpty(mMockLocationApp)) {
- String label = mMockLocationApp;
- try {
- ApplicationInfo ai = getActivity().getPackageManager().getApplicationInfo(
- mMockLocationApp, PackageManager.GET_DISABLED_COMPONENTS);
- CharSequence appLabel = getPackageManager().getApplicationLabel(ai);
- if (appLabel != null) {
- label = appLabel.toString();
- }
- } catch (PackageManager.NameNotFoundException e) {
- /* ignore */
- }
-
- mMockLocationAppPref.setSummary(getString(R.string.mock_location_app_set, label));
- mHaveDebugSettings = true;
- } else {
- mMockLocationAppPref.setSummary(getString(R.string.mock_location_app_not_set));
- }
- }
-
- private void updateOtaDisableAutomaticUpdateOptions() {
- // We use the "disabled status" in code, but show the opposite text
- // "Automatic system updates" on screen. So a value 0 indicates the
- // automatic update is enabled.
- updateSwitchPreference(mOtaDisableAutomaticUpdate, Settings.Global.getInt(
- getActivity().getContentResolver(),
- Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE, 0) != 1);
- }
-
- private void writeOtaDisableAutomaticUpdateOptions() {
- // We use the "disabled status" in code, but show the opposite text
- // "Automatic system updates" on screen. So a value 0 indicates the
- // automatic update is enabled.
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.OTA_DISABLE_AUTOMATIC_UPDATE,
- mOtaDisableAutomaticUpdate.isChecked() ? 0 : 1);
- }
-
- private static boolean showEnableOemUnlockPreference(Context context) {
- return context.getSystemService(Context.OEM_LOCK_SERVICE) != null;
- }
-
- /**
- * Returns whether OEM unlock is allowed by the user and carrier.
- *
- * This does not take into account any restrictions imposed by the device policy.
- */
- private boolean isOemUnlockAllowedByUserAndCarrier() {
- final UserHandle userHandle = UserHandle.of(UserHandle.myUserId());
- return mOemLockManager.isOemUnlockAllowedByCarrier()
- && !mUm.hasBaseUserRestriction(UserManager.DISALLOW_FACTORY_RESET, userHandle);
- }
-
- private boolean enableOemUnlockPreference() {
- return !isBootloaderUnlocked() && isOemUnlockAllowedByUserAndCarrier();
- }
-
- private void updateOemUnlockOptions() {
- if (mEnableOemUnlock != null) {
- updateSwitchPreference(mEnableOemUnlock, mOemLockManager.isOemUnlockAllowed());
- updateOemUnlockSettingDescription();
- // Showing mEnableOemUnlock preference as device has persistent data block.
- mEnableOemUnlock.setDisabledByAdmin(null);
- mEnableOemUnlock.setEnabled(enableOemUnlockPreference());
- if (mEnableOemUnlock.isEnabled()) {
- // Check restriction, disable mEnableOemUnlock and apply policy transparency.
- mEnableOemUnlock.checkRestrictionAndSetDisabled(UserManager.DISALLOW_FACTORY_RESET);
- }
- }
- }
-
- private void updateBugreportOptions() {
- mBugReportController.enablePreference(true);
- mBugReportInPowerController.updateBugreportOptions();
- }
-
- // Returns the current state of the system property that controls
- // strictmode flashes. One of:
- // 0: not explicitly set one way or another
- // 1: on
- // 2: off
- private static int currentStrictModeActiveIndex() {
- if (TextUtils.isEmpty(SystemProperties.get(StrictMode.VISUAL_PROPERTY))) {
- return 0;
- }
- boolean enabled = SystemProperties.getBoolean(StrictMode.VISUAL_PROPERTY, false);
- return enabled ? 1 : 2;
- }
-
- private void writeStrictModeVisualOptions() {
- try {
- mWindowManager.setStrictModeVisualIndicatorPreference(mStrictMode.isChecked()
- ? "1" : "");
- } catch (RemoteException e) {
- }
- }
-
- private void updateStrictModeVisualOptions() {
- updateSwitchPreference(mStrictMode, currentStrictModeActiveIndex() == 1);
- }
-
- private void writePointerLocationOptions() {
- Settings.System.putInt(getActivity().getContentResolver(),
- Settings.System.POINTER_LOCATION, mPointerLocation.isChecked() ? 1 : 0);
- }
-
- private void updatePointerLocationOptions() {
- updateSwitchPreference(mPointerLocation,
- Settings.System.getInt(getActivity().getContentResolver(),
- Settings.System.POINTER_LOCATION, 0) != 0);
- }
-
- private void writeShowTouchesOptions() {
- Settings.System.putInt(getActivity().getContentResolver(),
- Settings.System.SHOW_TOUCHES, mShowTouches.isChecked() ? 1 : 0);
- }
-
- private void updateShowTouchesOptions() {
- updateSwitchPreference(mShowTouches,
- Settings.System.getInt(getActivity().getContentResolver(),
- Settings.System.SHOW_TOUCHES, 0) != 0);
- }
-
- private void updateFlingerOptions() {
- // magic communication with surface flinger.
- try {
- IBinder flinger = ServiceManager.getService("SurfaceFlinger");
- if (flinger != null) {
- Parcel data = Parcel.obtain();
- Parcel reply = Parcel.obtain();
- data.writeInterfaceToken("android.ui.ISurfaceComposer");
- flinger.transact(1010, data, reply, 0);
- @SuppressWarnings("unused")
- int showCpu = reply.readInt();
- @SuppressWarnings("unused")
- int enableGL = reply.readInt();
- int showUpdates = reply.readInt();
- updateSwitchPreference(mShowScreenUpdates, showUpdates != 0);
- @SuppressWarnings("unused")
- int showBackground = reply.readInt();
- int disableOverlays = reply.readInt();
- updateSwitchPreference(mDisableOverlays, disableOverlays != 0);
- reply.recycle();
- data.recycle();
- }
- } catch (RemoteException ex) {
- }
- }
-
- private void writeShowUpdatesOption() {
- try {
- IBinder flinger = ServiceManager.getService("SurfaceFlinger");
- if (flinger != null) {
- Parcel data = Parcel.obtain();
- data.writeInterfaceToken("android.ui.ISurfaceComposer");
- final int showUpdates = mShowScreenUpdates.isChecked() ? 1 : 0;
- data.writeInt(showUpdates);
- flinger.transact(1002, data, null, 0);
- data.recycle();
-
- updateFlingerOptions();
- }
- } catch (RemoteException ex) {
- }
- }
-
- private void writeDisableOverlaysOption() {
- try {
- IBinder flinger = ServiceManager.getService("SurfaceFlinger");
- if (flinger != null) {
- Parcel data = Parcel.obtain();
- data.writeInterfaceToken("android.ui.ISurfaceComposer");
- final int disableOverlays = mDisableOverlays.isChecked() ? 1 : 0;
- data.writeInt(disableOverlays);
- flinger.transact(1008, data, null, 0);
- data.recycle();
-
- updateFlingerOptions();
- }
- } catch (RemoteException ex) {
- }
- }
-
- private void updateHardwareUiOptions() {
- updateSwitchPreference(mForceHardwareUi,
- SystemProperties.getBoolean(HARDWARE_UI_PROPERTY, false));
- }
-
- private void writeHardwareUiOptions() {
- SystemProperties.set(HARDWARE_UI_PROPERTY, mForceHardwareUi.isChecked() ? "true" : "false");
- SystemPropPoker.getInstance().poke();
- }
-
- private void updateMsaaOptions() {
- updateSwitchPreference(mForceMsaa, SystemProperties.getBoolean(MSAA_PROPERTY, false));
- }
-
- private void writeMsaaOptions() {
- SystemProperties.set(MSAA_PROPERTY, mForceMsaa.isChecked() ? "true" : "false");
- SystemPropPoker.getInstance().poke();
- }
-
- private void updateTrackFrameTimeOptions() {
- String value = SystemProperties.get(ThreadedRenderer.PROFILE_PROPERTY);
- if (value == null) {
- value = "";
- }
-
- CharSequence[] values = mTrackFrameTime.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- if (value.contentEquals(values[i])) {
- mTrackFrameTime.setValueIndex(i);
- mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[i]);
- return;
- }
- }
- mTrackFrameTime.setValueIndex(0);
- mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[0]);
- }
-
- private void writeTrackFrameTimeOptions(Object newValue) {
- SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY,
- newValue == null ? "" : newValue.toString());
- SystemPropPoker.getInstance().poke();
- updateTrackFrameTimeOptions();
- }
-
- private void updateShowNonRectClipOptions() {
- String value = SystemProperties.get(
- ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY);
- if (value == null) {
- value = "hide";
- }
-
- CharSequence[] values = mShowNonRectClip.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- if (value.contentEquals(values[i])) {
- mShowNonRectClip.setValueIndex(i);
- mShowNonRectClip.setSummary(mShowNonRectClip.getEntries()[i]);
- return;
- }
- }
- mShowNonRectClip.setValueIndex(0);
- mShowNonRectClip.setSummary(mShowNonRectClip.getEntries()[0]);
- }
-
- private void writeShowNonRectClipOptions(Object newValue) {
- SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY,
- newValue == null ? "" : newValue.toString());
- SystemPropPoker.getInstance().poke();
- updateShowNonRectClipOptions();
- }
-
- private void updateShowHwScreenUpdatesOptions() {
- updateSwitchPreference(mShowHwScreenUpdates,
- SystemProperties.getBoolean(ThreadedRenderer.DEBUG_DIRTY_REGIONS_PROPERTY, false));
- }
-
- private void writeShowHwScreenUpdatesOptions() {
- SystemProperties.set(ThreadedRenderer.DEBUG_DIRTY_REGIONS_PROPERTY,
- mShowHwScreenUpdates.isChecked() ? "true" : null);
- SystemPropPoker.getInstance().poke();
- }
-
- private void updateShowHwLayersUpdatesOptions() {
- updateSwitchPreference(mShowHwLayersUpdates, SystemProperties.getBoolean(
- ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY, false));
- }
-
- private void writeShowHwLayersUpdatesOptions() {
- SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_LAYERS_UPDATES_PROPERTY,
- mShowHwLayersUpdates.isChecked() ? "true" : null);
- SystemPropPoker.getInstance().poke();
- }
-
- private void updateDebugHwOverdrawOptions() {
- String value = SystemProperties.get(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY);
- if (value == null) {
- value = "";
- }
-
- CharSequence[] values = mDebugHwOverdraw.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- if (value.contentEquals(values[i])) {
- mDebugHwOverdraw.setValueIndex(i);
- mDebugHwOverdraw.setSummary(mDebugHwOverdraw.getEntries()[i]);
- return;
- }
- }
- mDebugHwOverdraw.setValueIndex(0);
- mDebugHwOverdraw.setSummary(mDebugHwOverdraw.getEntries()[0]);
- }
-
- private void writeDebugHwOverdrawOptions(Object newValue) {
- SystemProperties.set(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY,
- newValue == null ? "" : newValue.toString());
- SystemPropPoker.getInstance().poke();
- updateDebugHwOverdrawOptions();
- }
-
- private void updateDebugHwRendererOptions() {
- String value = SystemProperties.get(ThreadedRenderer.DEBUG_RENDERER_PROPERTY);
- if (value == null) {
- value = "";
- }
-
- CharSequence[] values = mDebugHwRenderer.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- if (value.contentEquals(values[i])) {
- mDebugHwRenderer.setValueIndex(i);
- mDebugHwRenderer.setSummary(mDebugHwRenderer.getEntries()[i]);
- return;
- }
- }
- mDebugHwRenderer.setValueIndex(0);
- mDebugHwRenderer.setSummary(mDebugHwRenderer.getEntries()[0]);
- }
-
- private void writeDebugHwRendererOptions(Object newValue) {
- SystemProperties.set(ThreadedRenderer.DEBUG_RENDERER_PROPERTY,
- newValue == null ? "" : newValue.toString());
- SystemPropPoker.getInstance().poke();
- updateDebugHwRendererOptions();
- }
-
- private void updateDebugLayoutOptions() {
- updateSwitchPreference(mDebugLayout,
- SystemProperties.getBoolean(View.DEBUG_LAYOUT_PROPERTY, false));
- }
-
- private void writeDebugLayoutOptions() {
- SystemProperties.set(View.DEBUG_LAYOUT_PROPERTY,
- mDebugLayout.isChecked() ? "true" : "false");
- SystemPropPoker.getInstance().poke();
- }
-
- private void updateSimulateColorSpace() {
- final ContentResolver cr = getContentResolver();
- final boolean enabled = Settings.Secure.getInt(
- cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0) != 0;
- if (enabled) {
- final String mode = Integer.toString(Settings.Secure.getInt(
- cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
- AccessibilityManager.DALTONIZER_DISABLED));
- mSimulateColorSpace.setValue(mode);
- final int index = mSimulateColorSpace.findIndexOfValue(mode);
- if (index < 0) {
- // We're using a mode controlled by accessibility preferences.
- mSimulateColorSpace.setSummary(getString(R.string.daltonizer_type_overridden,
- getString(R.string.accessibility_display_daltonizer_preference_title)));
- } else {
- mSimulateColorSpace.setSummary("%s");
- }
- } else {
- mSimulateColorSpace.setValue(
- Integer.toString(AccessibilityManager.DALTONIZER_DISABLED));
- }
- }
-
- /**
- * @return <code>true</code> if the color space preference is currently
- * controlled by development settings
- */
- private boolean usingDevelopmentColorSpace() {
- final ContentResolver cr = getContentResolver();
- final boolean enabled = Settings.Secure.getInt(
- cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0) != 0;
- if (enabled) {
- final String mode = Integer.toString(Settings.Secure.getInt(
- cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
- AccessibilityManager.DALTONIZER_DISABLED));
- final int index = mSimulateColorSpace.findIndexOfValue(mode);
- if (index >= 0) {
- // We're using a mode controlled by developer preferences.
- return true;
- }
- }
- return false;
- }
-
- private void writeSimulateColorSpace(Object value) {
- final ContentResolver cr = getContentResolver();
- final int newMode = Integer.parseInt(value.toString());
- if (newMode < 0) {
- Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0);
- } else {
- Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 1);
- Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, newMode);
- }
- }
-
- private void updateColorTemperature() {
- updateSwitchPreference(mColorTemperaturePreference,
- SystemProperties.getBoolean(COLOR_TEMPERATURE_PROPERTY, false));
- }
-
- private void writeColorTemperature() {
- SystemProperties.set(COLOR_TEMPERATURE_PROPERTY,
- mColorTemperaturePreference.isChecked() ? "1" : "0");
- SystemPropPoker.getInstance().poke();
- Toast.makeText(getActivity(), R.string.color_temperature_toast, Toast.LENGTH_LONG).show();
- }
-
- private void updateUSBAudioOptions() {
- updateSwitchPreference(mUSBAudio, Settings.Secure.getInt(getContentResolver(),
- Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED, 0) != 0);
- }
-
- private void writeUSBAudioOptions() {
- Settings.Secure.putInt(getContentResolver(),
- Settings.Secure.USB_AUDIO_AUTOMATIC_ROUTING_DISABLED,
- mUSBAudio.isChecked() ? 1 : 0);
- }
-
- private void updateForceResizableOptions() {
- updateSwitchPreference(mForceResizable, Settings.Global.getInt(getContentResolver(),
- Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES, 0) != 0);
- }
-
- private void writeForceResizableOptions() {
- Settings.Global.putInt(getContentResolver(),
- Settings.Global.DEVELOPMENT_FORCE_RESIZABLE_ACTIVITIES,
- mForceResizable.isChecked() ? 1 : 0);
- }
-
- private void updateEnableFreeformWindowsSupportOptions() {
- updateSwitchPreference(mEnableFreeformSupport, Settings.Global.getInt(getContentResolver(),
- Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, 0) != 0);
- }
-
- private void writeEnableFreeformWindowsSupportOptions() {
- Settings.Global.putInt(getContentResolver(),
- Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
- mEnableFreeformSupport.isChecked() ? 1 : 0);
- }
-
- private void updateForceRtlOptions() {
- updateSwitchPreference(mForceRtlLayout,
- Settings.Global.getInt(getActivity().getContentResolver(),
- Settings.Global.DEVELOPMENT_FORCE_RTL, 0) != 0);
- }
-
- private void writeForceRtlOptions() {
- boolean value = mForceRtlLayout.isChecked();
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.DEVELOPMENT_FORCE_RTL, value ? 1 : 0);
- SystemProperties.set(Settings.Global.DEVELOPMENT_FORCE_RTL, value ? "1" : "0");
- LocalePicker.updateLocales(getActivity().getResources().getConfiguration().getLocales());
- }
-
- private void updateWifiDisplayCertificationOptions() {
- updateSwitchPreference(mWifiDisplayCertification, Settings.Global.getInt(
- getActivity().getContentResolver(),
- Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON, 0) != 0);
- }
-
- private void writeWifiDisplayCertificationOptions() {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.WIFI_DISPLAY_CERTIFICATION_ON,
- mWifiDisplayCertification.isChecked() ? 1 : 0);
- }
-
- private void updateWifiVerboseLoggingOptions() {
- boolean enabled = mWifiManager.getVerboseLoggingLevel() > 0;
- updateSwitchPreference(mWifiVerboseLogging, enabled);
- }
-
- private void writeWifiVerboseLoggingOptions() {
- mWifiManager.enableVerboseLogging(mWifiVerboseLogging.isChecked() ? 1 : 0);
- }
-
- private void updateWifiAggressiveHandoverOptions() {
- boolean enabled = mWifiManager.getAggressiveHandover() > 0;
- updateSwitchPreference(mWifiAggressiveHandover, enabled);
- }
-
- private void writeWifiAggressiveHandoverOptions() {
- mWifiManager.enableAggressiveHandover(mWifiAggressiveHandover.isChecked() ? 1 : 0);
- }
-
- private void updateWifiAllowScansWithTrafficOptions() {
- boolean enabled = mWifiManager.getAllowScansWithTraffic() > 0;
- updateSwitchPreference(mWifiAllowScansWithTraffic, enabled);
- }
-
- private void writeWifiAllowScansWithTrafficOptions() {
- mWifiManager.setAllowScansWithTraffic(mWifiAllowScansWithTraffic.isChecked() ? 1 : 0);
- }
-
- private void updateBluetoothShowDevicesWithoutUserFriendlyNameOptions() {
- updateSwitchPreference(mBluetoothShowDevicesWithoutNames,
- SystemProperties.getBoolean(
- BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY, false));
- }
-
- private void writeBluetoothShowDevicesWithoutUserFriendlyNameOptions() {
- SystemProperties.set(BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY,
- mBluetoothShowDevicesWithoutNames.isChecked() ? "true" : "false");
- }
-
- private void updateBluetoothDisableAbsVolumeOptions() {
- updateSwitchPreference(mBluetoothDisableAbsVolume,
- SystemProperties.getBoolean(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY, false));
- }
-
- private void writeBluetoothDisableAbsVolumeOptions() {
- SystemProperties.set(BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_PROPERTY,
- mBluetoothDisableAbsVolume.isChecked() ? "true" : "false");
- }
-
- private void updateBluetoothEnableInbandRingingOptions() {
- if (mBluetoothEnableInbandRinging != null) {
- updateSwitchPreference(mBluetoothEnableInbandRinging,
- SystemProperties.getBoolean(BLUETOOTH_ENABLE_INBAND_RINGING_PROPERTY, true));
- }
- }
-
- private void writeBluetoothEnableInbandRingingOptions() {
- if (mBluetoothEnableInbandRinging != null) {
- SystemProperties.set(BLUETOOTH_ENABLE_INBAND_RINGING_PROPERTY,
- mBluetoothEnableInbandRinging.isChecked() ? "true" : "false");
- }
- }
-
- private void updateMobileDataAlwaysOnOptions() {
- updateSwitchPreference(mMobileDataAlwaysOn, Settings.Global.getInt(
- getActivity().getContentResolver(),
- Settings.Global.MOBILE_DATA_ALWAYS_ON, 1) != 0);
- }
-
- private void writeMobileDataAlwaysOnOptions() {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.MOBILE_DATA_ALWAYS_ON,
- mMobileDataAlwaysOn.isChecked() ? 1 : 0);
- }
-
- private void updateTetheringHardwareOffloadOptions() {
- updateSwitchPreference(mTetheringHardwareOffload, Settings.Global.getInt(
- getActivity().getContentResolver(),
- Settings.Global.TETHER_OFFLOAD_DISABLED, 0) != 1);
- }
-
- private void writeTetheringHardwareOffloadOptions() {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.TETHER_OFFLOAD_DISABLED,
- mTetheringHardwareOffload.isChecked() ? 0 : 1);
- }
-
- private void updateUsbConfigurationValues() {
- if (mUsbConfiguration != null) {
- UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
-
- String[] values = getResources().getStringArray(R.array.usb_configuration_values);
- String[] titles = getResources().getStringArray(R.array.usb_configuration_titles);
- int index = 0;
- for (int i = 0; i < titles.length; i++) {
- if (manager.isFunctionEnabled(values[i])) {
- index = i;
- break;
- }
- }
- mUsbConfiguration.setValue(values[index]);
- mUsbConfiguration.setSummary(titles[index]);
- mUsbConfiguration.setOnPreferenceChangeListener(this);
- }
- }
-
- private void writeUsbConfigurationOption(Object newValue) {
- UsbManager manager = (UsbManager) getActivity().getSystemService(Context.USB_SERVICE);
- String function = newValue.toString();
- if (function.equals("none")) {
- manager.setCurrentFunction(function, false);
- } else {
- manager.setCurrentFunction(function, true);
- }
- }
-
- private void initBluetoothConfigurationValues() {
- String[] values;
- String[] summaries;
- int index;
-
- // Init the AVRCP Version - Default
- values = getResources().getStringArray(R.array.bluetooth_avrcp_version_values);
- summaries = getResources().getStringArray(R.array.bluetooth_avrcp_versions);
- String value = SystemProperties.get(BLUETOOTH_AVRCP_VERSION_PROPERTY, values[0]);
- index = mBluetoothSelectAvrcpVersion.findIndexOfValue(value);
- mBluetoothSelectAvrcpVersion.setValue(values[index]);
- mBluetoothSelectAvrcpVersion.setSummary(summaries[index]);
-
- // Init the Codec Type - Default
- values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_values);
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
- index = 0;
- mBluetoothSelectA2dpCodec.setValue(values[index]);
- mBluetoothSelectA2dpCodec.setSummary(summaries[index]);
-
- // Init the Sample Rate - Default
- values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_values);
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
- index = 0;
- mBluetoothSelectA2dpSampleRate.setValue(values[index]);
- mBluetoothSelectA2dpSampleRate.setSummary(summaries[index]);
-
- // Init the Bits Per Sample - Default
- values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_values);
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
- index = 0;
- mBluetoothSelectA2dpBitsPerSample.setValue(values[index]);
- mBluetoothSelectA2dpBitsPerSample.setSummary(summaries[index]);
-
- // Init the Channel Mode - Default
- values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_values);
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
- index = 0;
- mBluetoothSelectA2dpChannelMode.setValue(values[index]);
- mBluetoothSelectA2dpChannelMode.setSummary(summaries[index]);
-
- // Init the LDAC Playback Quality - ABR
- values = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_values);
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
- index = 3;
- mBluetoothSelectA2dpLdacPlaybackQuality.setValue(values[index]);
- mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
- }
-
- private void writeBluetoothAvrcpVersion(Object newValue) {
- SystemProperties.set(BLUETOOTH_AVRCP_VERSION_PROPERTY, newValue.toString());
- int index = mBluetoothSelectAvrcpVersion.findIndexOfValue(newValue.toString());
- if (index >= 0) {
- String[] titles = getResources().getStringArray(R.array.bluetooth_avrcp_versions);
- mBluetoothSelectAvrcpVersion.setSummary(titles[index]);
- }
- }
-
- private void updateBluetoothA2dpConfigurationValues() {
- int index;
- String[] summaries;
- BluetoothCodecStatus codecStatus = null;
- BluetoothCodecConfig codecConfig = null;
- BluetoothCodecConfig[] codecsLocalCapabilities = null;
- BluetoothCodecConfig[] codecsSelectableCapabilities = null;
- String streaming;
- Resources resources = null;
-
- synchronized (mBluetoothA2dpLock) {
- if (mBluetoothA2dp != null) {
- codecStatus = mBluetoothA2dp.getCodecStatus();
- if (codecStatus != null) {
- codecConfig = codecStatus.getCodecConfig();
- codecsLocalCapabilities = codecStatus.getCodecsLocalCapabilities();
- codecsSelectableCapabilities = codecStatus.getCodecsSelectableCapabilities();
- }
- }
- }
- if (codecConfig == null) {
- return;
- }
-
- try {
- resources = getResources();
- } catch (IllegalStateException e) {
- return;
- }
- if (resources == null) {
- return;
- }
-
- // Update the Codec Type
- index = -1;
- switch (codecConfig.getCodecType()) {
- case BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC:
- index = 1;
- break;
- case BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC:
- index = 2;
- break;
- case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX:
- index = 3;
- break;
- case BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD:
- index = 4;
- break;
- case BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC:
- index = 5;
- break;
- case BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID:
- default:
- break;
- }
- if (index >= 0 && mBluetoothSelectA2dpCodec != null) {
- summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_summaries);
- streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
- mBluetoothSelectA2dpCodec.setSummary(streaming);
- }
-
- // Update the Sample Rate
- index = -1;
- switch (codecConfig.getSampleRate()) {
- case BluetoothCodecConfig.SAMPLE_RATE_44100:
- index = 1;
- break;
- case BluetoothCodecConfig.SAMPLE_RATE_48000:
- index = 2;
- break;
- case BluetoothCodecConfig.SAMPLE_RATE_88200:
- index = 3;
- break;
- case BluetoothCodecConfig.SAMPLE_RATE_96000:
- index = 4;
- break;
- case BluetoothCodecConfig.SAMPLE_RATE_176400:
- case BluetoothCodecConfig.SAMPLE_RATE_192000:
- case BluetoothCodecConfig.SAMPLE_RATE_NONE:
- default:
- break;
- }
- if (index >= 0 && mBluetoothSelectA2dpSampleRate != null) {
- summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
- streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
- mBluetoothSelectA2dpSampleRate.setSummary(streaming);
- }
-
- // Update the Bits Per Sample
- index = -1;
- switch (codecConfig.getBitsPerSample()) {
- case BluetoothCodecConfig.BITS_PER_SAMPLE_16:
- index = 1;
- break;
- case BluetoothCodecConfig.BITS_PER_SAMPLE_24:
- index = 2;
- break;
- case BluetoothCodecConfig.BITS_PER_SAMPLE_32:
- index = 3;
- break;
- case BluetoothCodecConfig.BITS_PER_SAMPLE_NONE:
- default:
- break;
- }
- if (index >= 0 && mBluetoothSelectA2dpBitsPerSample != null) {
- summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
- streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
- mBluetoothSelectA2dpBitsPerSample.setSummary(streaming);
- }
-
- // Update the Channel Mode
- index = -1;
- switch (codecConfig.getChannelMode()) {
- case BluetoothCodecConfig.CHANNEL_MODE_MONO:
- index = 1;
- break;
- case BluetoothCodecConfig.CHANNEL_MODE_STEREO:
- index = 2;
- break;
- case BluetoothCodecConfig.CHANNEL_MODE_NONE:
- default:
- break;
- }
- if (index >= 0 && mBluetoothSelectA2dpChannelMode != null) {
- summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
- streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
- mBluetoothSelectA2dpChannelMode.setSummary(streaming);
- }
-
- // Update the LDAC Playback Quality
- // The actual values are 0, 1, 2 - those are extracted
- // as mod-10 remainders of a larger value.
- // The reason is because within BluetoothCodecConfig we cannot use
- // a codec-specific value of zero.
- index = (int)codecConfig.getCodecSpecific1();
- if (index > 0) {
- index %= 10;
- } else {
- index = -1;
- }
- switch (index) {
- case 0:
- case 1:
- case 2:
- case 3:
- break;
- default:
- index = -1;
- break;
- }
- if (index >= 0 && mBluetoothSelectA2dpLdacPlaybackQuality != null) {
- summaries = resources.getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
- streaming = resources.getString(R.string.bluetooth_select_a2dp_codec_streaming_label, summaries[index]);
- mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(streaming);
- }
- }
-
- private void writeBluetoothConfigurationOption(Preference preference,
- Object newValue) {
- String[] summaries;
- int index;
- int codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
- int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
- int sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE;
- int bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE;
- int channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_NONE;
- long codecSpecific1Value = 0;
- long codecSpecific2Value = 0;
- long codecSpecific3Value = 0;
- long codecSpecific4Value = 0;
-
- // Codec Type
- String codecType = mBluetoothSelectA2dpCodec.getValue();
- if (preference == mBluetoothSelectA2dpCodec) {
- codecType = newValue.toString();
- index = mBluetoothSelectA2dpCodec.findIndexOfValue(newValue.toString());
- if (index >= 0) {
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_summaries);
- mBluetoothSelectA2dpCodec.setSummary(summaries[index]);
- }
- }
- index = mBluetoothSelectA2dpCodec.findIndexOfValue(codecType);
- switch (index) {
- case 0:
- // Reset the priority of the current codec to default
- String oldValue = mBluetoothSelectA2dpCodec.getValue();
- switch (mBluetoothSelectA2dpCodec.findIndexOfValue(oldValue)) {
- case 0:
- break; // No current codec
- case 1:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
- break;
- case 2:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
- break;
- case 3:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
- break;
- case 4:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
- break;
- case 5:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
- break;
- default:
- break;
- }
- break;
- case 1:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_SBC;
- codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
- break;
- case 2:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC;
- codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
- break;
- case 3:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX;
- codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
- break;
- case 4:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_APTX_HD;
- codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
- break;
- case 5:
- codecTypeValue = BluetoothCodecConfig.SOURCE_CODEC_TYPE_LDAC;
- codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST;
- break;
- case 6:
- synchronized (mBluetoothA2dpLock) {
- if (mBluetoothA2dp != null) {
- mBluetoothA2dp.enableOptionalCodecs();
- }
- }
- return;
- case 7:
- synchronized (mBluetoothA2dpLock) {
- if (mBluetoothA2dp != null) {
- mBluetoothA2dp.disableOptionalCodecs();
- }
- }
- return;
- default:
- break;
- }
-
- // Sample Rate
- String sampleRate = mBluetoothSelectA2dpSampleRate.getValue();
- if (preference == mBluetoothSelectA2dpSampleRate) {
- sampleRate = newValue.toString();
- index = mBluetoothSelectA2dpSampleRate.findIndexOfValue(newValue.toString());
- if (index >= 0) {
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_sample_rate_summaries);
- mBluetoothSelectA2dpSampleRate.setSummary(summaries[index]);
- }
- }
- index = mBluetoothSelectA2dpSampleRate.findIndexOfValue(sampleRate);
- switch (index) {
- case 0:
- // Reset to default
- break;
- case 1:
- sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_44100;
- break;
- case 2:
- sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_48000;
- break;
- case 3:
- sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_88200;
- break;
- case 4:
- sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_96000;
- break;
- default:
- break;
- }
-
- // Bits Per Sample
- String bitsPerSample = mBluetoothSelectA2dpBitsPerSample.getValue();
- if (preference == mBluetoothSelectA2dpBitsPerSample) {
- bitsPerSample = newValue.toString();
- index = mBluetoothSelectA2dpBitsPerSample.findIndexOfValue(newValue.toString());
- if (index >= 0) {
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
- mBluetoothSelectA2dpBitsPerSample.setSummary(summaries[index]);
- }
- }
- index = mBluetoothSelectA2dpBitsPerSample.findIndexOfValue(bitsPerSample);
- switch (index) {
- case 0:
- // Reset to default
- break;
- case 1:
- bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_16;
- break;
- case 2:
- bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_24;
- break;
- case 3:
- bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_32;
- break;
- default:
- break;
- }
-
- // Channel Mode
- String channelMode = mBluetoothSelectA2dpChannelMode.getValue();
- if (preference == mBluetoothSelectA2dpChannelMode) {
- channelMode = newValue.toString();
- index = mBluetoothSelectA2dpChannelMode.findIndexOfValue(newValue.toString());
- if (index >= 0) {
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_channel_mode_summaries);
- mBluetoothSelectA2dpChannelMode.setSummary(summaries[index]);
- }
- }
- index = mBluetoothSelectA2dpChannelMode.findIndexOfValue(channelMode);
- switch (index) {
- case 0:
- // Reset to default
- break;
- case 1:
- channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_MONO;
- break;
- case 2:
- channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_STEREO;
- break;
- default:
- break;
- }
-
- // LDAC Playback Quality
- String ldacPlaybackQuality = mBluetoothSelectA2dpLdacPlaybackQuality.getValue();
- if (preference == mBluetoothSelectA2dpLdacPlaybackQuality) {
- ldacPlaybackQuality = newValue.toString();
- index = mBluetoothSelectA2dpLdacPlaybackQuality.findIndexOfValue(newValue.toString());
- if (index >= 0) {
- summaries = getResources().getStringArray(R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
- mBluetoothSelectA2dpLdacPlaybackQuality.setSummary(summaries[index]);
- }
- }
- index = mBluetoothSelectA2dpLdacPlaybackQuality.findIndexOfValue(ldacPlaybackQuality);
- switch (index) {
- case 0:
- case 1:
- case 2:
- case 3:
- codecSpecific1Value = 1000 + index;
- break;
- default:
- break;
- }
-
- BluetoothCodecConfig codecConfig =
- new BluetoothCodecConfig(codecTypeValue, codecPriorityValue,
- sampleRateValue, bitsPerSampleValue,
- channelModeValue, codecSpecific1Value,
- codecSpecific2Value, codecSpecific3Value,
- codecSpecific4Value);
-
- synchronized (mBluetoothA2dpLock) {
- if (mBluetoothA2dp != null) {
- mBluetoothA2dp.setCodecConfigPreference(codecConfig);
- }
- }
- }
-
- private void writeImmediatelyDestroyActivitiesOptions() {
- try {
- ActivityManager.getService().setAlwaysFinish(
- mImmediatelyDestroyActivities.isChecked());
- } catch (RemoteException ex) {
- }
- }
-
- private void updateImmediatelyDestroyActivitiesOptions() {
- updateSwitchPreference(mImmediatelyDestroyActivities, Settings.Global.getInt(
- getActivity().getContentResolver(), Settings.Global.ALWAYS_FINISH_ACTIVITIES, 0)
- != 0);
- }
-
- private void updateAnimationScaleValue(int which, ListPreference pref) {
- try {
- float scale = mWindowManager.getAnimationScale(which);
- if (scale != 1) {
- mHaveDebugSettings = true;
- }
- CharSequence[] values = pref.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- float val = Float.parseFloat(values[i].toString());
- if (scale <= val) {
- pref.setValueIndex(i);
- pref.setSummary(pref.getEntries()[i]);
- return;
- }
- }
- pref.setValueIndex(values.length - 1);
- pref.setSummary(pref.getEntries()[0]);
- } catch (RemoteException e) {
- }
- }
-
- private void updateAnimationScaleOptions() {
- updateAnimationScaleValue(0, mWindowAnimationScale);
- updateAnimationScaleValue(1, mTransitionAnimationScale);
- updateAnimationScaleValue(2, mAnimatorDurationScale);
- }
-
- private void writeAnimationScaleOption(int which, ListPreference pref, Object newValue) {
- try {
- float scale = newValue != null ? Float.parseFloat(newValue.toString()) : 1;
- mWindowManager.setAnimationScale(which, scale);
- updateAnimationScaleValue(which, pref);
- } catch (RemoteException e) {
- }
- }
-
- private void updateOverlayDisplayDevicesOptions() {
- String value = Settings.Global.getString(getActivity().getContentResolver(),
- Settings.Global.OVERLAY_DISPLAY_DEVICES);
- if (value == null) {
- value = "";
- }
-
- CharSequence[] values = mOverlayDisplayDevices.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- if (value.contentEquals(values[i])) {
- mOverlayDisplayDevices.setValueIndex(i);
- mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[i]);
- return;
- }
- }
- mOverlayDisplayDevices.setValueIndex(0);
- mOverlayDisplayDevices.setSummary(mOverlayDisplayDevices.getEntries()[0]);
- }
-
- private void writeOverlayDisplayDevicesOptions(Object newValue) {
- Settings.Global.putString(getActivity().getContentResolver(),
- Settings.Global.OVERLAY_DISPLAY_DEVICES, (String) newValue);
- updateOverlayDisplayDevicesOptions();
- }
-
- private void updateAppProcessLimitOptions() {
- try {
- int limit = ActivityManager.getService().getProcessLimit();
- CharSequence[] values = mAppProcessLimit.getEntryValues();
- for (int i = 0; i < values.length; i++) {
- int val = Integer.parseInt(values[i].toString());
- if (val >= limit) {
- if (i != 0) {
- mHaveDebugSettings = true;
- }
- mAppProcessLimit.setValueIndex(i);
- mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[i]);
- return;
- }
- }
- mAppProcessLimit.setValueIndex(0);
- mAppProcessLimit.setSummary(mAppProcessLimit.getEntries()[0]);
- } catch (RemoteException e) {
- }
- }
-
- private void writeAppProcessLimitOptions(Object newValue) {
- try {
- int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
- ActivityManager.getService().setProcessLimit(limit);
- updateAppProcessLimitOptions();
- } catch (RemoteException e) {
- }
- }
-
- private void writeShowAllANRsOptions() {
- Settings.Secure.putInt(getActivity().getContentResolver(),
- Settings.Secure.ANR_SHOW_BACKGROUND,
- mShowAllANRs.isChecked() ? 1 : 0);
- }
-
- private void updateShowAllANRsOptions() {
- updateSwitchPreference(mShowAllANRs, Settings.Secure.getInt(
- getActivity().getContentResolver(), Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0);
- }
-
- private void writeShowNotificationChannelWarningsOptions() {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS,
- mShowNotificationChannelWarnings.isChecked() ? 1 : 0);
- }
-
- private void updateShowNotificationChannelWarningsOptions() {
- final int defaultWarningEnabled = Build.IS_DEBUGGABLE ? 1 : 0;
- updateSwitchPreference(mShowNotificationChannelWarnings, Settings.Global.getInt(
- getActivity().getContentResolver(),
- Settings.Global.SHOW_NOTIFICATION_CHANNEL_WARNINGS, defaultWarningEnabled) != 0);
- }
-
- private void confirmEnableOemUnlock() {
- DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- mOemLockManager.setOemUnlockAllowedByUser(true);
- }
- }
- };
-
- DialogInterface.OnDismissListener onDismissListener =
- new DialogInterface.OnDismissListener() {
- @Override
- public void onDismiss(DialogInterface dialog) {
- if (getActivity() == null) {
- return;
- }
- updateAllOptions();
- }
- };
-
- new AlertDialog.Builder(getActivity())
- .setTitle(R.string.confirm_enable_oem_unlock_title)
- .setMessage(R.string.confirm_enable_oem_unlock_text)
- .setPositiveButton(R.string.enable_text, onClickListener)
- .setNegativeButton(android.R.string.cancel, null)
- .setOnDismissListener(onDismissListener)
- .create()
- .show();
- }
-
- @Override
- public void onSwitchChanged(Switch switchView, boolean isChecked) {
- if (switchView != mSwitchBar.getSwitch()) {
- return;
- }
- final boolean developmentEnabledState =
- DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext());
- if (isChecked != developmentEnabledState) {
- if (isChecked) {
- mDialogClicked = false;
- if (mEnableDialog != null) dismissDialogs();
- mEnableDialog = new AlertDialog.Builder(getActivity()).setMessage(
- getActivity().getResources().getString(
- R.string.dev_settings_warning_message))
- .setTitle(R.string.dev_settings_warning_title)
- .setPositiveButton(android.R.string.yes, this)
- .setNegativeButton(android.R.string.no, this)
- .show();
- mEnableDialog.setOnDismissListener(this);
- } else {
- resetDangerousOptions();
- DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), false);
- setPrefsEnabledState(false);
- }
- }
- }
-
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == RESULT_DEBUG_APP) {
- if (resultCode == Activity.RESULT_OK) {
- mDebugApp = data.getAction();
- writeDebuggerOptions();
- updateDebuggerOptions();
- }
- } else if (requestCode == RESULT_MOCK_LOCATION_APP) {
- if (resultCode == Activity.RESULT_OK) {
- mMockLocationApp = data.getAction();
- writeMockLocation();
- updateMockLocation();
- }
- } else if (requestCode == REQUEST_CODE_ENABLE_OEM_UNLOCK) {
- if (resultCode == Activity.RESULT_OK) {
- if (mEnableOemUnlock.isChecked()) {
- confirmEnableOemUnlock();
- } else {
- mOemLockManager.setOemUnlockAllowedByUser(false);
- }
- }
- } else {
- super.onActivityResult(requestCode, resultCode, data);
- }
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (Utils.isMonkeyRunning()) {
- return false;
- }
-
- if (mBugReportInPowerController.handlePreferenceTreeClick(preference)) {
- return true;
- }
-
- if (mConnectivityMonitorController.handlePreferenceTreeClick(preference)) {
- return true;
- }
-
- if (mWebViewAppPrefController.handlePreferenceTreeClick(preference)) {
- return true;
- }
-
- if (mVerifyAppsOverUsbController.handlePreferenceTreeClick(preference)) {
- return true;
- }
-
- if (mEnableAdbController.handlePreferenceTreeClick(preference)) {
- return true;
- }
-
- if (mCameraLaserSensorController.handlePreferenceTreeClick(preference)) {
- return true;
- }
-
- if (preference == mClearAdbKeys) {
- if (mAdbKeysDialog != null) dismissDialogs();
- mAdbKeysDialog = new AlertDialog.Builder(getActivity())
- .setMessage(R.string.adb_keys_warning_message)
- .setPositiveButton(android.R.string.ok, this)
- .setNegativeButton(android.R.string.cancel, null)
- .show();
- } else if (preference == mEnableTerminal) {
- final PackageManager pm = getActivity().getPackageManager();
- pm.setApplicationEnabledSetting(TERMINAL_APP_PACKAGE,
- mEnableTerminal.isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
- : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0);
- } else if (preference == mKeepScreenOn) {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
- mKeepScreenOn.isChecked() ?
- (BatteryManager.BATTERY_PLUGGED_AC | BatteryManager.BATTERY_PLUGGED_USB
- | BatteryManager.BATTERY_PLUGGED_WIRELESS) : 0);
- } else if (preference == mBtHciSnoopLog) {
- writeBtHciSnoopLogOptions();
- } else if (preference == mEnableOemUnlock && mEnableOemUnlock.isEnabled()) {
- if (mEnableOemUnlock.isChecked()) {
- if (!showKeyguardConfirmation(getResources(), REQUEST_CODE_ENABLE_OEM_UNLOCK)) {
- confirmEnableOemUnlock();
- }
- } else {
- mOemLockManager.setOemUnlockAllowedByUser(false);
- }
- } else if (preference == mMockLocationAppPref) {
- Intent intent = new Intent(getActivity(), AppPicker.class);
- intent.putExtra(AppPicker.EXTRA_REQUESTIING_PERMISSION,
- Manifest.permission.ACCESS_MOCK_LOCATION);
- startActivityForResult(intent, RESULT_MOCK_LOCATION_APP);
- } else if (preference == mDebugViewAttributes) {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.DEBUG_VIEW_ATTRIBUTES,
- mDebugViewAttributes.isChecked() ? 1 : 0);
- } else if (preference == mForceAllowOnExternal) {
- Settings.Global.putInt(getActivity().getContentResolver(),
- Settings.Global.FORCE_ALLOW_ON_EXTERNAL,
- mForceAllowOnExternal.isChecked() ? 1 : 0);
- } else if (preference == mDebugAppPref) {
- Intent intent = new Intent(getActivity(), AppPicker.class);
- intent.putExtra(AppPicker.EXTRA_DEBUGGABLE, true);
- startActivityForResult(intent, RESULT_DEBUG_APP);
- } else if (preference == mWaitForDebugger) {
- writeDebuggerOptions();
- } else if (preference == mOtaDisableAutomaticUpdate) {
- writeOtaDisableAutomaticUpdateOptions();
- } else if (preference == mStrictMode) {
- writeStrictModeVisualOptions();
- } else if (preference == mPointerLocation) {
- writePointerLocationOptions();
- } else if (preference == mShowTouches) {
- writeShowTouchesOptions();
- } else if (preference == mShowScreenUpdates) {
- writeShowUpdatesOption();
- } else if (preference == mDisableOverlays) {
- writeDisableOverlaysOption();
- } else if (preference == mImmediatelyDestroyActivities) {
- writeImmediatelyDestroyActivitiesOptions();
- } else if (preference == mShowAllANRs) {
- writeShowAllANRsOptions();
- } else if (preference == mShowNotificationChannelWarnings) {
- writeShowNotificationChannelWarningsOptions();
- } else if (preference == mForceHardwareUi) {
- writeHardwareUiOptions();
- } else if (preference == mForceMsaa) {
- writeMsaaOptions();
- } else if (preference == mShowHwScreenUpdates) {
- writeShowHwScreenUpdatesOptions();
- } else if (preference == mShowHwLayersUpdates) {
- writeShowHwLayersUpdatesOptions();
- } else if (preference == mDebugLayout) {
- writeDebugLayoutOptions();
- } else if (preference == mForceRtlLayout) {
- writeForceRtlOptions();
- } else if (preference == mWifiDisplayCertification) {
- writeWifiDisplayCertificationOptions();
- } else if (preference == mWifiVerboseLogging) {
- writeWifiVerboseLoggingOptions();
- } else if (preference == mWifiAggressiveHandover) {
- writeWifiAggressiveHandoverOptions();
- } else if (preference == mWifiAllowScansWithTraffic) {
- writeWifiAllowScansWithTrafficOptions();
- } else if (preference == mMobileDataAlwaysOn) {
- writeMobileDataAlwaysOnOptions();
- } else if (preference == mTetheringHardwareOffload) {
- writeTetheringHardwareOffloadOptions();
- } else if (preference == mColorTemperaturePreference) {
- writeColorTemperature();
- } else if (preference == mUSBAudio) {
- writeUSBAudioOptions();
- } else if (preference == mForceResizable) {
- writeForceResizableOptions();
- } else if (preference == mEnableFreeformSupport){
- writeEnableFreeformWindowsSupportOptions();
- } else if (preference == mBluetoothShowDevicesWithoutNames) {
- writeBluetoothShowDevicesWithoutUserFriendlyNameOptions();
- } else if (preference == mBluetoothDisableAbsVolume) {
- writeBluetoothDisableAbsVolumeOptions();
- } else if (preference == mBluetoothEnableInbandRinging) {
- writeBluetoothEnableInbandRingingOptions();
- } else if (SHORTCUT_MANAGER_RESET_KEY.equals(preference.getKey())) {
- resetShortcutManagerThrottling();
- } else {
- return super.onPreferenceTreeClick(preference);
- }
-
- return false;
- }
-
- private boolean showKeyguardConfirmation(Resources resources, int requestCode) {
- return new ChooseLockSettingsHelper(getActivity(), this).launchConfirmationActivity(
- requestCode, resources.getString(R.string.oem_unlock_enable));
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- if (HDCP_CHECKING_KEY.equals(preference.getKey())) {
- SystemProperties.set(HDCP_CHECKING_PROPERTY, newValue.toString());
- updateHdcpValues();
- SystemPropPoker.getInstance().poke();
- return true;
- } else if (preference == mBluetoothSelectAvrcpVersion) {
- writeBluetoothAvrcpVersion(newValue);
- return true;
- } else if ((preference == mBluetoothSelectA2dpCodec) ||
- (preference == mBluetoothSelectA2dpSampleRate) ||
- (preference == mBluetoothSelectA2dpBitsPerSample) ||
- (preference == mBluetoothSelectA2dpChannelMode) ||
- (preference == mBluetoothSelectA2dpLdacPlaybackQuality)) {
- writeBluetoothConfigurationOption(preference, newValue);
- return true;
- } else if (preference == mUsbConfiguration) {
- writeUsbConfigurationOption(newValue);
- return true;
- } else if (preference == mWindowAnimationScale) {
- writeAnimationScaleOption(0, mWindowAnimationScale, newValue);
- return true;
- } else if (preference == mTransitionAnimationScale) {
- writeAnimationScaleOption(1, mTransitionAnimationScale, newValue);
- return true;
- } else if (preference == mAnimatorDurationScale) {
- writeAnimationScaleOption(2, mAnimatorDurationScale, newValue);
- return true;
- } else if (preference == mOverlayDisplayDevices) {
- writeOverlayDisplayDevicesOptions(newValue);
- return true;
- } else if (preference == mTrackFrameTime) {
- writeTrackFrameTimeOptions(newValue);
- return true;
- } else if (preference == mDebugHwOverdraw) {
- writeDebugHwOverdrawOptions(newValue);
- return true;
- } else if (preference == mDebugHwRenderer) {
- writeDebugHwRendererOptions(newValue);
- return true;
- } else if (preference == mShowNonRectClip) {
- writeShowNonRectClipOptions(newValue);
- return true;
- } else if (preference == mAppProcessLimit) {
- writeAppProcessLimitOptions(newValue);
- return true;
- } else if (preference == mSimulateColorSpace) {
- writeSimulateColorSpace(newValue);
- return true;
- }
- return false;
- }
-
- /**
- * Iterates through preference controllers that show confirmation dialogs and returns the
- * preference key for the first currently showing dialog. Ideally there should only ever be one.
- * @return Preference key, or null if no dialog is showing
- */
- private String getKeyForShowingDialog() {
- // TODO: iterate through a fragment-wide list of PreferenceControllers and just pick out the
- // ConfirmationDialogController objects
- final List<ConfirmationDialogController> dialogControllers = new ArrayList<>(2);
- dialogControllers.add(mEnableAdbController);
- dialogControllers.add(mLogpersistController);
- for (ConfirmationDialogController dialogController : dialogControllers) {
- if (dialogController.isConfirmationDialogShowing()) {
- return dialogController.getPreferenceKey();
- }
- }
- return null;
- }
-
- /**
- * Re-show the dialog we lost previously
- * @param preferenceKey Key for the preference the dialog is for
- */
- private void recreateDialogForKey(String preferenceKey) {
- // TODO: iterate through a fragment-wide list of PreferenceControllers and just pick out the
- // ConfirmationDialogController objects
- final List<ConfirmationDialogController> dialogControllers = new ArrayList<>(2);
- dialogControllers.add(mEnableAdbController);
- dialogControllers.add(mLogpersistController);
- for (ConfirmationDialogController dialogController : dialogControllers) {
- if (TextUtils.equals(preferenceKey, dialogController.getPreferenceKey())) {
- dialogController.showConfirmationDialog(findPreference(preferenceKey));
- }
- }
- }
-
- private void dismissDialogs() {
- mEnableAdbController.dismissConfirmationDialog();
- if (mAdbKeysDialog != null) {
- mAdbKeysDialog.dismiss();
- mAdbKeysDialog = null;
- }
- if (mEnableDialog != null) {
- mEnableDialog.dismiss();
- mEnableDialog = null;
- }
- mLogpersistController.dismissConfirmationDialog();
- }
-
- public void onClick(DialogInterface dialog, int which) {
- if (dialog == mAdbKeysDialog) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- try {
- IBinder b = ServiceManager.getService(Context.USB_SERVICE);
- IUsbManager service = IUsbManager.Stub.asInterface(b);
- service.clearUsbDebuggingKeys();
- } catch (RemoteException e) {
- Log.e(TAG, "Unable to clear adb keys", e);
- }
- }
- } else if (dialog == mEnableDialog) {
- if (which == DialogInterface.BUTTON_POSITIVE) {
- mDialogClicked = true;
- DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), true);
- setPrefsEnabledState(true);
- } else {
- // Reset the toggle
- mSwitchBar.setChecked(false);
- }
- }
- }
-
- public void onDismiss(DialogInterface dialog) {
- // Assuming that onClick gets called first
- if (dialog == mEnableDialog) {
- if (!mDialogClicked) {
- mSwitchBar.setChecked(false);
- }
- mEnableDialog = null;
- }
- }
-
- @Override
- public void onDestroy() {
- dismissDialogs();
- super.onDestroy();
- }
-
- private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- updateUsbConfigurationValues();
- }
- };
-
- private BroadcastReceiver mBluetoothA2dpReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- Log.d(TAG, "mBluetoothA2dpReceiver.onReceive intent=" + intent);
- String action = intent.getAction();
-
- if (BluetoothA2dp.ACTION_CODEC_CONFIG_CHANGED.equals(action)) {
- BluetoothCodecStatus codecStatus =
- (BluetoothCodecStatus)intent.getParcelableExtra(BluetoothCodecStatus.EXTRA_CODEC_STATUS);
- Log.d(TAG, "Received BluetoothCodecStatus=" + codecStatus);
- updateBluetoothA2dpConfigurationValues();
- }
- }
- };
-
- private BluetoothProfile.ServiceListener mBluetoothA2dpServiceListener =
- new BluetoothProfile.ServiceListener() {
- public void onServiceConnected(int profile,
- BluetoothProfile proxy) {
- synchronized (mBluetoothA2dpLock) {
- mBluetoothA2dp = (BluetoothA2dp) proxy;
- }
- updateBluetoothA2dpConfigurationValues();
- }
-
- public void onServiceDisconnected(int profile) {
- synchronized (mBluetoothA2dpLock) {
- mBluetoothA2dp = null;
- }
- updateBluetoothA2dpConfigurationValues();
- }
- };
-
- private static boolean isPackageInstalled(Context context, String packageName) {
- try {
- return context.getPackageManager().getPackageInfo(packageName, 0) != null;
- } catch (NameNotFoundException e) {
- return false;
- }
- }
-
-
- /**
- * For Search.
- */
- public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
-
- @Override
- protected boolean isPageSearchEnabled(Context context) {
- return DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(context);
- }
-
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(
- Context context, boolean enabled) {
-
- final SearchIndexableResource sir = new SearchIndexableResource(context);
- sir.xmlResId = R.xml.development_settings;
- return Arrays.asList(sir);
- }
-
- @Override
- public List<String> getNonIndexableKeys(Context context) {
- final List<String> keys = super.getNonIndexableKeys(context);
-
- if (!showEnableOemUnlockPreference(context)) {
- keys.add(ENABLE_OEM_UNLOCK);
- }
- return keys;
- }
- };
-
- private void resetShortcutManagerThrottling() {
- final IShortcutService service = IShortcutService.Stub.asInterface(
- ServiceManager.getService(Context.SHORTCUT_SERVICE));
- if (service != null) {
- try {
- service.resetThrottling();
- Toast.makeText(getActivity(), R.string.reset_shortcut_manager_throttling_complete,
- Toast.LENGTH_SHORT).show();
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to reset rate limiting", e);
- }
- }
- }
-
- private void updateOemUnlockSettingDescription() {
- if (mEnableOemUnlock != null) {
- int oemUnlockSummary = R.string.oem_unlock_enable_summary;
- if (isBootloaderUnlocked()) {
- oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_bootloader_unlocked;
- } else if (isSimLockedDevice()) {
- oemUnlockSummary = R.string.oem_unlock_enable_disabled_summary_sim_locked_device;
- } else if (!isOemUnlockAllowedByUserAndCarrier()) {
- // If the device isn't SIM-locked but OEM unlock is disallowed by some party, this
- // means either some other carrier restriction is in place or the device hasn't been
- // able to confirm which restrictions (SIM-lock or otherwise) apply.
- oemUnlockSummary =
- R.string.oem_unlock_enable_disabled_summary_connectivity_or_locked;
- }
- mEnableOemUnlock.setSummary(getString(oemUnlockSummary));
- }
- }
-
- /** Returns {@code true} if the device is SIM-locked. Otherwise, returns {@code false}. */
- private boolean isSimLockedDevice() {
- int phoneCount = mTelephonyManager.getPhoneCount();
- for (int i = 0; i < phoneCount; i++) {
- if (mTelephonyManager.getAllowedCarriers(i).size() > 0) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Returns {@code true} if the bootloader has been unlocked. Otherwise, returns {code false}.
- */
- private boolean isBootloaderUnlocked() {
- return mOemLockManager.isDeviceOemUnlocked();
- }
-
-
-}
diff --git a/src/com/android/settings/development/DevelopmentSwitchBarController.java b/src/com/android/settings/development/DevelopmentSwitchBarController.java
index ae875b3..79a8310 100644
--- a/src/com/android/settings/development/DevelopmentSwitchBarController.java
+++ b/src/com/android/settings/development/DevelopmentSwitchBarController.java
@@ -16,6 +16,8 @@
package com.android.settings.development;
+import android.support.annotation.NonNull;
+
import com.android.settings.Utils;
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -28,33 +30,13 @@
private final SwitchBar mSwitchBar;
private final boolean mIsAvailable;
- private final DevelopmentSettings mSettings;
- private final DevelopmentSettingsDashboardFragment mNewSettings;
+ private final DevelopmentSettingsDashboardFragment mSettings;
- /**
- * @deprecated in favor of the other constructor.
- */
- @Deprecated
- public DevelopmentSwitchBarController(DevelopmentSettings settings, SwitchBar switchBar,
- boolean isAvailable, Lifecycle lifecycle) {
- mSwitchBar = switchBar;
- mIsAvailable = isAvailable && !Utils.isMonkeyRunning();
- mSettings = settings;
- mNewSettings = null;
-
- if (mIsAvailable) {
- lifecycle.addObserver(this);
- } else {
- mSwitchBar.setEnabled(false);
- }
- }
-
- public DevelopmentSwitchBarController(DevelopmentSettingsDashboardFragment settings,
+ public DevelopmentSwitchBarController(@NonNull DevelopmentSettingsDashboardFragment settings,
SwitchBar switchBar, boolean isAvailable, Lifecycle lifecycle) {
mSwitchBar = switchBar;
mIsAvailable = isAvailable && !Utils.isMonkeyRunning();
- mSettings = null;
- mNewSettings = settings;
+ mSettings = settings;
if (mIsAvailable) {
lifecycle.addObserver(this);
@@ -65,24 +47,14 @@
@Override
public void onStart() {
- if (mSettings != null) {
- mSwitchBar.addOnSwitchChangeListener(mSettings);
- }
- if (mNewSettings != null) {
- final boolean developmentEnabledState = DevelopmentSettingsEnabler
- .isDevelopmentSettingsEnabled(mNewSettings.getContext());
- mSwitchBar.setChecked(developmentEnabledState);
- mSwitchBar.addOnSwitchChangeListener(mNewSettings);
- }
+ final boolean developmentEnabledState = DevelopmentSettingsEnabler
+ .isDevelopmentSettingsEnabled(mSettings.getContext());
+ mSwitchBar.setChecked(developmentEnabledState);
+ mSwitchBar.addOnSwitchChangeListener(mSettings);
}
@Override
public void onStop() {
- if (mSettings != null) {
- mSwitchBar.removeOnSwitchChangeListener(mSettings);
- }
- if (mNewSettings != null) {
- mSwitchBar.removeOnSwitchChangeListener(mNewSettings);
- }
+ mSwitchBar.removeOnSwitchChangeListener(mSettings);
}
}
diff --git a/src/com/android/settings/development/EnableAdbPreferenceController.java b/src/com/android/settings/development/EnableAdbPreferenceController.java
deleted file mode 100644
index a866353..0000000
--- a/src/com/android/settings/development/EnableAdbPreferenceController.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2017 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.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.TwoStatePreference;
-
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.AbstractEnableAdbPreferenceController;
-
-/**
- * @deprecated in favor of {@link AdbPreferenceController}
- */
-@Deprecated
-public class EnableAdbPreferenceController extends AbstractEnableAdbPreferenceController
- implements PreferenceControllerMixin {
-
- private Dialog mAdbDialog;
- private boolean mDialogClicked;
-
- public EnableAdbPreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public void showConfirmationDialog(@Nullable Preference preference) {
- if (preference == null) {
- return;
- }
- final TwoStatePreference twoStatePreference = (TwoStatePreference) preference;
- mDialogClicked = false;
- dismissConfirmationDialog();
- mAdbDialog = new AlertDialog.Builder(mContext).setMessage(
- mContext.getString(R.string.adb_warning_message))
- .setTitle(R.string.adb_warning_title)
- .setPositiveButton(android.R.string.yes, (dialog, which) -> {
- mDialogClicked = true;
- writeAdbSetting(true);
- twoStatePreference.setChecked(true);
- })
- .setNegativeButton(android.R.string.no,
- (dialog, which) -> twoStatePreference.setChecked(false))
- .show();
- mAdbDialog.setOnDismissListener(dialog -> {
- // Assuming that onClick gets called first
- if (!mDialogClicked) {
- twoStatePreference.setChecked(false);
- }
- mAdbDialog = null;
- });
- }
-
- @Override
- public void dismissConfirmationDialog() {
- if (mAdbDialog != null) {
- mAdbDialog.dismiss();
- mAdbDialog = null;
- }
- }
-
- @Override
- public boolean isConfirmationDialogShowing() {
- return mAdbDialog != null;
- }
-}
diff --git a/src/com/android/settings/development/LogdSizePreferenceController.java b/src/com/android/settings/development/LogdSizePreferenceController.java
deleted file mode 100644
index 8ee3405..0000000
--- a/src/com/android/settings/development/LogdSizePreferenceController.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2017 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 com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.AbstractLogdSizePreferenceController;
-
-/**
- * deprecated in favor of {@link LogdSizePreferenceControllerV2}
- */
-@Deprecated
-public class LogdSizePreferenceController extends AbstractLogdSizePreferenceController
- implements PreferenceControllerMixin {
-
- public LogdSizePreferenceController(Context context) {
- super(context);
- }
-}
diff --git a/src/com/android/settings/development/LogpersistPreferenceController.java b/src/com/android/settings/development/LogpersistPreferenceController.java
deleted file mode 100644
index 26ab878..0000000
--- a/src/com/android/settings/development/LogpersistPreferenceController.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2017 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.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.support.annotation.Nullable;
-import android.support.v7.preference.Preference;
-
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-import com.android.settingslib.development.AbstractLogpersistPreferenceController;
-
-/**
- * depreacted in favor of {@link LogdSizePreferenceControllerV2}
- */
-@Deprecated
-public class LogpersistPreferenceController extends AbstractLogpersistPreferenceController
- implements PreferenceControllerMixin {
-
- private Dialog mLogpersistClearDialog;
-
- LogpersistPreferenceController(Context context, Lifecycle lifecycle) {
- super(context, lifecycle);
- }
-
- @Override
- public void showConfirmationDialog(@Nullable Preference preference) {
- if (preference == null) {
- return;
- }
- if (mLogpersistClearDialog != null) dismissConfirmationDialog();
- mLogpersistClearDialog = new AlertDialog.Builder(mContext)
- .setMessage(R.string.dev_logpersist_clear_warning_message)
- .setTitle(R.string.dev_logpersist_clear_warning_title)
- .setPositiveButton(android.R.string.yes, (dialog, which) -> setLogpersistOff(true))
- .setNegativeButton(android.R.string.no, (dialog, which) -> updateLogpersistValues())
- .show();
- mLogpersistClearDialog.setOnDismissListener(dialog -> mLogpersistClearDialog = null);
- }
-
- @Override
- public void dismissConfirmationDialog() {
- if (mLogpersistClearDialog != null) {
- mLogpersistClearDialog.dismiss();
- mLogpersistClearDialog = null;
- }
- }
-
- @Override
- public boolean isConfirmationDialogShowing() {
- return mLogpersistClearDialog != null;
- }
-}
diff --git a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
index 59ac23f..77a9a75 100644
--- a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
+++ b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
@@ -29,6 +30,7 @@
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
@@ -89,6 +91,10 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (Utils.isMonkeyRunning()) {
+ return false;
+ }
+
writeUsbConfigurationOption(newValue.toString());
updateUsbConfigurationValues();
return true;
@@ -105,6 +111,14 @@
}
@Override
+ public boolean isAvailable() {
+ final PackageManager packageManager = mContext.getPackageManager();
+
+ return packageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)
+ || packageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY);
+ }
+
+ @Override
protected void onDeveloperOptionsSwitchEnabled() {
mPreference.setEnabled(true);
}
@@ -138,5 +152,4 @@
setCurrentFunction(newValue, true);
}
}
-
}
diff --git a/src/com/android/settings/development/VerifyAppsOverUsbPreferenceController.java b/src/com/android/settings/development/VerifyAppsOverUsbPreferenceController.java
deleted file mode 100644
index 4fd7fbc..0000000
--- a/src/com/android/settings/development/VerifyAppsOverUsbPreferenceController.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2017 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.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.support.annotation.VisibleForTesting;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.RestrictedLockUtils;
-import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-import com.android.settingslib.RestrictedSwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-import java.util.List;
-
-/**
- * Controller to manage the state of "Verify apps over USB" toggle.
- *
- * deprecated in favor of {@link VerifyAppsOverUsbPreferenceControllerV2}
- */
-@Deprecated
-public class VerifyAppsOverUsbPreferenceController extends AbstractPreferenceController implements
- PreferenceControllerMixin {
- private static final String VERIFY_APPS_OVER_USB_KEY = "verify_apps_over_usb";
- private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
-
- private RestrictedSwitchPreference mPreference;
-
- /**
- * Class for indirection of RestrictedLockUtils for testing purposes. It would be nice to mock
- * the appropriate methods in UserManager instead but they aren't accessible.
- */
- @VisibleForTesting
- class RestrictedLockUtilsDelegate {
- public EnforcedAdmin checkIfRestrictionEnforced(
- Context context, String userRestriction, int userId) {
- return RestrictedLockUtils.checkIfRestrictionEnforced(context, userRestriction, userId);
- }
- }
- // NB: This field is accessed using reflection in the test, please keep name in sync.
- private final RestrictedLockUtilsDelegate mRestrictedLockUtils =
- new RestrictedLockUtilsDelegate();
-
- VerifyAppsOverUsbPreferenceController(Context context) {
- super(context);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- if (isAvailable()) {
- mPreference = (RestrictedSwitchPreference)
- screen.findPreference(VERIFY_APPS_OVER_USB_KEY);
- }
- }
-
- @Override
- public boolean isAvailable() {
- return Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0;
- }
-
- @Override
- public String getPreferenceKey() {
- return VERIFY_APPS_OVER_USB_KEY;
- }
-
- /** Saves the settings value when it is toggled. */
- @Override
- public boolean handlePreferenceTreeClick(Preference preference) {
- if (VERIFY_APPS_OVER_USB_KEY.equals(preference.getKey())) {
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, mPreference.isChecked() ? 1 : 0);
- return true;
- }
- return false;
- }
-
- /**
- * Checks whether the toggle should be enabled depending on whether verify apps over USB is
- * possible currently. If ADB is disabled or if package verifier does not exist, the toggle
- * should be disabled.
- */
- private boolean shouldBeEnabled() {
- final ContentResolver cr = mContext.getContentResolver();
- if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
- return false;
- }
- if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 0) {
- return false;
- } else {
- final PackageManager pm = mContext.getPackageManager();
- final Intent verification = new Intent(Intent.ACTION_PACKAGE_NEEDS_VERIFICATION);
- verification.setType(PACKAGE_MIME_TYPE);
- verification.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- final List<ResolveInfo> receivers = pm.queryBroadcastReceivers(verification, 0);
- if (receivers.size() == 0) {
- return false;
- }
- }
- return true;
- }
-
- /**
- * Updates position, enabled status and maybe admin message.
- */
- public void updatePreference() {
- if (!isAvailable()) {
- return;
- }
-
- if (!shouldBeEnabled()) {
- mPreference.setChecked(false);
- mPreference.setDisabledByAdmin(null);
- mPreference.setEnabled(false);
- return;
- }
-
- final EnforcedAdmin enforcingAdmin = mRestrictedLockUtils.checkIfRestrictionEnforced(
- mContext, UserManager.ENSURE_VERIFY_APPS, UserHandle.myUserId());
- if (enforcingAdmin != null) {
- mPreference.setChecked(true);
- mPreference.setDisabledByAdmin(enforcingAdmin);
- return;
- }
-
- mPreference.setEnabled(true);
- final boolean checked = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) != 0;
- mPreference.setChecked(checked);
- }
-}
diff --git a/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java b/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java
index c37ff43..b5c12f7 100644
--- a/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java
@@ -26,12 +26,18 @@
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
+/**
+ * Deprecated in About Phone V2
+ * Information in this preference is available in {@link PowerUsageSummary}
+ */
+@Deprecated
public class BatteryInfoPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop {
diff --git a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
index 7934ad7..89df7cc 100644
--- a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
@@ -51,7 +51,7 @@
super.displayPreference(screen);
final Preference pref = screen.findPreference(KEY_DEVICE_MODEL);
if (pref != null) {
- if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DEVICE_INFO_V2)) {
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.DEVICE_INFO_V2) || true) {
pref.setSummary(mContext.getResources().getString(R.string.model_summary,
getDeviceModel()));
} else {
diff --git a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
index 26f1ac2..d1c6447 100644
--- a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
@@ -59,7 +59,7 @@
DeviceModelPreferenceController.getDeviceModel());
// Serial number
- if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.DEVICE_INFO_V2)) {
+ if (FeatureFlagUtils.isEnabled(getContext(), FeatureFlags.DEVICE_INFO_V2) || true) {
setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber());
} else {
content.findViewById(R.id.serial_number_label).setVisibility(View.GONE);
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index ffdaca9..15ad5cf 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -20,6 +20,7 @@
import android.provider.SearchIndexableResource;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.DeviceInfoSettings;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -32,7 +33,10 @@
/**
* Fragment for showing device hardware info, such as MAC addresses and serial numbers
+ * Deprecated in About Phone V2
+ * Information on this page is available in {@link DeviceInfoSettings}
*/
+@Deprecated
public class Status extends DashboardFragment {
private static final String TAG = "DeviceStatus";
diff --git a/src/com/android/settings/deviceinfo/UptimePreferenceController.java b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
index 8bb0df7..c25f984 100644
--- a/src/com/android/settings/deviceinfo/UptimePreferenceController.java
+++ b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
@@ -19,12 +19,17 @@
import android.content.Context;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.fuelgauge.PowerUsageSummary;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.deviceinfo.AbstractUptimePreferenceController;
/**
* Concrete subclass of uptime preference controller
+ *
+ * Deprecated in About Phone V2
+ * Information in this preference is available in {@link PowerUsageSummary}
*/
+@Deprecated
public class UptimePreferenceController extends AbstractUptimePreferenceController
implements PreferenceControllerMixin {
public UptimePreferenceController(Context context, Lifecycle lifecycle) {
diff --git a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java
index 92e5169..8c4fa579 100644
--- a/src/com/android/settings/location/RecentLocationRequestPreferenceController.java
+++ b/src/com/android/settings/location/RecentLocationRequestPreferenceController.java
@@ -20,10 +20,13 @@
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
+import android.util.FeatureFlagUtils;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.applications.InstalledAppDetails;
+import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.widget.AppPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.location.RecentLocationApps;
@@ -56,11 +59,19 @@
public boolean onPreferenceClick(Preference preference) {
// start new fragment to display extended information
final Bundle args = new Bundle();
- args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackage);
- ((SettingsActivity) mFragment.getActivity()).startPreferencePanelAsUser(
- mFragment,
- InstalledAppDetails.class.getName(), args,
- R.string.application_info_label, null, mUserHandle);
+ if (FeatureFlagUtils.isEnabled(mFragment.getActivity(), FeatureFlags.APP_INFO_V2)) {
+ args.putString(AppInfoDashboardFragment.ARG_PACKAGE_NAME, mPackage);
+ ((SettingsActivity) mFragment.getActivity()).startPreferencePanelAsUser(
+ mFragment,
+ AppInfoDashboardFragment.class.getName(), args,
+ R.string.application_info_label, null, mUserHandle);
+ } else {
+ args.putString(InstalledAppDetails.ARG_PACKAGE_NAME, mPackage);
+ ((SettingsActivity) mFragment.getActivity()).startPreferencePanelAsUser(
+ mFragment,
+ InstalledAppDetails.class.getName(), args,
+ R.string.application_info_label, null, mUserHandle);
+ }
return true;
}
}
diff --git a/src/com/android/settings/notification/NotificationPreferenceController.java b/src/com/android/settings/notification/NotificationPreferenceController.java
index b1ef69e..797f30d 100644
--- a/src/com/android/settings/notification/NotificationPreferenceController.java
+++ b/src/com/android/settings/notification/NotificationPreferenceController.java
@@ -172,7 +172,7 @@
}
protected boolean isChannelGroupBlockable() {
- if (mChannelGroup != null && mChannelGroup.getGroup() == null && mAppRow != null) {
+ if (mChannelGroup != null && mChannelGroup.getGroup() != null && mAppRow != null) {
if (!mAppRow.systemApp) {
return true;
}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index c0cfc46..7512c13 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -34,6 +34,7 @@
import com.android.settings.backup.BackupSettingsFragment;
import com.android.settings.bluetooth.BluetoothSettings;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
+import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragmentOld;
import com.android.settings.datausage.DataUsageMeteredSettings;
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.deletionhelper.AutomaticStorageManagerSettings;
@@ -149,12 +150,12 @@
addIndex(PrintSettingsFragment.class);
addIndex(DevelopmentSettingsDashboardFragment.class);
addIndex(DeviceInfoSettings.class);
- addIndex(Status.class);
addIndex(LegalSettings.class);
addIndex(SystemDashboardFragment.class);
addIndex(ResetDashboardFragment.class);
addIndex(StorageDashboardFragment.class);
addIndex(ConnectedDeviceDashboardFragment.class);
+ addIndex(ConnectedDeviceDashboardFragmentOld.class);
addIndex(EnterprisePrivacySettings.class);
addIndex(PaymentSettings.class);
addIndex(TextToSpeechSettings.class);
diff --git a/src/com/android/settings/widget/EntityHeaderController.java b/src/com/android/settings/widget/EntityHeaderController.java
index c38ad02..5fa7586 100644
--- a/src/com/android/settings/widget/EntityHeaderController.java
+++ b/src/com/android/settings/widget/EntityHeaderController.java
@@ -32,6 +32,7 @@
import android.support.annotation.VisibleForTesting;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
@@ -44,6 +45,8 @@
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.applications.LayoutPreference;
+import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -272,11 +275,17 @@
entityHeaderContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- AppInfoBase.startAppInfoFragment(
- InstalledAppDetails.class, R.string.application_info_label,
- mPackageName, mUid, mFragment, 0 /* request */,
- mMetricsCategory);
-
+ if (FeatureFlagUtils.isEnabled(mAppContext, FeatureFlags.APP_INFO_V2)) {
+ AppInfoBase.startAppInfoFragment(
+ AppInfoDashboardFragment.class, R.string.application_info_label,
+ mPackageName, mUid, mFragment, 0 /* request */,
+ mMetricsCategory);
+ } else {
+ AppInfoBase.startAppInfoFragment(
+ InstalledAppDetails.class, R.string.application_info_label,
+ mPackageName, mUid, mFragment, 0 /* request */,
+ mMetricsCategory);
+ }
}
});
return;
diff --git a/src/com/android/settings/wifi/WifiDialog.java b/src/com/android/settings/wifi/WifiDialog.java
index cb3f8df..79500e0 100644
--- a/src/com/android/settings/wifi/WifiDialog.java
+++ b/src/com/android/settings/wifi/WifiDialog.java
@@ -119,8 +119,7 @@
mListener.onSubmit(this);
break;
case BUTTON_FORGET:
- if (WifiSettings.isEditabilityLockedDown(
- getContext(), mAccessPoint.getConfig())) {
+ if (WifiUtils.isNetworkLockedDown(getContext(), mAccessPoint.getConfig())) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
RestrictedLockUtils.getDeviceOwner(getContext()));
return;
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 4c87bac..cc48064 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -21,13 +21,9 @@
import android.annotation.NonNull;
import android.app.Activity;
import android.app.Dialog;
-import android.app.admin.DevicePolicyManager;
-import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
@@ -491,7 +487,7 @@
WifiConfiguration config = mSelectedAccessPoint.getConfig();
// Some configs are ineditable
- if (isEditabilityLockedDown(getActivity(), config)) {
+ if (WifiUtils.isNetworkLockedDown(getActivity(), config)) {
return;
}
@@ -594,7 +590,7 @@
private void showDialog(AccessPoint accessPoint, int dialogMode) {
if (accessPoint != null) {
WifiConfiguration config = accessPoint.getConfig();
- if (isEditabilityLockedDown(getActivity(), config) && accessPoint.isActive()) {
+ if (WifiUtils.isNetworkLockedDown(getActivity(), config) && accessPoint.isActive()) {
RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getActivity(),
RestrictedLockUtils.getDeviceOwner(getActivity()));
return;
@@ -1120,62 +1116,6 @@
}
};
- /**
- * Returns true if the config is not editable through Settings.
- * @param context Context of caller
- * @param config The WiFi config.
- * @return true if the config is not editable through Settings.
- */
- public static boolean isEditabilityLockedDown(Context context, WifiConfiguration config) {
- return !canModifyNetwork(context, config);
- }
-
- /**
- * This method is a stripped version of WifiConfigStore.canModifyNetwork.
- * TODO: refactor to have only one method.
- * @param context Context of caller
- * @param config The WiFi config.
- * @return true if Settings can modify the config.
- */
- static boolean canModifyNetwork(Context context, WifiConfiguration config) {
- if (config == null) {
- return true;
- }
-
- final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
- Context.DEVICE_POLICY_SERVICE);
-
- // Check if device has DPM capability. If it has and dpm is still null, then we
- // treat this case with suspicion and bail out.
- final PackageManager pm = context.getPackageManager();
- if (pm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN) && dpm == null) {
- return false;
- }
-
- boolean isConfigEligibleForLockdown = false;
- if (dpm != null) {
- final ComponentName deviceOwner = dpm.getDeviceOwnerComponentOnAnyUser();
- if (deviceOwner != null) {
- final int deviceOwnerUserId = dpm.getDeviceOwnerUserId();
- try {
- final int deviceOwnerUid = pm.getPackageUidAsUser(deviceOwner.getPackageName(),
- deviceOwnerUserId);
- isConfigEligibleForLockdown = deviceOwnerUid == config.creatorUid;
- } catch (NameNotFoundException e) {
- // don't care
- }
- }
- }
- if (!isConfigEligibleForLockdown) {
- return true;
- }
-
- final ContentResolver resolver = context.getContentResolver();
- final boolean isLockdownFeatureEnabled = Settings.Global.getInt(resolver,
- Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0) != 0;
- return !isLockdownFeatureEnabled;
- }
-
private static class SummaryProvider
implements SummaryLoader.SummaryProvider, OnSummaryChangeListener {
diff --git a/src/com/android/settings/wifi/WifiUtils.java b/src/com/android/settings/wifi/WifiUtils.java
index 7bd69db..34c86d1 100644
--- a/src/com/android/settings/wifi/WifiUtils.java
+++ b/src/com/android/settings/wifi/WifiUtils.java
@@ -16,8 +16,18 @@
package com.android.settings.wifi;
+import android.app.admin.DevicePolicyManager;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.net.wifi.WifiConfiguration;
+import android.provider.Settings;
import android.text.TextUtils;
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
public class WifiUtils {
private static final int SSID_ASCII_MIN_LENGTH = 1;
@@ -47,4 +57,48 @@
final int length = password.length();
return length >= PASSWORD_MIN_LENGTH && length <= PASSWORD_MAX_LENGTH;
}
+
+ /**
+ * This method is a stripped and negated version of WifiConfigStore.canModifyNetwork.
+ * @param context Context of caller
+ * @param config The WiFi config.
+ * @return true if Settings cannot modify the config due to lockDown.
+ */
+ public static boolean isNetworkLockedDown(Context context, WifiConfiguration config) {
+ if (config == null) {
+ return false;
+ }
+
+ final DevicePolicyManagerWrapper dpm = DevicePolicyManagerWrapper.from(context);
+ final PackageManagerWrapper pm = new PackageManagerWrapper(context.getPackageManager());
+
+ // Check if device has DPM capability. If it has and dpm is still null, then we
+ // treat this case with suspicion and bail out.
+ if (pm.hasSystemFeature(PackageManager.FEATURE_DEVICE_ADMIN) && dpm == null) {
+ return true;
+ }
+
+ boolean isConfigEligibleForLockdown = false;
+ if (dpm != null) {
+ final ComponentName deviceOwner = dpm.getDeviceOwnerComponentOnAnyUser();
+ if (deviceOwner != null) {
+ final int deviceOwnerUserId = dpm.getDeviceOwnerUserId();
+ try {
+ final int deviceOwnerUid = pm.getPackageUidAsUser(deviceOwner.getPackageName(),
+ deviceOwnerUserId);
+ isConfigEligibleForLockdown = deviceOwnerUid == config.creatorUid;
+ } catch (PackageManager.NameNotFoundException e) {
+ // don't care
+ }
+ }
+ }
+ if (!isConfigEligibleForLockdown) {
+ return false;
+ }
+
+ final ContentResolver resolver = context.getContentResolver();
+ final boolean isLockdownFeatureEnabled = Settings.Global.getInt(resolver,
+ Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 0) != 0;
+ return isLockdownFeatureEnabled;
+ }
}
diff --git a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
index 40acfeb..70ee20d 100644
--- a/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
+++ b/src/com/android/settings/wifi/details/WifiDetailPreferenceController.java
@@ -19,8 +19,6 @@
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
import static android.net.NetworkCapabilities.TRANSPORT_WIFI;
-import static com.android.settings.wifi.WifiSettings.isEditabilityLockedDown;
-
import android.app.Activity;
import android.app.Fragment;
import android.content.BroadcastReceiver;
@@ -62,6 +60,7 @@
import com.android.settings.wifi.WifiDetailPreference;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wifi.WifiDialog.WifiDialogListener;
+import com.android.settings.wifi.WifiUtils;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -280,8 +279,8 @@
mButtonsPref = ((ActionButtonPreference) screen.findPreference(KEY_BUTTONS_PREF))
.setButton1Text(R.string.forget)
.setButton1Positive(false)
- .setButton2Text(R.string.support_sign_in_button_text)
.setButton1OnClickListener(view -> forgetNetwork())
+ .setButton2Text(R.string.support_sign_in_button_text)
.setButton2Positive(true)
.setButton2OnClickListener(view -> signIntoNetwork());
@@ -498,9 +497,14 @@
* Returns whether the network represented by this preference can be forgotten.
*/
private boolean canForgetNetwork() {
- // TODO(65396674): create test for the locked down scenario
- return (mWifiInfo != null && mWifiInfo.isEphemeral())
- || (mWifiConfig != null && !isEditabilityLockedDown(mContext, mWifiConfig));
+ return (mWifiInfo != null && mWifiInfo.isEphemeral()) || canModifyNetwork();
+ }
+
+ /**
+ * Returns whether the network represented by this preference can be modified.
+ */
+ public boolean canModifyNetwork() {
+ return mWifiConfig != null && !WifiUtils.isNetworkLockedDown(mContext, mWifiConfig);
}
/**
diff --git a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
index 1609bef..ea30b56 100644
--- a/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
+++ b/src/com/android/settings/wifi/details/WifiNetworkDetailsFragment.java
@@ -27,6 +27,7 @@
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+
import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
@@ -34,8 +35,10 @@
import com.android.settings.wifi.WifiConfigUiBase;
import com.android.settings.wifi.WifiDialog;
import com.android.settings.wrapper.ConnectivityManagerWrapper;
+import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.wifi.AccessPoint;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -105,7 +108,12 @@
public boolean onOptionsItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case Menu.FIRST:
- showDialog(WIFI_DIALOG_ID);
+ if (!mWifiDetailPreferenceController.canModifyNetwork()) {
+ RestrictedLockUtils.sendShowAdminSupportDetailsIntent(getContext(),
+ RestrictedLockUtils.getDeviceOwner(getContext()));
+ } else {
+ showDialog(WIFI_DIALOG_ID);
+ }
return true;
default:
return super.onOptionsItemSelected(menuItem);
diff --git a/src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java b/src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java
index ed2eb46..8417219 100644
--- a/src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java
+++ b/src/com/android/settings/wrapper/DevicePolicyManagerWrapper.java
@@ -17,11 +17,12 @@
package com.android.settings.wrapper;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
+import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
-import android.support.annotation.Nullable;
import java.util.List;
@@ -38,10 +39,16 @@
mDpm = dpm;
}
+ public static @Nullable DevicePolicyManagerWrapper from(Context context) {
+ DevicePolicyManager dpm =
+ (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
+ return dpm == null ? null : new DevicePolicyManagerWrapper(dpm);
+ }
+
/**
* Calls {@code DevicePolicyManager.getActiveAdminsAsUser()}.
*
- * @see android.app.admin.DevicePolicyManager#getActiveAdminsAsUser
+ * @see DevicePolicyManager#getActiveAdminsAsUser
*/
public @Nullable List<ComponentName> getActiveAdminsAsUser(int userId) {
return mDpm.getActiveAdminsAsUser(userId);
@@ -50,7 +57,7 @@
/**
* Calls {@code DevicePolicyManager.getMaximumFailedPasswordsForWipe()}.
*
- * @see android.app.admin.DevicePolicyManager#getMaximumFailedPasswordsForWipe
+ * @see DevicePolicyManager#getMaximumFailedPasswordsForWipe
*/
public int getMaximumFailedPasswordsForWipe(@Nullable ComponentName admin, int userHandle) {
return mDpm.getMaximumFailedPasswordsForWipe(admin, userHandle);
@@ -59,7 +66,7 @@
/**
* Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnCallingUser()}.
*
- * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnCallingUser
+ * @see DevicePolicyManager#getDeviceOwnerComponentOnCallingUser
*/
public ComponentName getDeviceOwnerComponentOnCallingUser() {
return mDpm.getDeviceOwnerComponentOnCallingUser();
@@ -68,7 +75,7 @@
/**
* Calls {@code DevicePolicyManager.getDeviceOwnerComponentOnAnyUser()}.
*
- * @see android.app.admin.DevicePolicyManager#getDeviceOwnerComponentOnAnyUser
+ * @see DevicePolicyManager#getDeviceOwnerComponentOnAnyUser
*/
public ComponentName getDeviceOwnerComponentOnAnyUser() {
return mDpm.getDeviceOwnerComponentOnAnyUser();
@@ -77,7 +84,7 @@
/**
* Calls {@code DevicePolicyManager.getProfileOwnerAsUser()}.
*
- * @see android.app.admin.DevicePolicyManager#getProfileOwnerAsUser
+ * @see DevicePolicyManager#getProfileOwnerAsUser
*/
public @Nullable ComponentName getProfileOwnerAsUser(final int userId) {
return mDpm.getProfileOwnerAsUser(userId);
@@ -86,7 +93,7 @@
/**
* Calls {@code DevicePolicyManager.getDeviceOwnerNameOnAnyUser()}.
*
- * @see android.app.admin.DevicePolicyManager#getDeviceOwnerNameOnAnyUser
+ * @see DevicePolicyManager#getDeviceOwnerNameOnAnyUser
*/
public CharSequence getDeviceOwnerOrganizationName() {
return mDpm.getDeviceOwnerOrganizationName();
@@ -95,7 +102,7 @@
/**
* Calls {@code DevicePolicyManager.getPermissionGrantState()}.
*
- * @see android.app.admin.DevicePolicyManager#getPermissionGrantState
+ * @see DevicePolicyManager#getPermissionGrantState
*/
public int getPermissionGrantState(@Nullable ComponentName admin, String packageName,
String permission) {
@@ -105,7 +112,7 @@
/**
* Calls {@code DevicePolicyManager.isSecurityLoggingEnabled()}.
*
- * @see android.app.admin.DevicePolicyManager#isSecurityLoggingEnabled
+ * @see DevicePolicyManager#isSecurityLoggingEnabled
*/
public boolean isSecurityLoggingEnabled(@Nullable ComponentName admin) {
return mDpm.isSecurityLoggingEnabled(admin);
@@ -114,7 +121,7 @@
/**
* Calls {@code DevicePolicyManager.isNetworkLoggingEnabled()}.
*
- * @see android.app.admin.DevicePolicyManager#isNetworkLoggingEnabled
+ * @see DevicePolicyManager#isNetworkLoggingEnabled
*/
public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) {
return mDpm.isNetworkLoggingEnabled(admin);
@@ -123,7 +130,7 @@
/**
* Calls {@code DevicePolicyManager.getLastSecurityLogRetrievalTime()}.
*
- * @see android.app.admin.DevicePolicyManager#getLastSecurityLogRetrievalTime
+ * @see DevicePolicyManager#getLastSecurityLogRetrievalTime
*/
public long getLastSecurityLogRetrievalTime() {
return mDpm.getLastSecurityLogRetrievalTime();
@@ -132,7 +139,7 @@
/**
* Calls {@code DevicePolicyManager.getLastBugReportRequestTime()}.
*
- * @see android.app.admin.DevicePolicyManager#getLastBugReportRequestTime
+ * @see DevicePolicyManager#getLastBugReportRequestTime
*/
public long getLastBugReportRequestTime() {
return mDpm.getLastBugReportRequestTime();
@@ -141,7 +148,7 @@
/**
* Calls {@code DevicePolicyManager.getLastNetworkLogRetrievalTime()}.
*
- * @see android.app.admin.DevicePolicyManager#getLastNetworkLogRetrievalTime
+ * @see DevicePolicyManager#getLastNetworkLogRetrievalTime
*/
public long getLastNetworkLogRetrievalTime() {
return mDpm.getLastNetworkLogRetrievalTime();
@@ -150,7 +157,7 @@
/**
* Calls {@code DevicePolicyManager.isCurrentInputMethodSetByOwner()}.
*
- * @see android.app.admin.DevicePolicyManager#isCurrentInputMethodSetByOwner
+ * @see DevicePolicyManager#isCurrentInputMethodSetByOwner
*/
public boolean isCurrentInputMethodSetByOwner() {
return mDpm.isCurrentInputMethodSetByOwner();
@@ -159,7 +166,7 @@
/**
* Calls {@code DevicePolicyManager.getOwnerInstalledCaCerts()}.
*
- * @see android.app.admin.DevicePolicyManager#getOwnerInstalledCaCerts
+ * @see DevicePolicyManager#getOwnerInstalledCaCerts
*/
public List<String> getOwnerInstalledCaCerts(@NonNull UserHandle user) {
return mDpm.getOwnerInstalledCaCerts(user);
@@ -168,7 +175,7 @@
/**
* Calls {@code DevicePolicyManager.isDeviceOwnerAppOnAnyUser()}.
*
- * @see android.app.admin.DevicePolicyManager#isDeviceOwnerAppOnAnyUser
+ * @see DevicePolicyManager#isDeviceOwnerAppOnAnyUser
*/
public boolean isDeviceOwnerAppOnAnyUser(String packageName) {
return mDpm.isDeviceOwnerAppOnAnyUser(packageName);
@@ -177,7 +184,7 @@
/**
* Calls {@code DevicePolicyManager.packageHasActiveAdmins()}.
*
- * @see android.app.admin.DevicePolicyManager#packageHasActiveAdmins
+ * @see DevicePolicyManager#packageHasActiveAdmins
*/
public boolean packageHasActiveAdmins(String packageName) {
return mDpm.packageHasActiveAdmins(packageName);
@@ -186,7 +193,7 @@
/**
* Calls {@code DevicePolicyManager.isUninstallInQueue()}.
*
- * @see android.app.admin.DevicePolicyManager#isUninstallInQueue
+ * @see DevicePolicyManager#isUninstallInQueue
*/
public boolean isUninstallInQueue(String packageName) {
return mDpm.isUninstallInQueue(packageName);
@@ -195,9 +202,18 @@
/**
* Calls {@code DevicePolicyManager.createAdminSupportIntent()}.
*
- * @see android.app.admin.DevicePolicyManager#createAdminSupportIntent
+ * @see DevicePolicyManager#createAdminSupportIntent(String)
*/
public Intent createAdminSupportIntent(@NonNull String restriction) {
return mDpm.createAdminSupportIntent(restriction);
}
+
+ /**
+ * Calls {@code DevicePolicyManager#getDeviceOwnerUserId()}.
+ *
+ * @see DevicePolicyManager#getDeviceOwnerUserId()
+ */
+ public int getDeviceOwnerUserId() {
+ return mDpm.getDeviceOwnerUserId();
+ }
}
diff --git a/tests/anomaly-tester/res/values-ar/strings.xml b/tests/anomaly-tester/res/values-ar/strings.xml
deleted file mode 100644
index cdc7ee5..0000000
--- a/tests/anomaly-tester/res/values-ar/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"AnomalyTester"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-fr-rCA/strings.xml b/tests/anomaly-tester/res/values-fr-rCA/strings.xml
deleted file mode 100644
index cdc7ee5..0000000
--- a/tests/anomaly-tester/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"AnomalyTester"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-hi/strings.xml b/tests/anomaly-tester/res/values-hi/strings.xml
deleted file mode 100644
index cdc7ee5..0000000
--- a/tests/anomaly-tester/res/values-hi/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"AnomalyTester"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-ja/strings.xml b/tests/anomaly-tester/res/values-ja/strings.xml
deleted file mode 100644
index cdc7ee5..0000000
--- a/tests/anomaly-tester/res/values-ja/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"AnomalyTester"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-ko/strings.xml b/tests/anomaly-tester/res/values-ko/strings.xml
deleted file mode 100644
index d8b6c6a..0000000
--- a/tests/anomaly-tester/res/values-ko/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"비정상 상황 테스터"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-sw/strings.xml b/tests/anomaly-tester/res/values-sw/strings.xml
deleted file mode 100644
index e8d6de8..0000000
--- a/tests/anomaly-tester/res/values-sw/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"Kipengele cha Kubaini Hitilafu"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-th/strings.xml b/tests/anomaly-tester/res/values-th/strings.xml
deleted file mode 100644
index cdc7ee5..0000000
--- a/tests/anomaly-tester/res/values-th/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"AnomalyTester"</string>
-</resources>
diff --git a/tests/anomaly-tester/res/values-zh-rTW/strings.xml b/tests/anomaly-tester/res/values-zh-rTW/strings.xml
deleted file mode 100644
index cdc7ee5..0000000
--- a/tests/anomaly-tester/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2017 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="4895205370884535654">"AnomalyTester"</string>
-</resources>
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index 46414c7..500a582 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -47,6 +47,7 @@
com.android.settings.applications.ConfirmConvertToFbe
com.android.settings.deviceinfo.PublicVolumeSettings
com.android.settings.applications.InstalledAppDetails
+com.android.settings.applications.AppInfoDashboardFragment
com.android.settings.accessibility.ToggleAccessibilityServicePreferenceFragment
com.android.settings.print.PrintServiceSettingsFragment
com.android.settings.wfd.WifiDisplaySettings
diff --git a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
index 85e99c3..9fd41f2 100644
--- a/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
+++ b/tests/robotests/assets/grandfather_not_in_search_index_provider_registry
@@ -1,3 +1,3 @@
-com.android.settings.development.DevelopmentSettings
com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard
com.android.settings.search.indexing.FakeSettingsFragment
+com.android.settings.deviceinfo.Status
diff --git a/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java b/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java
index cd891be..82b8e1b 100644
--- a/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceAdminAddTest.java
@@ -36,7 +36,7 @@
import static org.mockito.Mockito.verify;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DeviceAdminAddTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
index 9f2415b..56343e2 100644
--- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -43,6 +43,7 @@
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.DeviceInfoUtils;
@@ -61,7 +62,7 @@
@Config(
manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION_O,
- shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
+ shadows = {ShadowUtils.class, ShadowConnectivityManager.class, ShadowUserManager.class}
)
public class DeviceInfoSettingsTest {
@@ -94,7 +95,7 @@
@Test
public void getPrefXml_shouldReturnDeviceInfoXml() {
- assertThat(mSettings.getPreferenceScreenResId()).isEqualTo(R.xml.device_info_settings);
+ assertThat(mSettings.getPreferenceScreenResId()).isEqualTo(R.xml.device_info_settings_v2);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
index 0d8cb92..a956aa7 100644
--- a/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DisplaySettingsTest.java
@@ -21,7 +21,7 @@
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DisplaySettingsTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/HelpTrampolineTest.java b/tests/robotests/src/com/android/settings/HelpTrampolineTest.java
index e10b878..11f5c7b 100644
--- a/tests/robotests/src/com/android/settings/HelpTrampolineTest.java
+++ b/tests/robotests/src/com/android/settings/HelpTrampolineTest.java
@@ -34,7 +34,7 @@
import static org.robolectric.Shadows.shadowOf;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {
ShadowHelpUtils.class
})
diff --git a/tests/robotests/src/com/android/settings/LegalSettingsTest.java b/tests/robotests/src/com/android/settings/LegalSettingsTest.java
index 3d50c63..f457c08 100644
--- a/tests/robotests/src/com/android/settings/LegalSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/LegalSettingsTest.java
@@ -29,7 +29,7 @@
import static com.google.common.truth.Truth.assertThat;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class LegalSettingsTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/LicenseHtmlGeneratorFromXmlTest.java b/tests/robotests/src/com/android/settings/LicenseHtmlGeneratorFromXmlTest.java
index ea4b272..7d82b27 100644
--- a/tests/robotests/src/com/android/settings/LicenseHtmlGeneratorFromXmlTest.java
+++ b/tests/robotests/src/com/android/settings/LicenseHtmlGeneratorFromXmlTest.java
@@ -34,7 +34,7 @@
import org.xmlpull.v1.XmlPullParserException;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class LicenseHtmlGeneratorFromXmlTest {
private static final String VAILD_XML_STRING =
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
diff --git a/tests/robotests/src/com/android/settings/LicenseHtmlLoaderTest.java b/tests/robotests/src/com/android/settings/LicenseHtmlLoaderTest.java
index b16d315..2fd655f 100644
--- a/tests/robotests/src/com/android/settings/LicenseHtmlLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/LicenseHtmlLoaderTest.java
@@ -39,7 +39,7 @@
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class LicenseHtmlLoaderTest {
@Mock
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/MasterClearTest.java b/tests/robotests/src/com/android/settings/MasterClearTest.java
index 838b1e8..bfdf25e 100644
--- a/tests/robotests/src/com/android/settings/MasterClearTest.java
+++ b/tests/robotests/src/com/android/settings/MasterClearTest.java
@@ -51,7 +51,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowUtils.class}
)
public class MasterClearTest {
diff --git a/tests/robotests/src/com/android/settings/PrivacySettingsTest.java b/tests/robotests/src/com/android/settings/PrivacySettingsTest.java
index c52204d..4eaa781 100644
--- a/tests/robotests/src/com/android/settings/PrivacySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/PrivacySettingsTest.java
@@ -33,7 +33,7 @@
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class PrivacySettingsTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/SettingsActivityTest.java b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
index 509ecda..8d595bc 100644
--- a/tests/robotests/src/com/android/settings/SettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsActivityTest.java
@@ -45,7 +45,7 @@
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SettingsActivityTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/SettingsDialogFragmentTest.java b/tests/robotests/src/com/android/settings/SettingsDialogFragmentTest.java
index 942634a..a5a7280 100644
--- a/tests/robotests/src/com/android/settings/SettingsDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsDialogFragmentTest.java
@@ -33,7 +33,7 @@
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SettingsDialogFragmentTest {
private static final int DIALOG_ID = 15;
diff --git a/tests/robotests/src/com/android/settings/SettingsDumpServiceTest.java b/tests/robotests/src/com/android/settings/SettingsDumpServiceTest.java
index 0d0f22c..38e78e4 100644
--- a/tests/robotests/src/com/android/settings/SettingsDumpServiceTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsDumpServiceTest.java
@@ -37,7 +37,7 @@
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SettingsDumpServiceTest {
private static final String PACKAGE_BROWSER = "com.android.test.browser";
private static final String PACKAGE_NULL = "android";
diff --git a/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java b/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java
index ecda97e..6d28bd5 100644
--- a/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java
+++ b/tests/robotests/src/com/android/settings/SettingsLicenseActivityTest.java
@@ -43,7 +43,7 @@
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SettingsLicenseActivityTest {
private ActivityController<SettingsLicenseActivity> mActivityController;
private SettingsLicenseActivity mActivity;
diff --git a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
index 21061c1..4238a4c 100644
--- a/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/SetupWizardUtilsTest.java
@@ -34,7 +34,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = {
SettingsShadowSystemProperties.class
})
diff --git a/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java
index 59a5867..94e4785 100644
--- a/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/SummaryPreferenceTest.java
@@ -35,7 +35,7 @@
import com.android.settings.testutils.shadow.SettingsShadowResources;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {
SettingsShadowResources.class,
SettingsShadowResources.SettingsShadowTheme.class
diff --git a/tests/robotests/src/com/android/settings/TetherServiceTest.java b/tests/robotests/src/com/android/settings/TetherServiceTest.java
index 0275c15..a888c30 100644
--- a/tests/robotests/src/com/android/settings/TetherServiceTest.java
+++ b/tests/robotests/src/com/android/settings/TetherServiceTest.java
@@ -37,7 +37,7 @@
import org.robolectric.util.ReflectionHelpers;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class TetherServiceTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/UtilsTest.java b/tests/robotests/src/com/android/settings/UtilsTest.java
index f813457..3d66dea 100644
--- a/tests/robotests/src/com/android/settings/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/UtilsTest.java
@@ -44,7 +44,7 @@
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class UtilsTest {
private static final String PACKAGE_NAME = "com.android.app";
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
index ac0720a..bc1151b 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
@@ -41,6 +41,7 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
@@ -51,6 +52,7 @@
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
shadows = SettingsShadowResources.class)
public class BluetoothDevicePreferenceTest {
+ private static final boolean SHOW_DEVICES_WITHOUT_NAMES = true;
private Context mContext;
@Mock
@@ -70,7 +72,7 @@
mFakeFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
mMetricsFeatureProvider = mFakeFeatureFactory.getMetricsFeatureProvider();
mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
- mDeviceListPreferenceFragment);
+ SHOW_DEVICES_WITHOUT_NAMES);
}
@Test
@@ -177,47 +179,22 @@
}
@Test
- public void testVisible_notVisibleThenVisible() {
- when(mDeviceListPreferenceFragment.shouldShowDevicesWithoutNames()).thenReturn(false);
- final boolean[] humanReadableName = {false};
- doAnswer(invocation -> humanReadableName[0]).when(mCachedBluetoothDevice)
- .hasHumanReadableName();
+ public void testVisible_showDeviceWithoutNames_visible() {
+ doReturn(false).when(mCachedBluetoothDevice).hasHumanReadableName();
BluetoothDevicePreference preference =
new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
- mDeviceListPreferenceFragment);
- assertThat(preference.isVisible()).isFalse();
- humanReadableName[0] = true;
- preference.onDeviceAttributesChanged();
+ SHOW_DEVICES_WITHOUT_NAMES);
+
assertThat(preference.isVisible()).isTrue();
}
@Test
- public void testVisible_visibleThenNotVisible() {
- when(mDeviceListPreferenceFragment.shouldShowDevicesWithoutNames()).thenReturn(false);
- final boolean[] humanReadableName = {true};
- doAnswer(invocation -> humanReadableName[0]).when(mCachedBluetoothDevice)
- .hasHumanReadableName();
+ public void testVisible_hideDeviceWithoutNames_invisible() {
+ doReturn(false).when(mCachedBluetoothDevice).hasHumanReadableName();
BluetoothDevicePreference preference =
new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
- mDeviceListPreferenceFragment);
- assertThat(preference.isVisible()).isTrue();
- humanReadableName[0] = false;
- preference.onDeviceAttributesChanged();
- assertThat(preference.isVisible()).isFalse();
- }
+ false);
- @Test
- public void testVisible_alwaysVisibleWhenEnabled() {
- when(mDeviceListPreferenceFragment.shouldShowDevicesWithoutNames()).thenReturn(true);
- final boolean[] humanReadableName = {true};
- doAnswer(invocation -> humanReadableName[0]).when(mCachedBluetoothDevice)
- .hasHumanReadableName();
- BluetoothDevicePreference preference =
- new BluetoothDevicePreference(mContext, mCachedBluetoothDevice,
- mDeviceListPreferenceFragment);
- assertThat(preference.isVisible()).isTrue();
- humanReadableName[0] = false;
- preference.onDeviceAttributesChanged();
- assertThat(preference.isVisible()).isTrue();
+ assertThat(preference.isVisible()).isFalse();
}
}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
new file mode 100644
index 0000000..525f70e
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceUpdaterTest.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2017 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.bluetooth;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.TestConfig;
+import com.android.settings.connecteddevice.DevicePreferenceCallback;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+public class BluetoothDeviceUpdaterTest {
+ @Mock
+ private DashboardFragment mDashboardFragment;
+ @Mock
+ private DevicePreferenceCallback mDevicePreferenceCallback;
+ @Mock
+ private CachedBluetoothDevice mCachedBluetoothDevice;
+ @Mock
+ private BluetoothDevice mBluetoothDevice;
+ @Mock
+ private SettingsActivity mSettingsActivity;
+
+ private Context mContext;
+ private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
+ private BluetoothDevicePreference mPreference;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = RuntimeEnvironment.application;
+ doReturn(mContext).when(mDashboardFragment).getContext();
+ doReturn(mBluetoothDevice).when(mCachedBluetoothDevice).getDevice();
+
+ mPreference = new BluetoothDevicePreference(mContext, mCachedBluetoothDevice, false);
+ mBluetoothDeviceUpdater = new BluetoothDeviceUpdater(mDashboardFragment,
+ mDevicePreferenceCallback, null) {
+ @Override
+ public void update(CachedBluetoothDevice cachedBluetoothDevice) {
+ // do nothing
+ }
+ };
+ mBluetoothDeviceUpdater.setPrefContext(mContext);
+ }
+
+ @Test
+ public void testAddPreference_deviceExist_doNothing() {
+ mBluetoothDeviceUpdater.mPreferenceMap.put(mBluetoothDevice, mPreference);
+
+ mBluetoothDeviceUpdater.addPreference(mCachedBluetoothDevice);
+
+ verify(mDevicePreferenceCallback, never()).onDeviceAdded(any(Preference.class));
+ }
+
+ @Test
+ public void testAddPreference_deviceNotExist_addPreference() {
+ mBluetoothDeviceUpdater.addPreference(mCachedBluetoothDevice);
+
+ verify(mDevicePreferenceCallback).onDeviceAdded(any(Preference.class));
+ assertThat(mBluetoothDeviceUpdater.mPreferenceMap.containsKey(mBluetoothDevice)).isTrue();
+ }
+
+ @Test
+ public void testRemovePreference_deviceExist_removePreference() {
+ mBluetoothDeviceUpdater.mPreferenceMap.put(mBluetoothDevice, mPreference);
+
+ mBluetoothDeviceUpdater.removePreference(mCachedBluetoothDevice);
+
+ verify(mDevicePreferenceCallback).onDeviceRemoved(mPreference);
+ assertThat(mBluetoothDeviceUpdater.mPreferenceMap.containsKey(mBluetoothDevice)).isFalse();
+ }
+
+ @Test
+ public void testRemovePreference_deviceNotExist_doNothing() {
+ mBluetoothDeviceUpdater.removePreference(mCachedBluetoothDevice);
+
+ verify(mDevicePreferenceCallback, never()).onDeviceRemoved(any(Preference.class));
+ }
+
+ @Test
+ public void testDeviceProfilesListener_click_startBluetoothDeviceDetailPage() {
+ doReturn(mSettingsActivity).when(mDashboardFragment).getActivity();
+
+ mBluetoothDeviceUpdater.mDeviceProfilesListener.onGearClick(mPreference);
+
+ verify(mSettingsActivity).startPreferencePanel(eq(mDashboardFragment),
+ eq(BluetoothDeviceDetailsFragment.class.getName()), any(),
+ eq(R.string.device_details_title), eq(null), eq(null), eq(0));
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java
new file mode 100644
index 0000000..c86664c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/bluetooth/ConnectedBluetoothDeviceUpdaterTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2017 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.bluetooth;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.content.Context;
+
+import com.android.settings.TestConfig;
+import com.android.settings.connecteddevice.DevicePreferenceCallback;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.bluetooth.CachedBluetoothDevice;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+public class ConnectedBluetoothDeviceUpdaterTest {
+ @Mock
+ private DashboardFragment mDashboardFragment;
+ @Mock
+ private DevicePreferenceCallback mDevicePreferenceCallback;
+ @Mock
+ private CachedBluetoothDevice mCachedBluetoothDevice;
+ @Mock
+ private BluetoothDevice mBluetoothDevice;
+
+ private Context mContext;
+ private ConnectedBluetoothDeviceUpdater mBluetoothDeviceUpdater;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = RuntimeEnvironment.application;
+ doReturn(mContext).when(mDashboardFragment).getContext();
+ doReturn(mBluetoothDevice).when(mCachedBluetoothDevice).getDevice();
+
+ mBluetoothDeviceUpdater = spy(new ConnectedBluetoothDeviceUpdater(mDashboardFragment,
+ mDevicePreferenceCallback, null));
+ mBluetoothDeviceUpdater.setPrefContext(mContext);
+ doNothing().when(mBluetoothDeviceUpdater).addPreference(any());
+ doNothing().when(mBluetoothDeviceUpdater).removePreference(any());
+ }
+
+ @Test
+ public void testUpdate_filterMatch_addPreference() {
+ doReturn(BluetoothDevice.BOND_BONDED).when(mBluetoothDevice).getBondState();
+ doReturn(true).when(mBluetoothDevice).isConnected();
+
+ mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
+
+ verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void testUpdate_filterNotMatch_removePreference() {
+ doReturn(BluetoothDevice.BOND_NONE).when(mBluetoothDevice).getBondState();
+ doReturn(false).when(mBluetoothDevice).isConnected();
+
+ mBluetoothDeviceUpdater.update(mCachedBluetoothDevice);
+
+ verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void testOnConnectionStateChanged_deviceConnected_addPreference() {
+ mBluetoothDeviceUpdater.onConnectionStateChanged(mCachedBluetoothDevice,
+ BluetoothAdapter.STATE_CONNECTED);
+
+ verify(mBluetoothDeviceUpdater).addPreference(mCachedBluetoothDevice);
+ }
+
+ @Test
+ public void testOnConnectionStateChanged_deviceDisconnected_removePreference() {
+ mBluetoothDeviceUpdater.onConnectionStateChanged(mCachedBluetoothDevice,
+ BluetoothAdapter.STATE_DISCONNECTED);
+
+ verify(mBluetoothDeviceUpdater).removePreference(mCachedBluetoothDevice);
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
similarity index 97%
rename from tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
rename to tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
index 4cb853e..de83f5e 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
@@ -51,7 +51,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ConnectedDeviceDashboardFragmentTest {
+public class ConnectedDeviceDashboardFragment2Test {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
Context mContext;
@@ -61,7 +61,7 @@
private FakeFeatureFactory mFeatureFactory;
private SmsMirroringFeatureProvider mFeatureProvider;
- private ConnectedDeviceDashboardFragment mFragment;
+ private ConnectedDeviceDashboardFragmentOld mFragment;
private TestSmsMirroringPreferenceController mSmsMirroringPreferenceController;
private static final class TestSmsMirroringPreferenceController
@@ -86,7 +86,7 @@
mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
mFeatureProvider = mFeatureFactory.smsMirroringFeatureProvider;
- mFragment = new ConnectedDeviceDashboardFragment();
+ mFragment = new ConnectedDeviceDashboardFragmentOld();
when(mContext.getPackageManager()).thenReturn(mManager);
mSmsMirroringPreferenceController = new TestSmsMirroringPreferenceController(mContext);
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java
new file mode 100644
index 0000000..e18115a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceGroupControllerTest.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2017 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 static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.anyString;
+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 android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceGroup;
+import android.support.v7.preference.PreferenceManager;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.TestConfig;
+import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+public class ConnectedDeviceGroupControllerTest {
+ @Mock
+ private DashboardFragment mDashboardFragment;
+ @Mock
+ private ConnectedBluetoothDeviceUpdater mConnectedBluetoothDeviceUpdater;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+ @Mock
+ private PreferenceManager mPreferenceManager;
+
+ private PreferenceGroup mPreferenceGroup;
+ private Context mContext;
+ private Preference mPreference;
+ private ConnectedDeviceGroupController mConnectedDeviceGroupController;
+ private Lifecycle mLifecycle;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mContext = RuntimeEnvironment.application;
+ mPreference = new Preference(mContext);
+ mLifecycle = new Lifecycle(() -> mLifecycle);
+ mPreferenceGroup = spy(new PreferenceScreen(mContext, null));
+ doReturn(mPreferenceManager).when(mPreferenceGroup).getPreferenceManager();
+ doReturn(mContext).when(mDashboardFragment).getContext();
+
+ mConnectedDeviceGroupController = new ConnectedDeviceGroupController(mDashboardFragment,
+ mLifecycle, mConnectedBluetoothDeviceUpdater);
+ mConnectedDeviceGroupController.mPreferenceGroup = mPreferenceGroup;
+ }
+
+ @Test
+ public void testOnDeviceAdded_firstAdd_becomeVisible() {
+ mConnectedDeviceGroupController.onDeviceAdded(mPreference);
+
+ assertThat(mPreferenceGroup.isVisible()).isTrue();
+ }
+
+ @Test
+ public void testOnDeviceRemoved_lastRemove_becomeInvisible() {
+ mPreferenceGroup.addPreference(mPreference);
+
+ mConnectedDeviceGroupController.onDeviceRemoved(mPreference);
+
+ assertThat(mPreferenceGroup.isVisible()).isFalse();
+ }
+
+ @Test
+ public void testOnDeviceRemoved_notLastRemove_stillVisible() {
+ mPreferenceGroup.setVisible(true);
+ mPreferenceGroup.addPreference(mPreference);
+ mPreferenceGroup.addPreference(new Preference(mContext));
+
+ mConnectedDeviceGroupController.onDeviceRemoved(mPreference);
+
+ assertThat(mPreferenceGroup.isVisible()).isTrue();
+ }
+
+ @Test
+ public void testDisplayPreference_becomeInvisible() {
+ doReturn(mPreferenceGroup).when(mPreferenceScreen).findPreference(anyString());
+
+ mConnectedDeviceGroupController.displayPreference(mPreferenceScreen);
+
+ assertThat(mPreferenceGroup.isVisible()).isFalse();
+ }
+
+ @Test
+ public void testLifecycle() {
+ // register the callback in onStart()
+ mLifecycle.handleLifecycleEvent(android.arch.lifecycle.Lifecycle.Event.ON_START);
+ verify(mConnectedBluetoothDeviceUpdater).registerCallback();
+
+ // unregister the callback in onStop()
+ mLifecycle.handleLifecycleEvent(android.arch.lifecycle.Lifecycle.Event.ON_STOP);
+ verify(mConnectedBluetoothDeviceUpdater).unregisterCallback();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java
deleted file mode 100644
index 2d75b8a..0000000
--- a/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2016 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.Answers.RETURNS_DEEP_STUBS;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-
-/**
- * deprecated in favor of {@link BugReportInPowerPreferenceControllerV2}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
-public class BugReportInPowerPreferenceControllerTest {
-
- @Mock(answer = RETURNS_DEEP_STUBS)
- private PreferenceScreen mScreen;
- @Mock
- private UserManager mUserManager;
- @Mock
- private PackageManager mPackageManager;
-
- private Context mContext;
- private SwitchPreference mPreference;
- private BugReportInPowerPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- ShadowApplication shadowContext = ShadowApplication.getInstance();
- shadowContext.setSystemService(Context.USER_SERVICE, mUserManager);
- mContext = spy(shadowContext.getApplicationContext());
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
- mPreference = new SwitchPreference(mContext);
- when(mScreen.findPreference(anyString())).thenReturn(mPreference);
- mController = new BugReportInPowerPreferenceController(mContext);
- mPreference.setKey(mController.getPreferenceKey());
- }
-
- @Test
- public void displayPreference_hasDebugRestriction_shouldRemovePreference() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
-
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isFalse();
- }
-
- @Test
- public void displayPreference_noDebugRestriction_shouldNotRemovePreference() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
-
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isTrue();
- }
-
- @Test
- public void enablePreference_hasDebugRestriction_shouldNotEnable() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
- mController.displayPreference(mScreen);
- mPreference.setEnabled(false);
-
- mController.enablePreference(true);
-
- assertThat(mPreference.isEnabled()).isFalse();
- }
-
- @Test
- public void enablePreference_noDebugRestriction_shouldEnable() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
- mPreference.setEnabled(false);
-
- mController.enablePreference(true);
-
- assertThat(mPreference.isEnabled()).isTrue();
- }
-
- @Test
- public void resetPreference_shouldUncheck() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
- mPreference.setChecked(true);
-
- mController.resetPreference();
-
- assertThat(mPreference.isChecked()).isFalse();
- }
-
- @Test
- public void handlePreferenceTreeClick_shouldUpdateSettings() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, 0);
- mPreference.setChecked(true);
- mController.displayPreference(mScreen);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, 0)).isEqualTo(1);
- }
-
- @Test
- public void updateState_settingsOn_shouldCheck() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, 1);
- mPreference.setChecked(false);
- mController.displayPreference(mScreen);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isTrue();
- }
-
- @Test
- public void updateState_settingsOff_shouldUncheck() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, 0);
- mPreference.setChecked(true);
- mController.displayPreference(mScreen);
-
- mController.updateState(mPreference);
-
- assertThat(mPreference.isChecked()).isFalse();
- }
-
- @Test
- public void updateBugreportOptions_shouldEnable() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mPreference.setEnabled(false);
- mController.displayPreference(mScreen);
-
- mController.updateBugreportOptions();
-
- assertThat(mPreference.isEnabled()).isTrue();
- }
-
- @Test
- public void updateBugreportOptions_shouldEnableBugReportStorage() {
- final ComponentName componentName = new ComponentName("com.android.shell",
- "com.android.shell.BugreportStorageProvider");
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- mController.updateBugreportOptions();
-
- verify(mPackageManager).setComponentEnabledSetting(eq(componentName), anyInt(), anyInt());
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java
deleted file mode 100644
index dffa461..0000000
--- a/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2016 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.Answers.RETURNS_DEEP_STUBS;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.UserManager;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-/**
- * deprecated in favor of {@link BugReportPreferenceControllerV2}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
-public class BugReportPreferenceControllerTest {
-
- @Mock
- private Context mContext;
- @Mock(answer = RETURNS_DEEP_STUBS)
- private PreferenceScreen mScreen;
- @Mock
- private UserManager mUserManager;
-
- private BugReportPreferenceController mController;
- private Preference mPreference;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- mController = new BugReportPreferenceController(mContext);
- mPreference = new Preference(RuntimeEnvironment.application);
- mPreference.setKey(mController.getPreferenceKey());
- when(mScreen.findPreference(mPreference.getKey())).thenReturn(mPreference);
- }
-
- @Test
- public void displayPreference_hasDebugRestriction_shouldRemovePreference() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
-
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isFalse();
- }
-
- @Test
- public void displayPreference_noDebugRestriction_shouldNotRemovePreference() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
-
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isTrue();
- }
-
- @Test
- public void enablePreference_hasDebugRestriction_shouldNotEnable() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
- mController.displayPreference(mScreen);
-
- mPreference.setEnabled(false);
- mController.enablePreference(true);
-
- assertThat(mPreference.isEnabled()).isFalse();
- }
-
- @Test
- public void enablePreference_noDebugRestriction_shouldEnable() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- mPreference.setEnabled(false);
- mController.enablePreference(true);
-
- assertThat(mPreference.isEnabled()).isTrue();
- }
-
-}
diff --git a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
deleted file mode 100644
index 4003d9f..0000000
--- a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2017 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.os.SystemProperties;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-/**
- * deprecated in favour of {@link CameraLaserSensorPreferenceControllerV2}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
- shadows = {SettingsShadowSystemProperties.class})
-public class CameraLaserSensorPreferenceControllerTest {
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private SwitchPreference mPreference;
-
- static final String USERDEBUG_BUILD = "userdebug";
- static final String ENG_BUILD = "eng";
- static final String USER_BUILD = "user";
-
- private CameraLaserSensorPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mController = new CameraLaserSensorPreferenceController(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
- }
-
- @After
- public void tearDown() {
- SettingsShadowSystemProperties.clear();
- }
-
- @Test
- public void isAvailable_withConfigNoShow_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(false);
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_withUserdebugBuild_shouldReturnTrue() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_withEngBuild_shouldReturnTrue() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.BUILD_TYPE, ENG_BUILD);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_withUserBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.BUILD_TYPE, USER_BUILD);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void displayPreference_cameraLaserSensorEnabled_shouldCheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceController.ENABLED));
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void displayPreference_cameraLaserSensorEnabled_shouldUncheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceController.DISABLED));
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void handlePreferenceTreeClick_preferenceChecked_shouldEnableCameraLaserSensor() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- when(mPreference.isChecked()).thenReturn(true);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(Integer.toString(CameraLaserSensorPreferenceController.ENABLED).equals(
- SystemProperties.get(
- CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceController.ENABLED)))).isTrue();
- }
-
- @Test
- public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableCameraLaserSensor() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
- when(mPreference.isChecked()).thenReturn(false);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(Integer.toString(CameraLaserSensorPreferenceController.DISABLED).equals(
- SystemProperties.get(
- CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceController.ENABLED)))).isTrue();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java
index 4bcdb98..c4be569 100644
--- a/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/ClearAdbKeysPreferenceControllerTest.java
@@ -38,6 +38,7 @@
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+import com.android.settings.testutils.shadow.ShadowUtils;
import org.junit.After;
import org.junit.Before;
@@ -54,7 +55,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION,
- shadows = {SettingsShadowSystemProperties.class})
+ shadows = {SettingsShadowSystemProperties.class, ShadowUtils.class})
public class ClearAdbKeysPreferenceControllerTest {
@Mock
@@ -83,6 +84,7 @@
public void tearDown() {
ShadowClearAdbKeysWarningDialog.resetDialog();
SettingsShadowSystemProperties.clear();
+ ShadowUtils.reset();
}
@Test
@@ -137,6 +139,20 @@
}
@Test
+ public void handlePreferenceTreeClick_monkeyUser_shouldReturnFalse() {
+ SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
+ doReturn(true).when(mController).isAdminUser();
+ ShadowUtils.setIsUserAMonkey(true);
+ mController.displayPreference(mScreen);
+ final String preferenceKey = mController.getPreferenceKey();
+ when(mPreference.getKey()).thenReturn(preferenceKey);
+
+ final boolean isHandled = mController.handlePreferenceTreeClick(mPreference);
+
+ assertThat(isHandled).isFalse();
+ }
+
+ @Test
public void onDeveloperOptionsSwitchEnabled_isAdminUser_shouldEnablePreference() {
SystemProperties.set(RO_ADB_SECURE_PROPERTY_KEY, Boolean.toString(true));
doReturn(true).when(mController).isAdminUser();
diff --git a/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerTest.java
deleted file mode 100644
index bb9a6ee..0000000
--- a/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerTest.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2017 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.os.SystemProperties;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-/**
- * deprecated in favor of {@link ConnectivityMonitorPreferenceControllerV2}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ConnectivityMonitorPreferenceControllerTest {
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private SwitchPreference mPreference;
-
- private ConnectivityMonitorPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- SettingsShadowSystemProperties.clear();
- mController = new ConnectivityMonitorPreferenceController(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void isAvailable_trueShowFlagWithUserdebugBuild_shouldReturnTrue() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void isAvailable_trueShowFlagWithEngBuild_shouldReturnTrue() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "eng");
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void isAvailable_trueShowFlagWithUserBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "user");
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void isAvailable_falseShowFlagWithUserdebugBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(false);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void isAvailable_falseShowFlagWithEngBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(false);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "eng");
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void isAvailable_falseShowFlagWithUserBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(false);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "user");
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void displayPreference_connectivityMonitorEnabled_shouldCheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.ENABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setChecked(true);
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void displayPreference_connectivityMonitorUserEnabled_shouldCheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.USER_ENABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setChecked(true);
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void displayPreference_connectivityMonitorDisabled_shouldUncheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.DISABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setChecked(false);
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void displayPreference_connectivityMonitorUserDisabled_shouldUncheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(true);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setChecked(false);
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void handlePreferenceTreeClick_preferenceChecked_shouldEnableConnectivityMonitor() {
- when(mPreference.isChecked()).thenReturn(true);
-
- when(mContext.getResources().getString(R.string.connectivity_monitor_toast))
- .thenReturn("To apply connectivity monitor change, reboot device");
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(ConnectivityMonitorPreferenceController.USER_ENABLED_STATUS.equals(
- SystemProperties.get(
- ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.DISABLED_STATUS))).isTrue();
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableConnectivityMonitor() {
- when(mPreference.isChecked()).thenReturn(false);
-
- when(mContext.getResources().getString(R.string.connectivity_monitor_toast))
- .thenReturn("To apply connectivity monitor change, reboot device");
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS.equals(
- SystemProperties.get(
- ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.DISABLED_STATUS))).isTrue();
- }
-
-}
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java
deleted file mode 100644
index 87dc5d0..0000000
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2016 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.app.Activity;
-import android.content.Context;
-import android.provider.SearchIndexableResource;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceManager;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.testutils.shadow.SettingsShadowResources;
-import com.android.settingslib.development.DevelopmentSettingsEnabler;
-import com.android.settingslib.drawer.CategoryKey;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Answers.RETURNS_DEEP_STUBS;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.doReturn;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
- shadows = {
- SettingsShadowResources.class,
- SettingsShadowResources.SettingsShadowTheme.class
- })
-public class DevelopmentSettingsTest {
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Activity mActivity;
- @Mock(answer = RETURNS_DEEP_STUBS)
- private PreferenceScreen mScreen;
- @Mock
- private PreferenceManager mPreferenceManager;
-
- private FakeFeatureFactory mFeatureFactory;
- private DevelopmentSettings mSettings;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- FakeFeatureFactory.setupForTest(mContext);
- mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
- mSettings = spy(new DevelopmentSettings());
- }
-
- @Test
- public void addDashboardCategoryPreference_shouldAddToScreen() {
- final List<Preference> preferences = new ArrayList<>();
- preferences.add(new Preference(ShadowApplication.getInstance().getApplicationContext()));
- preferences.add(new Preference(ShadowApplication.getInstance().getApplicationContext()));
- doReturn(mScreen).when(mSettings).getPreferenceScreen();
- doReturn(mPreferenceManager).when(mSettings).getPreferenceManager();
- doReturn(mActivity).when(mSettings).getActivity();
- when(mPreferenceManager.getContext()).thenReturn(mContext);
- when(mFeatureFactory.dashboardFeatureProvider.getPreferencesForCategory(
- mActivity, mContext, mSettings.getMetricsCategory(),
- CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT))
- .thenReturn(preferences);
-
- mSettings.onAttach(mContext);
- mSettings.addDashboardCategoryPreferences();
-
- verify(mScreen, times(2)).addPreference(any(Preference.class));
- }
-
- @Test
- public void searchIndex_shouldIndexFromPrefXml() {
- final List<SearchIndexableResource> index =
- DevelopmentSettings.SEARCH_INDEX_DATA_PROVIDER.getXmlResourcesToIndex(
- RuntimeEnvironment.application, true);
-
- assertThat(index.size()).isEqualTo(1);
- assertThat(index.get(0).xmlResId).isEqualTo(R.xml.development_settings);
- }
-
- @Test
- public void searchIndex_pageDisabled_shouldAddAllKeysToNonIndexable() {
- final Context appContext = RuntimeEnvironment.application;
- DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(appContext, false);
-
- final List<String> nonIndexableKeys =
- DevelopmentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(appContext);
-
- assertThat(nonIndexableKeys).contains("development_prefs_screen");
- }
-
- @Test
- public void searchIndex_pageEnabled_shouldNotAddKeysToNonIndexable() {
- final Context appContext = RuntimeEnvironment.application;
- DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(appContext, true);
-
- final List<String> nonIndexableKeys =
- DevelopmentSettings.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(appContext);
-
- assertThat(nonIndexableKeys).doesNotContain("development_prefs_screen");
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSwitchBarControllerTest.java
index aced766..bfe30fb 100644
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSwitchBarControllerTest.java
@@ -23,6 +23,8 @@
import static org.mockito.Mockito.when;
+import android.content.Context;
+
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowUtils;
@@ -49,9 +51,8 @@
public class DevelopmentSwitchBarControllerTest {
@Mock
- private DevelopmentSettings mSettings;
- @Mock
- private DevelopmentSettingsDashboardFragment mNewSettings;
+ private DevelopmentSettingsDashboardFragment mSettings;
+ private Context mContext;
private Lifecycle mLifecycle;
private SwitchBar mSwitchBar;
private DevelopmentSwitchBarController mController;
@@ -59,8 +60,10 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
mLifecycle = new Lifecycle(() -> mLifecycle);
- mSwitchBar = new SwitchBar(RuntimeEnvironment.application);
+ mSwitchBar = new SwitchBar(mContext);
+ when(mSettings.getContext()).thenReturn(mContext);
}
@After
@@ -69,7 +72,7 @@
}
@Test
- public void runThroughLifecycle_isMonkeyRun_shouldNotRegisterListener() {
+ public void runThroughLifecycle_v2_isMonkeyRun_shouldNotRegisterListener() {
ShadowUtils.setIsUserAMonkey(true);
mController = new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle);
@@ -84,21 +87,6 @@
}
@Test
- public void runThroughLifecycle_v2_isMonkeyRun_shouldNotRegisterListener() {
- ShadowUtils.setIsUserAMonkey(true);
- mController = new DevelopmentSwitchBarController(mNewSettings, mSwitchBar,
- true /* isAvailable */, mLifecycle);
- final ArrayList<SwitchBar.OnSwitchChangeListener> listeners =
- ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
-
- mLifecycle.handleLifecycleEvent(ON_START);
- assertThat(listeners).doesNotContain(mNewSettings);
-
- mLifecycle.handleLifecycleEvent(ON_STOP);
- assertThat(listeners).doesNotContain(mNewSettings);
- }
-
- @Test
public void runThroughLifecycle_isNotMonkeyRun_shouldRegisterAndRemoveListener() {
ShadowUtils.setIsUserAMonkey(false);
mController = new DevelopmentSwitchBarController(mSettings, mSwitchBar,
@@ -115,18 +103,18 @@
@Test
public void runThroughLifecycle_v2_isNotMonkeyRun_shouldRegisterAndRemoveListener() {
- when(mNewSettings.getContext()).thenReturn(RuntimeEnvironment.application);
+ when(mSettings.getContext()).thenReturn(RuntimeEnvironment.application);
ShadowUtils.setIsUserAMonkey(false);
- mController = new DevelopmentSwitchBarController(mNewSettings, mSwitchBar,
+ mController = new DevelopmentSwitchBarController(mSettings, mSwitchBar,
true /* isAvailable */, mLifecycle);
final ArrayList<SwitchBar.OnSwitchChangeListener> listeners =
ReflectionHelpers.getField(mSwitchBar, "mSwitchChangeListeners");
mLifecycle.handleLifecycleEvent(ON_START);
- assertThat(listeners).contains(mNewSettings);
+ assertThat(listeners).contains(mSettings);
mLifecycle.handleLifecycleEvent(ON_STOP);
- assertThat(listeners).doesNotContain(mNewSettings);
+ assertThat(listeners).doesNotContain(mSettings);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/development/EnableAdbPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/EnableAdbPreferenceControllerTest.java
deleted file mode 100644
index e7080eb..0000000
--- a/tests/robotests/src/com/android/settings/development/EnableAdbPreferenceControllerTest.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.support.v14.preference.SwitchPreference;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-/**
- * @deprecated in favor of {@link AdbPreferenceController}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class EnableAdbPreferenceControllerTest {
-
- @Mock
- private SwitchPreference mSwitchPreference;
-
- private EnableAdbPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mController
- = new EnableAdbPreferenceController(RuntimeEnvironment.application);
- }
-
- @Test
- public void testIsConfirmationDialogShowing() {
- assertThat(mController.isConfirmationDialogShowing()).isFalse();
- mController.showConfirmationDialog(mSwitchPreference);
- assertThat(mController.isConfirmationDialogShowing()).isTrue();
- mController.dismissConfirmationDialog();
- assertThat(mController.isConfirmationDialogShowing()).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/LogpersistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/LogpersistPreferenceControllerTest.java
deleted file mode 100644
index bd1af34..0000000
--- a/tests/robotests/src/com/android/settings/development/LogpersistPreferenceControllerTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2017 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 android.support.v7.preference.ListPreference;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.core.lifecycle.Lifecycle;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-/**
- * deprecated in favor of {@link LogPersistPreferenceControllerV2}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class LogpersistPreferenceControllerTest {
-
- private Lifecycle mLifecycle;
-
- @Mock
- private ListPreference mListPreference;
-
- private LogpersistPreferenceController mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mLifecycle = new Lifecycle(() -> mLifecycle);
- mController
- = new LogpersistPreferenceController(RuntimeEnvironment.application, mLifecycle);
- }
-
- @Test
- public void testIsConfirmationDialogShowing() {
- assertThat(mController.isConfirmationDialogShowing()).isFalse();
- mController.showConfirmationDialog(mListPreference);
- assertThat(mController.isConfirmationDialogShowing()).isTrue();
- mController.dismissConfirmationDialog();
- assertThat(mController.isConfirmationDialogShowing()).isFalse();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java
index 71260f3..5a82ca0 100644
--- a/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/SelectUsbConfigPreferenceControllerTest.java
@@ -18,17 +18,23 @@
import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;
+import static com.google.common.truth.Truth.assertThat;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
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 static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.pm.PackageManager;
import android.hardware.usb.UsbManager;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.PreferenceScreen;
@@ -36,18 +42,23 @@
import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH,
+ sdk = TestConfig.SDK_VERSION,
+ shadows = {ShadowUtils.class})
public class SelectUsbConfigPreferenceControllerTest {
@Mock
@@ -56,6 +67,8 @@
private PreferenceScreen mScreen;
@Mock
private UsbManager mUsbManager;
+ @Mock
+ private PackageManager mPackageManager;
private Context mContext;
private Lifecycle mLifecycle;
@@ -80,6 +93,7 @@
mLifecycle = new Lifecycle(() -> mLifecycle);
mContext = spy(RuntimeEnvironment.application);
doReturn(mUsbManager).when(mContext).getSystemService(Context.USB_SERVICE);
+ doReturn(mPackageManager).when(mContext).getPackageManager();
mValues = mContext.getResources().getStringArray(R.array.usb_configuration_values);
mSummaries = mContext.getResources().getStringArray(R.array.usb_configuration_titles);
mController = spy(new SelectUsbConfigPreferenceController(mContext, mLifecycle));
@@ -88,6 +102,11 @@
}
+ @After
+ public void teardown() {
+ ShadowUtils.reset();
+ }
+
@Test
public void onPreferenceChange_setCharging_shouldEnableCharging() {
when(mUsbManager.isFunctionEnabled(mValues[0])).thenReturn(true);
@@ -98,6 +117,30 @@
}
@Test
+ public void onUsbAccessoryAndHostDisabled_shouldNotBeAvailable() {
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(false);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn(
+ false);
+ assertFalse(mController.isAvailable());
+ }
+
+ @Test
+ public void onUsbHostEnabled_shouldBeAvailable() {
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(true);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn(
+ false);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
+ public void onUsbAccessoryEnabled_shouldBeAvailable() {
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_HOST)).thenReturn(false);
+ when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_USB_ACCESSORY)).thenReturn(
+ true);
+ assertTrue(mController.isAvailable());
+ }
+
+ @Test
public void onPreferenceChange_setMtp_shouldEnableMtp() {
when(mUsbManager.isFunctionEnabled(mValues[1])).thenReturn(true);
doNothing().when(mController).setCurrentFunction(anyString(), anyBoolean());
@@ -107,6 +150,18 @@
}
@Test
+ public void onPreferenceChange_monkeyUser_shouldReturnFalse() {
+ when(mUsbManager.isFunctionEnabled(mValues[1])).thenReturn(true);
+ ShadowUtils.setIsUserAMonkey(true);
+ doNothing().when(mController).setCurrentFunction(anyString(), anyBoolean());
+
+ final boolean isHandled = mController.onPreferenceChange(mPreference, mValues[1]);
+
+ assertThat(isHandled).isFalse();
+ verify(mController, never()).setCurrentFunction(any(), anyBoolean());
+ }
+
+ @Test
public void updateState_chargingEnabled_shouldSetPreferenceToCharging() {
when(mUsbManager.isFunctionEnabled(mValues[0])).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerTest.java
deleted file mode 100644
index 3208810..0000000
--- a/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerTest.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2017 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 org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.mock;
-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.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.provider.Settings.Global;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-import com.android.settingslib.RestrictedSwitchPreference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.shadows.ShadowApplication;
-import org.robolectric.util.ReflectionHelpers;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * deprecated in favor of {@link VerifyAppsOverUsbPreferenceControllerV2}
- */
-@Deprecated
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class VerifyAppsOverUsbPreferenceControllerTest {
-
- @Mock
- private PackageManager mPackageManager;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private RestrictedSwitchPreference mPreference;
-
- @Mock
- private VerifyAppsOverUsbPreferenceController.RestrictedLockUtilsDelegate
- mRestrictedLockUtilsDelegate;
-
- private Context mContext;
- private VerifyAppsOverUsbPreferenceController mController;
-
- /** Convenience class for setting global int settings. */
- class GlobalSetter {
- public GlobalSetter set(String setting, int value) {
- Global.putInt(mContext.getContentResolver(), setting, value);
- return this;
- }
- }
-
- private final GlobalSetter mGlobals = new GlobalSetter();
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- final ShadowApplication shadowContext = ShadowApplication.getInstance();
- mContext = spy(shadowContext.getApplicationContext());
- when(mScreen.findPreference(anyString())).thenReturn(mPreference);
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
- mController = new VerifyAppsOverUsbPreferenceController(mContext);
- ReflectionHelpers.setField(
- mController, "mRestrictedLockUtils", mRestrictedLockUtilsDelegate);
- }
-
- private void setupVerifyBroadcastReceivers(boolean nonEmpty) {
- final List<ResolveInfo> resolveInfos = nonEmpty
- ? Collections.singletonList(mock(ResolveInfo.class))
- : Collections.<ResolveInfo>emptyList();
- when(mPackageManager.queryBroadcastReceivers((Intent) any(), anyInt()))
- .thenReturn(resolveInfos);
- }
-
- private void setupEnforcedAdmin(EnforcedAdmin result) {
- when(mRestrictedLockUtilsDelegate.checkIfRestrictionEnforced(
- (Context) any(), anyString(), anyInt())).thenReturn(result);
- }
-
- @Test
- public void updateState_preferenceCheckedWhenSettingIsOn() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1).set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_preferenceUncheckedWhenSettingIsOff() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1).set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0);
- mController.displayPreference(mScreen);
- mController.updatePreference();
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_preferenceUncheckedWhenNoAdb() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 0).set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_preferenceUncheckedWhenVerifierIsOff() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1)
- .set(Global.PACKAGE_VERIFIER_ENABLE, 0);
- mController.displayPreference(mScreen);
- mController.updatePreference();
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_preferenceUncheckedWhenNoVerifyBroadcastReceivers() {
- setupVerifyBroadcastReceivers(false);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_preferenceDisabledWhenRestrictedByAdmin() {
- setupVerifyBroadcastReceivers(true);
- final EnforcedAdmin admin = new EnforcedAdmin();
- setupEnforcedAdmin(admin);
- mGlobals.set(Global.ADB_ENABLED, 1)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
- verify(mPreference).setDisabledByAdmin(admin);
- }
-
- @Test
- public void updateState_preferenceRemovedWhenVerifierSettingsVisibleIsOff() {
- setupVerifyBroadcastReceivers(true);
- mGlobals.set(Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 0);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
- when(mScreen.getPreferenceCount()).thenReturn(1);
- when(mScreen.getPreference(anyInt())).thenReturn(mPreference);
-
- mController.displayPreference(mScreen);
-
- verify(mPreference).setVisible(false);
- }
-}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java
index aa86fd9..c344df3 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/DeviceModelPreferenceControllerTest.java
@@ -16,6 +16,8 @@
package com.android.settings.deviceinfo;
+import static com.android.settings.deviceinfo.DeviceModelPreferenceController.getDeviceModel;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
@@ -28,6 +30,7 @@
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
+import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -37,6 +40,7 @@
import org.mockito.Answers;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@RunWith(SettingsRobolectricTestRunner.class)
@@ -44,18 +48,19 @@
public class DeviceModelPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Fragment mFragment;
@Mock
private Preference mPreference;
@Mock
private PreferenceScreen mPreferenceScreen;
+
+ private Context mContext;
private DeviceModelPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
mController = new DeviceModelPreferenceController(mContext, mFragment);
when(mPreferenceScreen.findPreference(mController.getPreferenceKey()))
.thenReturn(mPreference);
@@ -71,7 +76,8 @@
public void displayPref_shouldSetSummary() {
mController.displayPreference(mPreferenceScreen);
- verify(mPreference).setSummary(anyString());
+ verify(mPreference).setSummary(mContext.getResources().getString(R.string.model_summary,
+ getDeviceModel()));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java
index 4b3d051..ed5374a 100644
--- a/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/RecentLocationRequestPreferenceControllerTest.java
@@ -35,11 +35,14 @@
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;
import com.android.settings.applications.InstalledAppDetails;
+import com.android.settings.applications.AppInfoDashboardFragment;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.AppPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -167,8 +170,15 @@
preference.performClick();
- verify(activity).startPreferencePanelAsUser(any(), eq(InstalledAppDetails.class.getName()),
- any(Bundle.class), anyInt(), any(), any());
+ if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.APP_INFO_V2)) {
+ verify(activity).startPreferencePanelAsUser(any(),
+ eq(AppInfoDashboardFragment.class.getName()),
+ any(Bundle.class), anyInt(), any(), any());
+ } else {
+ verify(activity).startPreferencePanelAsUser(any(),
+ eq(InstalledAppDetails.class.getName()),
+ any(Bundle.class), anyInt(), any(), any());
+ }
}
private static ArgumentMatcher<Preference> titleMatches(String expected) {
diff --git a/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java
index d685740..1f49ff2 100644
--- a/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/NotificationPreferenceControllerTest.java
@@ -273,6 +273,7 @@
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = false;
NotificationChannelGroupWrapper group = mock(NotificationChannelGroupWrapper.class);
+ when(group.getGroup()).thenReturn(mock(NotificationChannelGroup.class));
when(group.isBlocked()).thenReturn(false);
mController.onResume(appRow, null, group, null);
@@ -284,6 +285,7 @@
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = true;
NotificationChannelGroupWrapper group = mock(NotificationChannelGroupWrapper.class);
+ when(group.getGroup()).thenReturn(mock(NotificationChannelGroup.class));
when(group.isBlocked()).thenReturn(false);
mController.onResume(appRow, null, group, null);
@@ -295,6 +297,7 @@
NotificationBackend.AppRow appRow = new NotificationBackend.AppRow();
appRow.systemApp = true;
NotificationChannelGroupWrapper group = mock(NotificationChannelGroupWrapper.class);
+ when(group.getGroup()).thenReturn(mock(NotificationChannelGroup.class));
when(group.isBlocked()).thenReturn(true);
mController.onResume(appRow, null, group, null);
diff --git a/tests/robotests/src/com/android/settings/notification/OWNERS b/tests/robotests/src/com/android/settings/notification/OWNERS
new file mode 100644
index 0000000..0d73685
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/OWNERS
@@ -0,0 +1,4 @@
+# Default reviewers for this and subdirectories.
+asc@google.com
+dsandler@google.com
+juliacr@google.com
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDevicePolicyManagerWrapper.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDevicePolicyManagerWrapper.java
new file mode 100644
index 0000000..104cd87
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowDevicePolicyManagerWrapper.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2017 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.shadow;
+
+import android.content.ComponentName;
+
+import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+/**
+ * Shadow for {@link DevicePolicyManagerWrapper} to allow stubbing hidden methods.
+ */
+@Implements(DevicePolicyManagerWrapper.class)
+public class ShadowDevicePolicyManagerWrapper {
+ private static ComponentName deviceOComponentName = null;
+ private static int deviceOwnerUserId = -1;
+
+ @Implementation
+ public ComponentName getDeviceOwnerComponentOnAnyUser() {
+ return deviceOComponentName;
+ }
+
+ @Implementation
+ public int getDeviceOwnerUserId() {
+ return deviceOwnerUserId;
+ }
+
+ public static void setDeviceOComponentName(ComponentName deviceOComponentName) {
+ ShadowDevicePolicyManagerWrapper.deviceOComponentName = deviceOComponentName;
+ }
+
+ public static void setDeviceOwnerUserId(int deviceOwnerUserId) {
+ ShadowDevicePolicyManagerWrapper.deviceOwnerUserId = deviceOwnerUserId;
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPackageManagerWrapper.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPackageManagerWrapper.java
new file mode 100644
index 0000000..7a1b8c5
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowPackageManagerWrapper.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2017 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.shadow;
+
+import android.content.pm.PackageManager.NameNotFoundException;
+
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+
+import java.util.HashMap;
+
+/**
+ * Shadow for {@link PackageManagerWrapper} to allow stubbing hidden methods.
+ */
+@Implements(PackageManagerWrapper.class)
+public class ShadowPackageManagerWrapper {
+ private static final HashMap<String, Integer> packageUids = new HashMap<>();
+
+ @Implementation
+ public int getPackageUidAsUser(String packageName, int userId) throws NameNotFoundException {
+ Integer res = packageUids.get(packageName + userId);
+ if (res == null) {
+ throw new NameNotFoundException();
+ }
+ return res;
+ }
+
+ public static void setPackageUidAsUser(String packageName, int userId, int uid) {
+ packageUids.put(packageName + userId, uid);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
index 6e3fa32..3a0341c 100644
--- a/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/details/WifiDetailPreferenceControllerTest.java
@@ -33,6 +33,7 @@
import static org.mockito.Mockito.when;
import android.app.Activity;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
@@ -51,6 +52,7 @@
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Handler;
+import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
@@ -64,7 +66,9 @@
import com.android.settings.applications.LayoutPreference;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowDevicePolicyManagerWrapper;
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
+import com.android.settings.testutils.shadow.ShadowPackageManagerWrapper;
import com.android.settings.widget.ActionButtonPreference;
import com.android.settings.widget.ActionButtonPreferenceTest;
import com.android.settings.widget.EntityHeaderController;
@@ -94,7 +98,11 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
- shadows = ShadowEntityHeaderController.class)
+ shadows = {
+ ShadowDevicePolicyManagerWrapper.class,
+ ShadowEntityHeaderController.class,
+ ShadowPackageManagerWrapper.class,
+ })
public class WifiDetailPreferenceControllerTest {
private static final int LEVEL = 1;
@@ -238,8 +246,6 @@
when(mockHeaderController.setSummary(anyString())).thenReturn(mockHeaderController);
when(mockIconInjector.getIcon(anyInt())).thenReturn(new ColorDrawable());
- doReturn(null).when(mContext).getSystemService(eq(Context.DEVICE_POLICY_SERVICE));
-
setupMockedPreferenceScreen();
mController = newWifiDetailPreferenceController();
}
@@ -629,6 +635,45 @@
}
@Test
+ public void canForgetNetwork_lockedDown() {
+ lockDownNetwork();
+
+ displayAndResume();
+
+ verify(mockButtonsPref).setButton1Visible(false);
+ }
+
+ @Test
+ public void canModifyNetwork_saved() {
+ assertThat(mController.canModifyNetwork()).isTrue();
+ }
+
+ @Test
+ public void canModifyNetwork_lockedDown() {
+ lockDownNetwork();
+
+ assertThat(mController.canModifyNetwork()).isFalse();
+ }
+
+ /**
+ * Pretends that current network is locked down by device owner.
+ */
+ private void lockDownNetwork() {
+ final int doUserId = 123;
+ final int doUid = 1234;
+ String doPackage = "some.package";
+
+ mockWifiConfig.creatorUid = doUid;
+ ComponentName doComponent = new ComponentName(doPackage, "some.Class");
+ ShadowPackageManagerWrapper.setPackageUidAsUser(doPackage, doUserId, doUid);
+ ShadowDevicePolicyManagerWrapper.setDeviceOComponentName(doComponent);
+ ShadowDevicePolicyManagerWrapper.setDeviceOwnerUserId(doUserId);
+
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN, 1);
+ }
+
+ @Test
public void forgetNetwork_ephemeral() {
String ssid = "ssid";
when(mockWifiInfo.isEphemeral()).thenReturn(true);
diff --git a/tests/unit/src/com/android/settings/notification/OWNERS b/tests/unit/src/com/android/settings/notification/OWNERS
new file mode 100644
index 0000000..0d73685
--- /dev/null
+++ b/tests/unit/src/com/android/settings/notification/OWNERS
@@ -0,0 +1,4 @@
+# Default reviewers for this and subdirectories.
+asc@google.com
+dsandler@google.com
+juliacr@google.com
\ No newline at end of file