Merge "Update Settings to use DeviceDefault colored button"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index d65d92d..05c5075 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,36 +1916,12 @@
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"
android:taskAffinity="com.android.settings"
- android:parentActivityName="Settings">
+ android:parentActivityName="Settings"
+ android:enabled="false">
<intent-filter android:priority="1">
<action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
<action android:name="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
@@ -1987,15 +1990,6 @@
android:value="com.android.settings.print.PrintJobSettingsFragment" />
</activity>
- <!-- Keep compatibility with old shortcuts. -->
- <activity-alias android:name="DevelopmentSettings"
- android:exported="true"
- android:label="@string/development_settings_title"
- android:targetActivity="Settings$DevelopmentSettingsDashboardActivity">
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.development.DevelopmentSettingsDashboardFragment" />
- </activity-alias>
-
<activity android:name=".development.AppPicker"
android:label="@string/select_application"
android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
@@ -2004,15 +1998,6 @@
android:label="@string/select_webview_provider_dialog_title">
</activity>
- <!-- Keep compatibility with old shortcuts. -->
- <activity-alias android:name="UsbSettings"
- android:exported="true"
- android:label="@string/storage_title_usb"
- android:targetActivity="Settings$DevelopmentSettingsDashboardActivity">
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.deviceinfo.UsbSettings" />
- </activity-alias>
-
<!-- Bluetooth stuff -->
<activity android:name=".bluetooth.BluetoothPairingDialog"
@@ -2817,6 +2802,8 @@
</intent-filter>
<meta-data android:name="com.android.settings.category"
android:value="com.android.settings.category.ia.wireless" />
+ <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.sim.SimSettings" />
</activity>
@@ -3306,6 +3293,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-land/fingerprint_enroll_enrolling.xml b/res/layout-land/fingerprint_enroll_enrolling.xml
index fb6c78b..8b902f1 100644
--- a/res/layout-land/fingerprint_enroll_enrolling.xml
+++ b/res/layout-land/fingerprint_enroll_enrolling.xml
@@ -110,10 +110,11 @@
<com.android.setupwizardlib.view.FillContentLayout
android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_height="0dp"
+ android:layout_marginVertical="24dp"
+ android:layout_weight="1"
android:paddingTop="0dp"
- android:paddingBottom="0dp"
- android:layout_marginVertical="24dp">
+ android:paddingBottom="0dp">
<include layout="@layout/fingerprint_enroll_enrolling_content"
android:layout_width="match_parent"
diff --git a/res/layout/preference_dropdown_material_settings.xml b/res/layout/preference_dropdown_material_settings.xml
deleted file mode 100644
index a3f5ab9..0000000
--- a/res/layout/preference_dropdown_material_settings.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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.
- -->
-
-
-<!-- Based off frameworks/base/core/res/res/layout/preference_dropdown_material.xml
- except that icon space in this layout is always reserved -->
-<FrameLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <Spinner
- android:id="@+id/spinner"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/preference_no_icon_padding_start"
- android:visibility="invisible" />
-
- <include layout="@layout/preference_material"/>
-
-</FrameLayout>
\ No newline at end of file
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/layout/settings_main_dashboard.xml b/res/layout/settings_main_dashboard.xml
index 8e83cff..7c34803 100644
--- a/res/layout/settings_main_dashboard.xml
+++ b/res/layout/settings_main_dashboard.xml
@@ -32,7 +32,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/search_bar_margin"
- app:cardCornerRadius="2dp"
+ app:cardCornerRadius="@dimen/search_bar_half_height"
app:cardBackgroundColor="?android:attr/colorBackground"
app:cardElevation="2dp">
<Toolbar
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-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 4d30969..1f78abd 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -60,6 +60,7 @@
<dimen name="switchbar_subsettings_margin_end">24dp</dimen>
<dimen name="search_bar_height">64dp</dimen>
+ <dimen name="search_bar_half_height">32dp</dimen>
<!-- Dimensions for Wifi Assistant Card -->
<dimen name="wifi_assistant_padding_top_bottom">24dp</dimen>
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/dimens.xml b/res/values/dimens.xml
index 0d4289a..2f00297 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -121,6 +121,7 @@
<dimen name="search_bar_negative_margin">-8dp</dimen>
<dimen name="search_bar_height">48dp</dimen>
+ <dimen name="search_bar_half_height">24dp</dimen>
<dimen name="search_bar_text_size">16dp</dimen>
<!-- Dimensions for Wifi Assistant Card -->
diff --git a/res/values/strings.xml b/res/values/strings.xml
index e96eb5f..3fb50e5 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. -->
@@ -2671,13 +2676,13 @@
<string name="status_imei_sv">IMEI SV</string>
<!-- Do not translate. About phone, status item title -->
<string name="status_iccid">ICCID</string>
- <!-- About tablet, status item title. The Mobile Directory Number [CHAR LIMIT=30] -->
+ <!-- About tablet, status item title. The Mobile Directory Number [CHAR LIMIT=40] -->
<string name="status_number" product="tablet">MDN</string>
- <!-- About phone, status item title. The phone number of the current device [CHAR LIMIT=30] -->
+ <!-- About phone, status item title. The phone number of the current device [CHAR LIMIT=40] -->
<string name="status_number" product="default">Phone number</string>
- <!-- About tablet, status item title for multi-sim devices. The Mobile Directory Number [CHAR LIMIT=30] -->
+ <!-- About tablet, status item title for multi-sim devices. The Mobile Directory Number [CHAR LIMIT=40] -->
<string name="status_number_sim_slot" product="tablet">MDN (sim slot %1$d)</string>
- <!-- About phone, status item title for multi-sim devices. The phone number of the current device [CHAR LIMIT=30] -->
+ <!-- About phone, status item title for multi-sim devices. The phone number of the current device [CHAR LIMIT=40] -->
<string name="status_number_sim_slot" product="default">Phone number (sim slot %1$d)</string>
<!-- About tablet, status item title. The Mobile Directory Number [CHAR LIMIT=30] -->
<string name="status_number_sim_status" product="tablet">MDN on SIM</string>
@@ -4970,7 +4975,7 @@
<string name="process_dex2oat_label">App optimization</string>
<!-- [CHAR_LIMIT=40] Battery saver: Label for feature, title + menu item -->
- <string name="battery_saver">Battery saver</string>
+ <string name="battery_saver">Battery Saver</string>
<!-- [CHAR_LIMIT=40] Battery saver: Title for automatic entry option -->
<string name="battery_saver_turn_on_automatically_title">Turn on automatically</string>
@@ -6575,7 +6580,10 @@
<string name="keywords_payment_settings">pay, tap, payments</string>
<string name="keywords_backup">backup, back up</string>
<string name="keywords_assist_gesture_launch">gesture</string>
- <string name="keywords_imei_info">imei, meid</string>
+ <string name="keywords_imei_info">imei, meid, min, prl version, imei sv</string>
+ <string name="keywords_sim_status">network, mobile network state, service state, signal strength, mobile network type, roaming, iccid</string>
+ <string name="keywords_model_and_hardware">serial number, hardware version</string>
+ <string name="keywords_android_version">android security patch level, baseband version, kernel version</string>
<!-- NFC Wi-Fi pairing/setup strings-->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8b6e1ec..7c43e99 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -218,6 +218,7 @@
<item name="android:paddingStart">4dip</item>
<item name="android:layout_marginStart">4dip</item>
<item name="android:textSize">18sp</item>
+ <item name="android:textAlignment">viewStart</item>
</style>
<style name="wifi_section">
diff --git a/res/values/styles_preference.xml b/res/values/styles_preference.xml
index 056d55a..b8b9eb3 100644
--- a/res/values/styles_preference.xml
+++ b/res/values/styles_preference.xml
@@ -20,19 +20,19 @@
<resources>
<!-- Fragment style -->
- <style name="SettingsPreferenceFragmentStyle" parent="@style/PreferenceFragmentStyle.SettingsBase">
+ <style name="SettingsPreferenceFragmentStyle" parent="@style/PreferenceFragment.Material">
<item name="android:layout">@layout/preference_list_fragment</item>
</style>
- <style name="ApnPreference" parent="Preference.SettingsBase">
+ <style name="ApnPreference" parent="@style/Preference.Material">
<item name="android:layout">@layout/apn_preference_layout</item>
</style>
- <style name="SettingsSeekBarPreference" parent="Preference.SettingsBase">
+ <style name="SettingsSeekBarPreference" parent="@style/Preference.Material">
<item name="android:layout">@layout/preference_widget_seekbar_settings</item>
</style>
- <style name="SyncSwitchPreference" parent="Preference.SettingsBase">
+ <style name="SyncSwitchPreference" parent="@style/Preference.Material">
<item name="android:widgetLayout">@layout/preference_widget_sync_toggle</item>
</style>
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/data_usage_metered_prefs.xml b/res/xml/data_usage_metered_prefs.xml
index ef0faf2..9764ad3 100644
--- a/res/xml/data_usage_metered_prefs.xml
+++ b/res/xml/data_usage_metered_prefs.xml
@@ -14,8 +14,10 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/network_restrictions">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:key="data_usage_metered_prefs"
+ android:title="@string/network_restrictions">
<PreferenceCategory
android:key="mobile"
@@ -37,6 +39,7 @@
<com.android.settingslib.widget.FooterPreference
android:title="@string/data_usage_metered_body"
+ android:key="footer_preference"
android:selectable="false" />
</PreferenceScreen>
diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml
index a26136f..5219caa 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">
@@ -29,32 +29,37 @@
android:summaryOn="@string/date_time_auto_summaryOn"
android:summaryOff="@string/date_time_auto_summaryOff"
settings:useAdditionalSummary="true"
- settings:restrictedSwitchSummary="@string/enabled_by_admin" />
+ settings:restrictedSwitchSummary="@string/enabled_by_admin"
+ settings:userRestriction="no_config_date_time" />
- <Preference
+ <com.android.settingslib.RestrictedPreference
android:key="date"
android:title="@string/date_time_set_date"
- android:summary="@string/summary_placeholder" />
+ android:summary="@string/summary_placeholder"
+ settings:userRestriction="no_config_date_time" />
- <Preference
+ <com.android.settingslib.RestrictedPreference
android:key="time"
android:title="@string/date_time_set_time"
- android:summary="@string/summary_placeholder" />
+ android:summary="@string/summary_placeholder"
+ settings:userRestriction="no_config_date_time" />
</PreferenceCategory>
<PreferenceCategory
android:key="time_zone_preference_category">
- <SwitchPreference
+ <com.android.settingslib.RestrictedSwitchPreference
android:key="auto_zone"
android:title="@string/zone_auto"
android:summaryOn="@string/zone_auto_summaryOn"
- android:summaryOff="@string/zone_auto_summaryOff" />
+ android:summaryOff="@string/zone_auto_summaryOff"
+ settings:userRestriction="no_config_date_time" />
- <Preference
+ <com.android.settingslib.RestrictedPreference
android:fragment="com.android.settings.datetime.ZonePicker"
android:key="timezone"
android:title="@string/date_time_set_timezone"
- android:summary="GMT-8:00" />
+ android:summary="GMT-8:00"
+ settings:userRestriction="no_config_date_time" />
</PreferenceCategory>
<PreferenceCategory
diff --git a/res/xml/development_settings.xml b/res/xml/development_settings.xml
index 9857280..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">
@@ -177,6 +177,11 @@
android:title="@string/feature_flags_dashboard_title"
android:fragment="com.android.settings.development.featureflags.FeatureFlagsDashboard"/>
+ <SwitchPreference
+ android:key="enable_gpu_debug_layers"
+ android:title="@string/enable_gpu_debug_layers"
+ android:summary="@string/enable_gpu_debug_layers_summary"/>
+
</PreferenceCategory>
<PreferenceCategory android:key="debug_networking_category"
@@ -276,14 +281,6 @@
android:entries="@array/bluetooth_a2dp_codec_ldac_playback_quality_titles"
android:entryValues="@array/bluetooth_a2dp_codec_ldac_playback_quality_values" />
- <com.android.settings.development.PrivateDnsModeDialogPreference
- android:key="select_private_dns_configuration"
- android:title="@string/select_private_dns_configuration_title"
- android:dialogTitle="@string/select_private_dns_configuration_dialog_title"
- android:dialogLayout="@layout/private_dns_mode_dialog"
- android:positiveButtonText="@string/save"
- android:negativeButtonText="@string/cancel" />
-
</PreferenceCategory>
<PreferenceCategory android:key="debug_input_category"
diff --git a/res/xml/device_info_settings_v2.xml b/res/xml/device_info_settings_v2.xml
index 9a48e96..9110131 100644
--- a/res/xml/device_info_settings_v2.xml
+++ b/res/xml/device_info_settings_v2.xml
@@ -17,10 +17,9 @@
<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"
- settings:initialExpandedChildrenCount="6">
+ android:title="@string/about_settings">
<!-- Phone number -->
<Preference
@@ -34,6 +33,7 @@
android:key="sim_status"
android:order="10"
android:title="@string/sim_status_title"
+ settings:keywords="@string/keywords_sim_status"
android:summary="@string/summary_placeholder"/>
<!-- Model & hardware -->
@@ -41,6 +41,7 @@
android:key="device_model"
android:order="21"
android:title="@string/hardware_info"
+ settings:keywords="@string/keywords_model_and_hardware"
android:summary="@string/summary_placeholder"/>
<!-- IMEI -->
@@ -56,12 +57,20 @@
android:key="firmware_version"
android:order="32"
android:title="@string/firmware_version"
+ settings:keywords="@string/keywords_android_version"
+ android:summary="@string/summary_placeholder"/>
+
+ <!-- IMS registration -->
+ <Preference
+ android:key="ims_reg_state"
+ android:order="33"
+ android:title="@string/ims_reg_title"
android:summary="@string/summary_placeholder"/>
<!--IP address -->
<Preference
android:key="wifi_ip_address"
- android:order="33"
+ android:order="34"
android:title="@string/wifi_ip_address"
android:summary="@string/summary_placeholder"
settings:allowDividerAbove="true"/>
@@ -69,14 +78,14 @@
<!-- Wi-Fi MAC address -->
<Preference
android:key="wifi_mac_address"
- android:order="34"
+ android:order="35"
android:title="@string/status_wifi_mac_address"
android:summary="@string/summary_placeholder"/>
<!-- Bluetooth address -->
<Preference
android:key="bt_address"
- android:order="35"
+ android:order="36"
android:title="@string/status_bt_address"
android:summary="@string/summary_placeholder"/>
@@ -84,7 +93,7 @@
<!-- Legal information -->
<Preference
android:key="legal_container"
- android:order="36"
+ android:order="37"
android:title="@string/legal_information"
android:fragment="com.android.settings.LegalSettings"
settings:allowDividerAbove="true"/>
@@ -92,7 +101,7 @@
<!-- Regulatory labels -->
<Preference
android:key="regulatory_info"
- android:order="37"
+ android:order="38"
android:title="@string/regulatory_labels">
<intent android:action="android.settings.SHOW_REGULATORY_INFO"/>
</Preference>
@@ -100,15 +109,36 @@
<!-- Safety & regulatory manual -->
<Preference
android:key="safety_info"
- android:order="38"
+ android:order="39"
android:title="@string/safety_and_regulatory_info">
<intent android:action="android.settings.SHOW_SAFETY_AND_REGULATORY_INFO"/>
</Preference>
+ <!-- Manual -->
+ <Preference
+ android:key="manual"
+ android:order="40"
+ android:title="@string/manual">
+ <intent android:action="android.settings.SHOW_MANUAL"/>
+ </Preference>
+
+ <!-- Feedback on the device -->
+ <Preference
+ android:key="device_feedback"
+ android:order="41"
+ android:title="@string/device_feedback"/>
+
+ <!-- Device FCC equipment id -->
+ <Preference
+ android:key="fcc_equipment_id"
+ android:order="42"
+ android:title="@string/fcc_equipment_id"
+ android:summary="@string/summary_placeholder"/>
+
<!-- Build number -->
<Preference
android:key="build_number"
- android:order="39"
+ android:order="43"
android:title="@string/build_number"
android:summary="@string/summary_placeholder"
settings:allowDividerAbove="true"/>
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_mode.xml b/res/xml/location_mode.xml
index e6dc067..ac8e584 100644
--- a/res/xml/location_mode.xml
+++ b/res/xml/location_mode.xml
@@ -14,20 +14,22 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/location_mode_screen_title">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:key="location_mode_settings"
+ android:title="@string/location_mode_screen_title">
- <com.android.settings.widget.RadioButtonPreference
- android:key="high_accuracy"
- android:title="@string/location_mode_high_accuracy_title"
- android:summary="@string/location_mode_high_accuracy_description" />
- <com.android.settings.widget.RadioButtonPreference
- android:key="battery_saving"
- android:title="@string/location_mode_battery_saving_title"
- android:summary="@string/location_mode_battery_saving_description" />
- <com.android.settings.widget.RadioButtonPreference
- android:key="sensors_only"
- android:title="@string/location_mode_sensors_only_title"
- android:summary="@string/location_mode_sensors_only_description" />
+ <com.android.settings.widget.RadioButtonPreference
+ android:key="high_accuracy"
+ android:title="@string/location_mode_high_accuracy_title"
+ android:summary="@string/location_mode_high_accuracy_description" />
+ <com.android.settings.widget.RadioButtonPreference
+ android:key="battery_saving"
+ android:title="@string/location_mode_battery_saving_title"
+ android:summary="@string/location_mode_battery_saving_description" />
+ <com.android.settings.widget.RadioButtonPreference
+ android:key="sensors_only"
+ android:title="@string/location_mode_sensors_only_title"
+ android:summary="@string/location_mode_sensors_only_description" />
</PreferenceScreen>
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/screen_pinning_settings.xml b/res/xml/screen_pinning_settings.xml
index 229c4ea..f27e4aa 100644
--- a/res/xml/screen_pinning_settings.xml
+++ b/res/xml/screen_pinning_settings.xml
@@ -14,11 +14,13 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/screen_pinning_title">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:key="screen_pinning_settings_screen"
+ android:title="@string/screen_pinning_title">
- <SwitchPreference
- android:key="use_screen_lock"
- android:title="@string/screen_pinning_unlock_none" />
+ <SwitchPreference
+ android:key="use_screen_lock"
+ android:title="@string/screen_pinning_unlock_none" />
</PreferenceScreen>
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_misc.xml b/res/xml/security_settings_misc.xml
index bc737b0..730686c 100644
--- a/res/xml/security_settings_misc.xml
+++ b/res/xml/security_settings_misc.xml
@@ -75,7 +75,7 @@
android:key="screen_pinning_settings"
android:title="@string/screen_pinning_title"
android:summary="@string/switch_off_text"
- android:fragment="com.android.settings.ScreenPinningSettings"/>
+ android:fragment="com.android.settings.security.ScreenPinningSettings"/>
<Preference android:key="security_misc_usage_access"
android:title="@string/usage_access_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/CredentialStorage.java b/src/com/android/settings/CredentialStorage.java
index e5d40b7..ffbd2ce 100644
--- a/src/com/android/settings/CredentialStorage.java
+++ b/src/com/android/settings/CredentialStorage.java
@@ -275,6 +275,16 @@
Log.e(TAG, "Failed to install " + key + " as uid " + uid);
return;
}
+ // The key was prepended USER_PRIVATE_KEY by the CredentialHelper. However,
+ // KeyChain internally uses the raw alias name and only prepends USER_PRIVATE_KEY
+ // to the key name when interfacing with KeyStore.
+ // This is generally a symptom of CredentialStorage and CredentialHelper relying
+ // on internal implementation details of KeyChain and imitating its functionality
+ // rather than delegating to KeyChain for the certificate installation.
+ if (uid == Process.SYSTEM_UID || uid == KeyStore.UID_SELF) {
+ new MarkKeyAsUserSelectable(
+ key.replaceFirst("^" + Credentials.USER_PRIVATE_KEY, "")).execute();
+ }
}
int flags = KeyStore.FLAG_NONE;
@@ -391,6 +401,33 @@
}
/**
+ * Background task to mark a given key alias as user-selectable, so that
+ * it can be selected by users from the Certificate Selection prompt.
+ */
+ private class MarkKeyAsUserSelectable extends AsyncTask<Void, Void, Boolean> {
+ final String mAlias;
+
+ public MarkKeyAsUserSelectable(String alias) {
+ mAlias = alias;
+ }
+
+ @Override
+ protected Boolean doInBackground(Void... unused) {
+ try (KeyChainConnection keyChainConnection = KeyChain.bind(CredentialStorage.this)) {
+ keyChainConnection.getService().setUserSelectable(mAlias, true);
+ return true;
+ } catch (RemoteException e) {
+ Log.w(TAG, "Failed to mark key " + mAlias + " as user-selectable.");
+ return false;
+ } catch (InterruptedException e) {
+ Log.w(TAG, "Failed to mark key " + mAlias + " as user-selectable.");
+ Thread.currentThread().interrupt();
+ return false;
+ }
+ }
+ }
+
+ /**
* Check that the caller is either certinstaller or Settings running in a profile of this user.
*/
private boolean checkCallerIsCertInstallerOrSelfInProfile() {
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index 6c6c9e9..c791775 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -22,8 +22,11 @@
import android.app.Fragment;
import android.content.Context;
import android.content.Intent;
+import android.os.Bundle;
import android.provider.SearchIndexableResource;
+import android.telephony.TelephonyManager;
import android.util.FeatureFlagUtils;
+import android.support.annotation.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.dashboard.DashboardFragment;
@@ -35,6 +38,7 @@
import com.android.settings.deviceinfo.FccEquipmentIdPreferenceController;
import com.android.settings.deviceinfo.FeedbackPreferenceController;
import com.android.settings.deviceinfo.FirmwareVersionPreferenceController;
+import com.android.settings.deviceinfo.ImsStatusPreferenceController;
import com.android.settings.deviceinfo.IpAddressPreferenceController;
import com.android.settings.deviceinfo.KernelVersionPreferenceController;
import com.android.settings.deviceinfo.ManualPreferenceController;
@@ -61,6 +65,11 @@
private static final String KEY_LEGAL_CONTAINER = "legal_container";
+ @VisibleForTesting
+ static final int SIM_PREFERENCES_COUNT = 3;
+ @VisibleForTesting
+ static final int NON_SIM_PREFERENCES_COUNT = 2;
+
@Override
public int getMetricsCategory() {
return MetricsEvent.DEVICEINFO;
@@ -72,6 +81,21 @@
}
@Override
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
+ 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);
+ final int numberOfChildren = Math.max(SIM_PREFERENCES_COUNT,
+ SIM_PREFERENCES_COUNT * telephonyManager.getPhoneCount())
+ + NON_SIM_PREFERENCES_COUNT;
+ getPreferenceScreen().setInitialExpandedChildrenCount(numberOfChildren);
+ }
+ }
+
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
final BuildNumberPreferenceController buildNumberPreferenceController =
getPreferenceController(BuildNumberPreferenceController.class);
@@ -88,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;
}
@@ -125,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
@@ -139,6 +163,8 @@
controllers.add(new FirmwareVersionPreferenceControllerV2(context, fragment));
+ controllers.add(new ImsStatusPreferenceController(context, lifecycle));
+
controllers.add(new IpAddressPreferenceController(context, lifecycle));
controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
@@ -149,6 +175,12 @@
controllers.add(new SafetyInfoPreferenceController(context));
+ controllers.add(new ManualPreferenceController(context));
+
+ controllers.add(new FeedbackPreferenceController(fragment, context));
+
+ controllers.add(new FccEquipmentIdPreferenceController(context));
+
controllers.add(
new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
@@ -181,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..193c2b3 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;
@@ -826,17 +835,12 @@
|| somethingChanged;
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
+ && !um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)
+ && !Utils.isMonkeyRunning();
+
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/AppInfoWithHeader.java b/src/com/android/settings/applications/AppInfoWithHeader.java
index 3df81c7..af0cf5b 100644
--- a/src/com/android/settings/applications/AppInfoWithHeader.java
+++ b/src/com/android/settings/applications/AppInfoWithHeader.java
@@ -16,6 +16,8 @@
package com.android.settings.applications;
+import static com.android.settings.widget.EntityHeaderController.ActionType;
+
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.preference.Preference;
@@ -25,8 +27,6 @@
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.applications.AppUtils;
-import static com.android.settings.widget.EntityHeaderController.ActionType;
-
public abstract class AppInfoWithHeader extends AppInfoBase {
private boolean mCreated;
@@ -44,7 +44,7 @@
final Preference pref = EntityHeaderController
.newInstance(activity, this, null /* header */)
.setRecyclerView(getListView(), getLifecycle())
- .setIcon(IconDrawableFactory.newInstance(activity)
+ .setIcon(IconDrawableFactory.newInstance(getContext())
.getBadgedIcon(mPackageInfo.applicationInfo))
.setLabel(mPackageInfo.applicationInfo.loadLabel(mPm))
.setSummary(mPackageInfo)
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/dashboard/SiteMapManager.java b/src/com/android/settings/dashboard/SiteMapManager.java
index facd9ed..50d7a18 100644
--- a/src/com/android/settings/dashboard/SiteMapManager.java
+++ b/src/com/android/settings/dashboard/SiteMapManager.java
@@ -16,23 +16,26 @@
package com.android.settings.dashboard;
+import static android.provider.SearchIndexablesContract.SITE_MAP_COLUMNS;
import static com.android.settings.dashboard.DashboardFragmentRegistry.CATEGORY_KEY_TO_PARENT_MAP;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
+import android.provider.SearchIndexablesContract.SiteMapColumns;
import android.support.annotation.VisibleForTesting;
import android.support.annotation.WorkerThread;
import android.support.v4.util.ArrayMap;
import android.text.TextUtils;
import android.util.Log;
+
import com.android.settings.SettingsActivity;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.search.IndexDatabaseHelper;
import com.android.settings.search.IndexDatabaseHelper.IndexColumns;
-import com.android.settings.search.IndexDatabaseHelper.SiteMapColumns;
import com.android.settingslib.drawer.DashboardCategory;
import com.android.settingslib.drawer.Tile;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -47,14 +50,6 @@
private static final String TAG = "SiteMapManager";
private static final boolean DEBUG_TIMING = false;
- @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
- public static final String[] SITE_MAP_COLUMNS = {
- SiteMapColumns.PARENT_CLASS,
- SiteMapColumns.PARENT_TITLE,
- SiteMapColumns.CHILD_CLASS,
- SiteMapColumns.CHILD_TITLE
- };
-
private static final String[] CLASS_TO_SCREEN_TITLE_COLUMNS = {
IndexColumns.CLASS_NAME,
IndexColumns.SCREEN_TITLE,
@@ -108,7 +103,7 @@
* 2. IA: We know from {@link DashboardFeatureProvider} which page can be dynamically
* injected to where.
*/
- @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
+ @VisibleForTesting
@WorkerThread
synchronized void init(Context context) {
if (mInitialized) {
diff --git a/src/com/android/settings/datausage/DataUsageMeteredSettings.java b/src/com/android/settings/datausage/DataUsageMeteredSettings.java
index 0afb894..8bc7e04 100644
--- a/src/com/android/settings/datausage/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/datausage/DataUsageMeteredSettings.java
@@ -14,27 +14,26 @@
package com.android.settings.datausage;
-import static android.net.wifi.WifiInfo.removeDoubleQuotes;
-
import android.app.backup.BackupManager;
import android.content.Context;
-import android.content.res.Resources;
import android.net.NetworkPolicyManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
+import android.provider.SearchIndexableResource;
import android.support.v7.preference.DropDownPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.text.TextUtils;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import com.android.settings.search.SearchIndexableRaw;
import com.android.settingslib.NetworkPolicyEditor;
-import java.util.ArrayList;
+
+import java.util.Arrays;
import java.util.List;
/**
@@ -134,49 +133,11 @@
public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
- public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
- final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
- final Resources res = context.getResources();
-
- // Add fragment title
- SearchIndexableRaw data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.data_usage_menu_metered);
- data.screenTitle = res.getString(R.string.data_usage_menu_metered);
- result.add(data);
-
- // Body
- data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.data_usage_metered_body);
- data.screenTitle = res.getString(R.string.data_usage_menu_metered);
- result.add(data);
-
- // Wi-Fi networks category
- data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.data_usage_metered_wifi);
- data.screenTitle = res.getString(R.string.data_usage_menu_metered);
- result.add(data);
-
- final WifiManager wifiManager =
- (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
- if (DataUsageUtils.hasWifiRadio(context) && wifiManager.isWifiEnabled()) {
- for (WifiConfiguration config : wifiManager.getConfiguredNetworks()) {
- if (config.SSID != null) {
- final String networkId = config.SSID;
-
- data = new SearchIndexableRaw(context);
- data.title = removeDoubleQuotes(networkId);
- data.screenTitle = res.getString(R.string.data_usage_menu_metered);
- result.add(data);
- }
- }
- } else {
- data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.data_usage_metered_wifi_disabled);
- data.screenTitle = res.getString(R.string.data_usage_menu_metered);
- result.add(data);
- }
-
- return result;
+ public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+ boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.data_usage_metered_prefs;
+ return Arrays.asList(sir);
}
@Override
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/datetime/AutoTimePreferenceController.java b/src/com/android/settings/datetime/AutoTimePreferenceController.java
index 0b70f45..3da712a 100644
--- a/src/com/android/settings/datetime/AutoTimePreferenceController.java
+++ b/src/com/android/settings/datetime/AutoTimePreferenceController.java
@@ -46,8 +46,10 @@
if (!(preference instanceof RestrictedSwitchPreference)) {
return;
}
- ((RestrictedSwitchPreference) preference).setDisabledByAdmin(
- getEnforcedAdminProperty());
+ if (!((RestrictedSwitchPreference) preference).isDisabledByAdmin()) {
+ ((RestrictedSwitchPreference) preference).setDisabledByAdmin(
+ getEnforcedAdminProperty());
+ }
((RestrictedSwitchPreference) preference).setChecked(isEnabled());
}
diff --git a/src/com/android/settings/datetime/DatePreferenceController.java b/src/com/android/settings/datetime/DatePreferenceController.java
index 9582e9e..d2a8686 100644
--- a/src/com/android/settings/datetime/DatePreferenceController.java
+++ b/src/com/android/settings/datetime/DatePreferenceController.java
@@ -27,6 +27,7 @@
import android.widget.DatePicker;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.Calendar;
@@ -59,9 +60,14 @@
@Override
public void updateState(Preference preference) {
+ if (!(preference instanceof RestrictedPreference)) {
+ return;
+ }
final Calendar now = Calendar.getInstance();
preference.setSummary(DateFormat.getLongDateFormat(mContext).format(now.getTime()));
- preference.setEnabled(!mAutoTimePreferenceController.isEnabled());
+ if (!((RestrictedPreference) preference).isDisabledByAdmin()) {
+ preference.setEnabled(!mAutoTimePreferenceController.isEnabled());
+ }
}
@Override
diff --git a/src/com/android/settings/datetime/TimePreferenceController.java b/src/com/android/settings/datetime/TimePreferenceController.java
index 9bb5689..684ad0c 100644
--- a/src/com/android/settings/datetime/TimePreferenceController.java
+++ b/src/com/android/settings/datetime/TimePreferenceController.java
@@ -26,6 +26,7 @@
import android.widget.TimePicker;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.Calendar;
@@ -60,9 +61,14 @@
@Override
public void updateState(Preference preference) {
+ if (!(preference instanceof RestrictedPreference)) {
+ return;
+ }
final Calendar now = Calendar.getInstance();
preference.setSummary(DateFormat.getTimeFormat(mContext).format(now.getTime()));
- preference.setEnabled(!mAutoTimePreferenceController.isEnabled());
+ if (!((RestrictedPreference) preference).isDisabledByAdmin()) {
+ preference.setEnabled(!mAutoTimePreferenceController.isEnabled());
+ }
}
@Override
diff --git a/src/com/android/settings/datetime/TimeZonePreferenceController.java b/src/com/android/settings/datetime/TimeZonePreferenceController.java
index 987132b..435b1fe 100644
--- a/src/com/android/settings/datetime/TimeZonePreferenceController.java
+++ b/src/com/android/settings/datetime/TimeZonePreferenceController.java
@@ -21,6 +21,7 @@
import android.support.v7.preference.Preference;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.datetime.ZoneGetter;
@@ -41,8 +42,13 @@
@Override
public void updateState(Preference preference) {
+ if (!(preference instanceof RestrictedPreference)) {
+ return;
+ }
preference.setSummary(getTimeZoneOffsetAndName());
- preference.setEnabled(!mAutoTimeZonePreferenceController.isEnabled());
+ if( !((RestrictedPreference) preference).isDisabledByAdmin()) {
+ preference.setEnabled(!mAutoTimeZonePreferenceController.isEnabled());
+ }
}
@Override
diff --git a/src/com/android/settings/development/BugReportInPowerPreferenceController.java b/src/com/android/settings/development/BugReportInPowerPreferenceController.java
index 2c448f5..31b618b 100644
--- a/src/com/android/settings/development/BugReportInPowerPreferenceController.java
+++ b/src/com/android/settings/development/BugReportInPowerPreferenceController.java
@@ -1,5 +1,5 @@
/*
- * 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.
@@ -21,54 +21,37 @@
import android.content.pm.PackageManager;
import android.os.UserManager;
import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
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;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
-/**
- * deprecated in favor of {@link BugReportInPowerPreferenceControllerV2}
- */
-@Deprecated
-public class BugReportInPowerPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
+public class BugReportInPowerPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String KEY_BUGREPORT_IN_POWER = "bugreport_in_power";
- private UserManager mUserManager;
+ @VisibleForTesting
+ static final ComponentName COMPONENT_NAME = new ComponentName("com.android.shell",
+ "com.android.shell.BugreportStorageProvider");
+ @VisibleForTesting
+ static int SETTING_VALUE_ON = 1;
+ @VisibleForTesting
+ static int SETTING_VALUE_OFF = 0;
+
+ private final PackageManagerWrapper mPackageManager;
+ private final 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;
+ mPackageManager = new PackageManagerWrapper(context.getPackageManager());
}
@Override
@@ -77,49 +60,50 @@
}
@Override
+ public String getPreferenceKey() {
+ return KEY_BUGREPORT_IN_POWER;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (SwitchPreference) screen.findPreference(KEY_BUGREPORT_IN_POWER);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean isEnabled = (Boolean) newValue;
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Global.BUGREPORT_IN_POWER_MENU,
+ isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+ setBugreportStorageProviderStatus(isEnabled);
+ return true;
+ }
+
+ @Override
public void updateState(Preference preference) {
- updatePreference();
+ final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
+ mPreference.setChecked(mode != SETTING_VALUE_OFF);
}
- public void enablePreference(boolean enabled) {
- if (isAvailable()) {
- mPreference.setEnabled(enabled);
- }
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ // no-op because this preference can never be disabled
}
- public void resetPreference() {
- if (mPreference.isChecked()) {
- mPreference.setChecked(false);
- handlePreferenceTreeClick(mPreference);
- }
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
+ setBugreportStorageProviderStatus(false);
+ mPreference.setChecked(false);
}
- 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;
+ private void setBugreportStorageProviderStatus(boolean isEnabled) {
+ mPackageManager.setComponentEnabledSetting(COMPONENT_NAME,
+ isEnabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+ : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
}
-
- 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/BugReportInPowerPreferenceControllerV2.java b/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2.java
deleted file mode 100644
index 0ab826f..0000000
--- a/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2.java
+++ /dev/null
@@ -1,109 +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.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.support.annotation.VisibleForTesting;
-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.development.DeveloperOptionsPreferenceController;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-public class BugReportInPowerPreferenceControllerV2 extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
- PreferenceControllerMixin {
-
- private static final String KEY_BUGREPORT_IN_POWER = "bugreport_in_power";
-
- @VisibleForTesting
- static final ComponentName COMPONENT_NAME = new ComponentName("com.android.shell",
- "com.android.shell.BugreportStorageProvider");
- @VisibleForTesting
- static int SETTING_VALUE_ON = 1;
- @VisibleForTesting
- static int SETTING_VALUE_OFF = 0;
-
- private final PackageManagerWrapper mPackageManager;
- private final UserManager mUserManager;
- private SwitchPreference mPreference;
-
- public BugReportInPowerPreferenceControllerV2(Context context) {
- super(context);
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- mPackageManager = new PackageManagerWrapper(context.getPackageManager());
- }
-
- @Override
- public boolean isAvailable() {
- return !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_BUGREPORT_IN_POWER;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- mPreference = (SwitchPreference) screen.findPreference(KEY_BUGREPORT_IN_POWER);
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isEnabled = (Boolean) newValue;
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU,
- isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
- setBugreportStorageProviderStatus(isEnabled);
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
- mPreference.setChecked(mode != SETTING_VALUE_OFF);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- // no-op because this preference can never be disabled
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
- setBugreportStorageProviderStatus(false);
- mPreference.setChecked(false);
- }
-
- private void setBugreportStorageProviderStatus(boolean isEnabled) {
- mPackageManager.setComponentEnabledSetting(COMPONENT_NAME,
- isEnabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
- : PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
- }
-}
diff --git a/src/com/android/settings/development/BugReportPreferenceController.java b/src/com/android/settings/development/BugReportPreferenceController.java
index c05dd26..ac2ae0d 100644
--- a/src/com/android/settings/development/BugReportPreferenceController.java
+++ b/src/com/android/settings/development/BugReportPreferenceController.java
@@ -18,51 +18,30 @@
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;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-/**
- * deprecated in favor of {@link BugReportPreferenceControllerV2}
- */
-@Deprecated
-public class BugReportPreferenceController extends AbstractPreferenceController implements
+public class BugReportPreferenceController extends DeveloperOptionsPreferenceController implements
PreferenceControllerMixin {
private static final String KEY_BUGREPORT = "bugreport";
- private UserManager mUserManager;
- private Preference mPreference;
+ private final UserManager mUserManager;
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);
- }
+ @Override
+ public String getPreferenceKey() {
+ return KEY_BUGREPORT;
}
-
}
diff --git a/src/com/android/settings/development/BugReportPreferenceControllerV2.java b/src/com/android/settings/development/BugReportPreferenceControllerV2.java
deleted file mode 100644
index 5876f84..0000000
--- a/src/com/android/settings/development/BugReportPreferenceControllerV2.java
+++ /dev/null
@@ -1,47 +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 com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-
-public class BugReportPreferenceControllerV2 extends DeveloperOptionsPreferenceController implements
- PreferenceControllerMixin {
-
- private static final String KEY_BUGREPORT = "bugreport";
-
- private final UserManager mUserManager;
-
- public BugReportPreferenceControllerV2(Context context) {
- super(context);
-
- mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- }
-
- @Override
- public boolean isAvailable() {
- return !mUserManager.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_BUGREPORT;
- }
-}
diff --git a/src/com/android/settings/development/CameraLaserSensorPreferenceController.java b/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
index 3f47b88..41a7983 100644
--- a/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
+++ b/src/com/android/settings/development/CameraLaserSensorPreferenceController.java
@@ -14,6 +14,7 @@
* limitations under the License.
*/
+
package com.android.settings.development;
import android.content.Context;
@@ -21,19 +22,16 @@
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
-import android.widget.Toast;
+import android.text.TextUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-/**
- * deprecated in favor of {@link CameraLaserSensorPreferenceControllerV2}
- */
-@Deprecated
-public class CameraLaserSensorPreferenceController extends AbstractPreferenceController
- implements PreferenceControllerMixin {
+public class CameraLaserSensorPreferenceController extends
+ DeveloperOptionsPreferenceController implements
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String KEY_CAMERA_LASER_SENSOR_SWITCH = "camera_laser_sensor_switch";
@VisibleForTesting
@@ -44,6 +42,12 @@
static final int ENABLED = 0;
@VisibleForTesting
static final int DISABLED = 2;
+ @VisibleForTesting
+ static final String USERDEBUG_BUILD = "userdebug";
+ @VisibleForTesting
+ static final String ENG_BUILD = "eng";
+ @VisibleForTesting
+ static final String USER_BUILD = "user";
private SwitchPreference mPreference;
@@ -52,10 +56,11 @@
}
@Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mPreference = (SwitchPreference) screen.findPreference(KEY_CAMERA_LASER_SENSOR_SWITCH);
- updatePreference();
+ public boolean isAvailable() {
+ final String buildType = SystemProperties.get(BUILD_TYPE);
+ return mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor) &&
+ (TextUtils.equals(USERDEBUG_BUILD, buildType) || TextUtils.equals(ENG_BUILD,
+ buildType));
}
@Override
@@ -64,45 +69,42 @@
}
@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"));
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean isEnabled = (Boolean) newValue;
+ String value = Integer.toString(isEnabled ? ENABLED : DISABLED);
+ SystemProperties.set(PROPERTY_CAMERA_LASER_SENSOR, value);
+ return true;
}
@Override
public void updateState(Preference preference) {
- updatePreference();
+ final boolean enabled = isLaserSensorEnabled();
+ mPreference.setChecked(enabled);
}
@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;
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
}
- 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;
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ SystemProperties.set(PROPERTY_CAMERA_LASER_SENSOR, Integer.toString(DISABLED));
+ mPreference.setChecked(false);
+ mPreference.setEnabled(false);
}
private boolean isLaserSensorEnabled() {
- String prop = SystemProperties.get(PROPERTY_CAMERA_LASER_SENSOR, Integer.toString(ENABLED));
- return prop.equals(Integer.toString(ENABLED));
+ final String prop = SystemProperties.get(PROPERTY_CAMERA_LASER_SENSOR,
+ Integer.toString(ENABLED));
+ return TextUtils.equals(Integer.toString(ENABLED), prop);
}
+
}
diff --git a/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java b/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java
deleted file mode 100644
index 43943ac..0000000
--- a/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java
+++ /dev/null
@@ -1,110 +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.text.TextUtils;
-
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.R;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-
-public class CameraLaserSensorPreferenceControllerV2 extends
- DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener, 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;
- @VisibleForTesting
- static final String USERDEBUG_BUILD = "userdebug";
- @VisibleForTesting
- static final String ENG_BUILD = "eng";
- @VisibleForTesting
- static final String USER_BUILD = "user";
-
- private SwitchPreference mPreference;
-
- public CameraLaserSensorPreferenceControllerV2(Context context) {
- super(context);
- }
-
- @Override
- public boolean isAvailable() {
- final String buildType = SystemProperties.get(BUILD_TYPE);
- return mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor) &&
- (TextUtils.equals(USERDEBUG_BUILD, buildType) || TextUtils.equals(ENG_BUILD,
- buildType));
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_CAMERA_LASER_SENSOR_SWITCH;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isEnabled = (Boolean) newValue;
- String value = Integer.toString(isEnabled ? ENABLED : DISABLED);
- SystemProperties.set(PROPERTY_CAMERA_LASER_SENSOR, value);
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- final boolean enabled = isLaserSensorEnabled();
- mPreference.setChecked(enabled);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- mPreference.setEnabled(true);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- SystemProperties.set(PROPERTY_CAMERA_LASER_SENSOR, Integer.toString(DISABLED));
- mPreference.setChecked(false);
- mPreference.setEnabled(false);
- }
-
- private boolean isLaserSensorEnabled() {
- final String prop = SystemProperties.get(PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(ENABLED));
- return TextUtils.equals(Integer.toString(ENABLED), prop);
- }
-
-}
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
index e481809..075af2b 100644
--- a/src/com/android/settings/development/ConnectivityMonitorPreferenceController.java
+++ b/src/com/android/settings/development/ConnectivityMonitorPreferenceController.java
@@ -21,18 +21,16 @@
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
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;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-/**
- * deprecated in favor of {@link ConnectivityMonitorPreferenceControllerV2}
- */
-@Deprecated
-public class ConnectivityMonitorPreferenceController extends AbstractPreferenceController implements
+public class ConnectivityMonitorPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
PreferenceControllerMixin {
private static final String KEY_CONNECTIVITY_MONITOR_SWITCH = "connectivity_monitor_switch";
@@ -50,6 +48,11 @@
@VisibleForTesting
static final String USER_DISABLED_STATUS = "user_disabled";
+ @VisibleForTesting
+ static final String USERDEBUG_BUILD = "userdebug";
+ @VisibleForTesting
+ static final String ENG_BUILD = "eng";
+
private SwitchPreference mPreference;
public ConnectivityMonitorPreferenceController(Context context) {
@@ -59,10 +62,8 @@
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- if (isAvailable()) {
- mPreference = (SwitchPreference) screen.findPreference(KEY_CONNECTIVITY_MONITOR_SWITCH);
- mPreference.setChecked(isConnectivityMonitorEnabled());
- }
+
+ mPreference = (SwitchPreference) screen.findPreference(KEY_CONNECTIVITY_MONITOR_SWITCH);
}
@Override
@@ -72,48 +73,44 @@
@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"));
+ final String buildType = SystemProperties.get(BUILD_TYPE);
+ return mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor)
+ && (TextUtils.equals(buildType, USERDEBUG_BUILD)
+ || TextUtils.equals(buildType, ENG_BUILD));
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean isEnabled = (Boolean) newValue;
+ SystemProperties.set(PROPERTY_CONNECTIVITY_MONITOR,
+ isEnabled ? USER_ENABLED_STATUS : USER_DISABLED_STATUS);
+ Toast.makeText(mContext, R.string.connectivity_monitor_toast,
+ Toast.LENGTH_LONG).show();
+ return true;
}
@Override
public void updateState(Preference preference) {
- updatePreference();
+ final boolean enabled = isConnectivityMonitorEnabled();
+ mPreference.setChecked(enabled);
}
@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;
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
}
- 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;
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ SystemProperties.set(PROPERTY_CONNECTIVITY_MONITOR, USER_DISABLED_STATUS);
+ mPreference.setChecked(false);
+ mPreference.setEnabled(false);
}
private boolean isConnectivityMonitorEnabled() {
final String cmStatus = SystemProperties.get(PROPERTY_CONNECTIVITY_MONITOR,
DISABLED_STATUS);
- return ENABLED_STATUS.equals(cmStatus) || USER_ENABLED_STATUS.equals(cmStatus);
+ return TextUtils.equals(ENABLED_STATUS, cmStatus) || TextUtils.equals(USER_ENABLED_STATUS,
+ cmStatus);
}
-
}
diff --git a/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java b/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java
deleted file mode 100644
index fdcecfb..0000000
--- a/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java
+++ /dev/null
@@ -1,116 +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.text.TextUtils;
-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.development.DeveloperOptionsPreferenceController;
-
-public class ConnectivityMonitorPreferenceControllerV2 extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
- 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";
-
- @VisibleForTesting
- static final String USERDEBUG_BUILD = "userdebug";
- @VisibleForTesting
- static final String ENG_BUILD = "eng";
-
- private SwitchPreference mPreference;
-
- public ConnectivityMonitorPreferenceControllerV2(Context context) {
- super(context);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- mPreference = (SwitchPreference) screen.findPreference(KEY_CONNECTIVITY_MONITOR_SWITCH);
- }
-
- @Override
- public String getPreferenceKey() {
- return KEY_CONNECTIVITY_MONITOR_SWITCH;
- }
-
- @Override
- public boolean isAvailable() {
- final String buildType = SystemProperties.get(BUILD_TYPE);
- return mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor)
- && (TextUtils.equals(buildType, USERDEBUG_BUILD)
- || TextUtils.equals(buildType, ENG_BUILD));
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isEnabled = (Boolean) newValue;
- SystemProperties.set(PROPERTY_CONNECTIVITY_MONITOR,
- isEnabled ? USER_ENABLED_STATUS : USER_DISABLED_STATUS);
- Toast.makeText(mContext, R.string.connectivity_monitor_toast,
- Toast.LENGTH_LONG).show();
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- final boolean enabled = isConnectivityMonitorEnabled();
- mPreference.setChecked(enabled);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- mPreference.setEnabled(true);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- SystemProperties.set(PROPERTY_CONNECTIVITY_MONITOR, USER_DISABLED_STATUS);
- mPreference.setChecked(false);
- mPreference.setEnabled(false);
- }
-
- private boolean isConnectivityMonitorEnabled() {
- final String cmStatus = SystemProperties.get(PROPERTY_CONNECTIVITY_MONITOR,
- DISABLED_STATUS);
- return TextUtils.equals(ENABLED_STATUS, cmStatus) || TextUtils.equals(USER_ENABLED_STATUS,
- cmStatus);
- }
-}
diff --git a/src/com/android/settings/development/DevelopmentSettings.java b/src/com/android/settings/development/DevelopmentSettings.java
deleted file mode 100644
index 4745023..0000000
--- a/src/com/android/settings/development/DevelopmentSettings.java
+++ /dev/null
@@ -1,2656 +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 PRIVATE_DNS_PREF_KEY = "select_private_dns_configuration";
-
- 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();
-
- updatePrivateDnsSummary();
-
- 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();
- updatePrivateDnsSummary();
- }
-
- 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 updatePrivateDnsSummary() {
- final String summary = PrivateDnsModeDialogPreference.getSummaryStringForModeFromSettings(
- getActivity().getContentResolver(), getActivity().getResources());
- final Preference pref = findPreference(PRIVATE_DNS_PREF_KEY);
- pref.setSummary(summary);
- }
-
- 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/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 025e35e..237f9ba 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -257,15 +257,15 @@
@Override
public void onDisableLogPersistDialogConfirmed() {
- final LogPersistPreferenceControllerV2 controller = getDevelopmentOptionsController(
- LogPersistPreferenceControllerV2.class);
+ final LogPersistPreferenceController controller = getDevelopmentOptionsController(
+ LogPersistPreferenceController.class);
controller.onDisableLogPersistDialogConfirmed();
}
@Override
public void onDisableLogPersistDialogRejected() {
- final LogPersistPreferenceControllerV2 controller = getDevelopmentOptionsController(
- LogPersistPreferenceControllerV2.class);
+ final LogPersistPreferenceController controller = getDevelopmentOptionsController(
+ LogPersistPreferenceController.class);
controller.onDisableLogPersistDialogRejected();
}
@@ -298,12 +298,15 @@
@Override
protected int getPreferenceScreenResId() {
- Log.d(TAG, "Creating pref screen");
- return R.xml.development_settings;
+ return Utils.isMonkeyRunning()? R.xml.placeholder_prefs : R.xml.development_settings;
}
@Override
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ if (Utils.isMonkeyRunning()) {
+ mPreferenceControllers = new ArrayList<>();
+ return null;
+ }
mPreferenceControllers = buildPreferenceControllers(context, getActivity(), getLifecycle(),
this /* devOptionsDashboardFragment */,
new BluetoothA2dpConfigStore());
@@ -326,6 +329,9 @@
}
private void enableDeveloperOptions() {
+ if (Utils.isMonkeyRunning()) {
+ return;
+ }
DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), true);
for (AbstractPreferenceController controller : mPreferenceControllers) {
if (controller instanceof DeveloperOptionsPreferenceController) {
@@ -335,6 +341,9 @@
}
private void disableDeveloperOptions() {
+ if (Utils.isMonkeyRunning()) {
+ return;
+ }
DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), false);
final SystemPropPoker poker = SystemPropPoker.getInstance();
poker.blockPokes();
@@ -362,7 +371,7 @@
BluetoothA2dpConfigStore bluetoothA2dpConfigStore) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(new MemoryUsagePreferenceController(context));
- controllers.add(new BugReportPreferenceControllerV2(context));
+ controllers.add(new BugReportPreferenceController(context));
controllers.add(new LocalBackupPasswordPreferenceController(context));
controllers.add(new StayAwakePreferenceController(context, lifecycle));
controllers.add(new HdcpCheckingPreferenceController(context));
@@ -370,22 +379,23 @@
controllers.add(new OemUnlockPreferenceController(context, activity, fragment));
controllers.add(new FileEncryptionPreferenceController(context));
controllers.add(new PictureColorModePreferenceController(context, lifecycle));
- controllers.add(new WebViewAppPreferenceControllerV2(context));
+ controllers.add(new WebViewAppPreferenceController(context));
controllers.add(new CoolColorTemperaturePreferenceController(context));
controllers.add(new DisableAutomaticUpdatesPreferenceController(context));
controllers.add(new AdbPreferenceController(context, fragment));
controllers.add(new ClearAdbKeysPreferenceController(context, fragment));
controllers.add(new LocalTerminalPreferenceController(context));
- controllers.add(new BugReportInPowerPreferenceControllerV2(context));
+ controllers.add(new BugReportInPowerPreferenceController(context));
controllers.add(new MockLocationAppPreferenceController(context, fragment));
controllers.add(new DebugViewAttributesPreferenceController(context));
controllers.add(new SelectDebugAppPreferenceController(context, fragment));
controllers.add(new WaitForDebuggerPreferenceController(context));
- controllers.add(new VerifyAppsOverUsbPreferenceControllerV2(context));
- controllers.add(new LogdSizePreferenceControllerV2(context));
- controllers.add(new LogPersistPreferenceControllerV2(context, fragment, lifecycle));
- controllers.add(new ConnectivityMonitorPreferenceControllerV2(context));
- controllers.add(new CameraLaserSensorPreferenceControllerV2(context));
+ controllers.add(new EnableGpuDebugLayersPreferenceController(context));
+ controllers.add(new VerifyAppsOverUsbPreferenceController(context));
+ controllers.add(new LogdSizePreferenceController(context));
+ controllers.add(new LogPersistPreferenceController(context, fragment, lifecycle));
+ controllers.add(new ConnectivityMonitorPreferenceController(context));
+ controllers.add(new CameraLaserSensorPreferenceController(context));
controllers.add(new WifiDisplayCertificationPreferenceController(context));
controllers.add(new WifiVerboseLoggingPreferenceController(context));
controllers.add(new WifiAggressiveHandoverPreferenceController(context));
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/EnableGpuDebugLayersPreferenceController.java b/src/com/android/settings/development/EnableGpuDebugLayersPreferenceController.java
new file mode 100644
index 0000000..9cea8c8
--- /dev/null
+++ b/src/com/android/settings/development/EnableGpuDebugLayersPreferenceController.java
@@ -0,0 +1,86 @@
+/*
+ * 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.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+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.development.DeveloperOptionsPreferenceController;
+
+public class EnableGpuDebugLayersPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String ENABLE_GPU_DEBUG_LAYERS_KEY = "enable_gpu_debug_layers";
+
+ @VisibleForTesting
+ static final int SETTING_VALUE_ON = 1;
+ @VisibleForTesting
+ static final int SETTING_VALUE_OFF = 0;
+
+ private SwitchPreference mPreference;
+
+ public EnableGpuDebugLayersPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return ENABLE_GPU_DEBUG_LAYERS_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean isEnabled = (Boolean) newValue;
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS,
+ isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ final int enableGpuDebugLayersMode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, SETTING_VALUE_OFF);
+ mPreference.setChecked(enableGpuDebugLayersMode != SETTING_VALUE_OFF);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, SETTING_VALUE_OFF);
+ mPreference.setEnabled(false);
+ mPreference.setChecked(false);
+ }
+}
diff --git a/src/com/android/settings/development/LogPersistPreferenceControllerV2.java b/src/com/android/settings/development/LogPersistPreferenceController.java
similarity index 95%
rename from src/com/android/settings/development/LogPersistPreferenceControllerV2.java
rename to src/com/android/settings/development/LogPersistPreferenceController.java
index 537b71b..a958379 100644
--- a/src/com/android/settings/development/LogPersistPreferenceControllerV2.java
+++ b/src/com/android/settings/development/LogPersistPreferenceController.java
@@ -26,14 +26,14 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.development.AbstractLogpersistPreferenceController;
-public class LogPersistPreferenceControllerV2 extends
+public class LogPersistPreferenceController extends
AbstractLogpersistPreferenceController implements PreferenceControllerMixin {
private final DevelopmentSettingsDashboardFragment mFragment;
private ListPreference mPreference;
- public LogPersistPreferenceControllerV2(Context context,
+ public LogPersistPreferenceController(Context context,
DevelopmentSettingsDashboardFragment fragment, Lifecycle lifecycle) {
super(context, lifecycle);
diff --git a/src/com/android/settings/development/LogdSizePreferenceController.java b/src/com/android/settings/development/LogdSizePreferenceController.java
index 8ee3405..6522800 100644
--- a/src/com/android/settings/development/LogdSizePreferenceController.java
+++ b/src/com/android/settings/development/LogdSizePreferenceController.java
@@ -17,18 +17,42 @@
package com.android.settings.development;
import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
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 class LogdSizePreferenceController extends AbstractLogdSizePreferenceController implements
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+ private ListPreference mPreference;
public LogdSizePreferenceController(Context context) {
super(context);
}
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateLogdSizeValues();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeLogdSizeOption(null /* new value */);
+ mPreference.setEnabled(false);
+ }
}
diff --git a/src/com/android/settings/development/LogdSizePreferenceControllerV2.java b/src/com/android/settings/development/LogdSizePreferenceControllerV2.java
deleted file mode 100644
index 8194c48..0000000
--- a/src/com/android/settings/development/LogdSizePreferenceControllerV2.java
+++ /dev/null
@@ -1,58 +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.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.development.AbstractLogdSizePreferenceController;
-
-public class LogdSizePreferenceControllerV2 extends AbstractLogdSizePreferenceController implements
- Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
-
- private ListPreference mPreference;
-
- public LogdSizePreferenceControllerV2(Context context) {
- super(context);
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
- }
-
- @Override
- public void updateState(Preference preference) {
- updateLogdSizeValues();
- }
-
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- mPreference.setEnabled(true);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- writeLogdSizeOption(null /* new value */);
- mPreference.setEnabled(false);
- }
-}
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/PrivateDnsModeDialogPreference.java b/src/com/android/settings/development/PrivateDnsModeDialogPreference.java
deleted file mode 100644
index ee44b08..0000000
--- a/src/com/android/settings/development/PrivateDnsModeDialogPreference.java
+++ /dev/null
@@ -1,246 +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 android.net.ConnectivityManager.PRIVATE_DNS_DEFAULT_MODE;
-import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OFF;
-import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_OPPORTUNISTIC;
-import static android.net.ConnectivityManager.PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.support.v14.preference.PreferenceDialogFragment;
-import android.support.v7.preference.DialogPreference;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.inputmethod.EditorInfo;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewGroup.MarginLayoutParams;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.EditText;
-import android.widget.RadioButton;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-import com.android.settings.R;
-import com.android.settingslib.CustomDialogPreference;
-
-
-public class PrivateDnsModeDialogPreference extends CustomDialogPreference
- implements OnCheckedChangeListener, TextWatcher, OnEditorActionListener {
- private static final String TAG = PrivateDnsModeDialogPreference.class.getSimpleName();
-
- private static final String MODE_KEY = Settings.Global.PRIVATE_DNS_MODE;
- private static final String HOSTNAME_KEY = Settings.Global.PRIVATE_DNS_SPECIFIER;
- private String mMode;
- private EditText mEditText;
-
- public static String getSummaryStringForModeFromSettings(ContentResolver cr, Resources res) {
- final String mode = getModeFromSettings(cr);
- switch (mode) {
- case PRIVATE_DNS_MODE_OFF:
- return res.getString(R.string.private_dns_mode_off);
- case PRIVATE_DNS_MODE_OPPORTUNISTIC:
- return res.getString(R.string.private_dns_mode_opportunistic);
- case PRIVATE_DNS_MODE_PROVIDER_HOSTNAME:
- return getHostnameFromSettings(cr);
- default:
- return "unknown";
- }
- }
-
- public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs, int defStyleAttr,
- int defStyleRes) {
- super(context, attrs, defStyleAttr, defStyleRes);
- }
-
- public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- }
-
- public PrivateDnsModeDialogPreference(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public PrivateDnsModeDialogPreference(Context context) {
- super(context);
- }
-
- // This is called first when the dialog is launched.
- @Override
- protected void onBindDialogView(View view) {
- final String mode = getModeFromSettings();
-
- RadioButton rb = (RadioButton) view.findViewById(R.id.private_dns_mode_off);
- if (mode.equals(PRIVATE_DNS_MODE_OFF)) rb.setChecked(true);
- rb.setOnCheckedChangeListener(this);
-
- rb = (RadioButton) view.findViewById(R.id.private_dns_mode_opportunistic);
- if (mode.equals(PRIVATE_DNS_MODE_OPPORTUNISTIC)) rb.setChecked(true);
- rb.setOnCheckedChangeListener(this);
-
- rb = (RadioButton) view.findViewById(R.id.private_dns_mode_provider);
- if (mode.equals(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) rb.setChecked(true);
- rb.setOnCheckedChangeListener(this);
-
- mEditText = (EditText) view.findViewById(R.id.private_dns_mode_provider_hostname);
- mEditText.setOnEditorActionListener(this);
- mEditText.addTextChangedListener(this);
-
- // (Mostly) Fix the EditText field's indentation to align underneath the
- // displayed radio button text, and not under the radio button itself.
- final int padding = rb.isLayoutRtl()
- ? rb.getCompoundPaddingRight()
- : rb.getCompoundPaddingLeft();
- final MarginLayoutParams marginParams = (MarginLayoutParams) mEditText.getLayoutParams();
- marginParams.setMarginStart(marginParams.getMarginStart() + padding);
- mEditText.setLayoutParams(marginParams);
- mEditText.setText(getHostnameFromSettings());
-
- setDialogValue(mode);
- }
-
- @Override
- protected void onDialogClosed(boolean positiveResult) {
- if (!positiveResult) return;
-
- saveDialogValue();
- setSummary(getSummaryStringForModeFromSettings(
- getContext().getContentResolver(), getContext().getResources()));
- }
-
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- if (!isChecked) return;
-
- switch (buttonView.getId()) {
- case R.id.private_dns_mode_off:
- setDialogValue(PRIVATE_DNS_MODE_OFF);
- break;
- case R.id.private_dns_mode_opportunistic:
- setDialogValue(PRIVATE_DNS_MODE_OPPORTUNISTIC);
- break;
- case R.id.private_dns_mode_provider:
- setDialogValue(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
- break;
- default:
- // Unknown button; ignored.
- break;
- }
- }
-
- @Override
- public boolean onEditorAction(TextView tv, int actionId, KeyEvent k) {
- if (actionId == EditorInfo.IME_ACTION_DONE) {
- saveDialogValue();
- getDialog().dismiss();
- return true;
- }
- return false;
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) { return; }
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) { return; }
-
- @Override
- public void afterTextChanged(Editable s) {
- final String hostname = s.toString();
- final boolean appearsValid = isWeaklyValidatedHostname(hostname);
- // TODO: Disable the "positive button" ("Save") when appearsValid is false.
- }
-
- private void setDialogValue(String mode) {
- mMode = mode;
- final boolean txtEnabled = mMode.equals(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME);
- mEditText.setEnabled(txtEnabled);
- }
-
- private void saveDialogValue() {
- if (!isValidMode(mMode)) {
- mMode = PRIVATE_DNS_DEFAULT_MODE;
- }
-
- if (mMode.equals(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME)) {
- final String hostname = mEditText.getText().toString();
- if (isWeaklyValidatedHostname(hostname)) {
- saveHostnameToSettings(hostname);
- } else {
- // TODO: Once quasi-validation of hostnames works and acceptable
- // user signaling is working, this can be deleted.
- mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC;
- if (TextUtils.isEmpty(hostname)) saveHostnameToSettings("");
- }
- }
-
- saveModeToSettings(mMode);
- }
-
- private String getModeFromSettings() {
- return getModeFromSettings(getContext().getContentResolver());
- }
-
- private void saveModeToSettings(String value) {
- Settings.Global.putString(getContext().getContentResolver(), MODE_KEY, value);
- }
-
- private String getHostnameFromSettings() {
- return getHostnameFromSettings(getContext().getContentResolver());
- }
-
- private void saveHostnameToSettings(String hostname) {
- Settings.Global.putString(getContext().getContentResolver(), HOSTNAME_KEY, hostname);
- }
-
- private static String getModeFromSettings(ContentResolver cr) {
- final String mode = Settings.Global.getString(cr, MODE_KEY);
- return isValidMode(mode) ? mode : PRIVATE_DNS_DEFAULT_MODE;
- }
-
- private static boolean isValidMode(String mode) {
- return !TextUtils.isEmpty(mode) && (
- mode.equals(PRIVATE_DNS_MODE_OFF) ||
- mode.equals(PRIVATE_DNS_MODE_OPPORTUNISTIC) ||
- mode.equals(PRIVATE_DNS_MODE_PROVIDER_HOSTNAME));
- }
-
- private static String getHostnameFromSettings(ContentResolver cr) {
- return Settings.Global.getString(cr, HOSTNAME_KEY);
- }
-
- private static boolean isWeaklyValidatedHostname(String hostname) {
- // TODO: Find and use a better validation method. Specifically:
- // [1] this should reject IP string literals, and
- // [2] do the best, simplest, future-proof verification that
- // the input approximates a DNS hostname.
- final String WEAK_HOSTNAME_REGEX = "^[a-zA-Z0-9_.-]+$";
- return hostname.matches(WEAK_HOSTNAME_REGEX);
- }
-}
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
index 4fd7fbc..f01da0d 100644
--- a/src/com/android/settings/development/VerifyAppsOverUsbPreferenceController.java
+++ b/src/com/android/settings/development/VerifyAppsOverUsbPreferenceController.java
@@ -18,7 +18,6 @@
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;
@@ -31,23 +30,27 @@
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedSwitchPreference;
-import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
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 {
+public class VerifyAppsOverUsbPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ AdbOnChangeListener, 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;
+ @VisibleForTesting
+ static final int SETTING_VALUE_ON = 1;
+ @VisibleForTesting
+ static final int SETTING_VALUE_OFF = 0;
+
/**
* 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.
@@ -59,27 +62,24 @@
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);
- }
+ // This field is accessed using reflection in the test, please keep name in sync.
+ private final PackageManagerWrapper mPackageManager;
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- if (isAvailable()) {
- mPreference = (RestrictedSwitchPreference)
- screen.findPreference(VERIFY_APPS_OVER_USB_KEY);
- }
+ public VerifyAppsOverUsbPreferenceController(Context context) {
+ super(context);
+
+ mPackageManager = new PackageManagerWrapper(context.getPackageManager());
}
@Override
public boolean isAvailable() {
return Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1) > 0;
+ Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1 /* default */) > 0;
}
@Override
@@ -87,15 +87,61 @@
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;
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mPreference = (RestrictedSwitchPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ final boolean isEnabled = (Boolean) newValue;
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB,
+ isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ if (!shouldBeEnabled()) {
+ mPreference.setChecked(false);
+ mPreference.setDisabledByAdmin(null);
+ mPreference.setEnabled(false);
+ return;
}
- return false;
+
+ 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, SETTING_VALUE_ON)
+ != SETTING_VALUE_OFF;
+ mPreference.setChecked(checked);
+ }
+
+ @Override
+ public void onAdbSettingChanged() {
+ if (isAvailable()) {
+ updateState(mPreference);
+ }
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ updateState(mPreference);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ // intentional no-op
+ // We can rely on onAdbSettingChanged() to update this controller.
}
/**
@@ -105,50 +151,24 @@
*/
private boolean shouldBeEnabled() {
final ContentResolver cr = mContext.getContentResolver();
- if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED, 0) == 0) {
+ if (Settings.Global.getInt(cr, Settings.Global.ADB_ENABLED,
+ AdbPreferenceController.ADB_SETTING_OFF)
+ == AdbPreferenceController.ADB_SETTING_OFF) {
return false;
}
- if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 0) {
+ if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, SETTING_VALUE_ON)
+ == SETTING_VALUE_OFF) {
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);
+ final List<ResolveInfo> receivers = mPackageManager.queryBroadcastReceivers(
+ verification, 0 /* flags */);
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/development/VerifyAppsOverUsbPreferenceControllerV2.java b/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2.java
deleted file mode 100644
index 6e3035e..0000000
--- a/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2.java
+++ /dev/null
@@ -1,174 +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.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.development.DeveloperOptionsPreferenceController;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-import java.util.List;
-
-/**
- * Controller to manage the state of "Verify apps over USB" toggle.
- */
-public class VerifyAppsOverUsbPreferenceControllerV2 extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
- AdbOnChangeListener, 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;
-
- @VisibleForTesting
- static final int SETTING_VALUE_ON = 1;
- @VisibleForTesting
- static final int SETTING_VALUE_OFF = 0;
-
- /**
- * 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();
-
- // This field is accessed using reflection in the test, please keep name in sync.
- private final PackageManagerWrapper mPackageManager;
-
- public VerifyAppsOverUsbPreferenceControllerV2(Context context) {
- super(context);
-
- mPackageManager = new PackageManagerWrapper(context.getPackageManager());
- }
-
- @Override
- public boolean isAvailable() {
- return Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1 /* default */) > 0;
- }
-
- @Override
- public String getPreferenceKey() {
- return VERIFY_APPS_OVER_USB_KEY;
- }
-
- @Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
- mPreference = (RestrictedSwitchPreference) screen.findPreference(getPreferenceKey());
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isEnabled = (Boolean) newValue;
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB,
- isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- 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, SETTING_VALUE_ON)
- != SETTING_VALUE_OFF;
- mPreference.setChecked(checked);
- }
-
- @Override
- public void onAdbSettingChanged() {
- if (isAvailable()) {
- updateState(mPreference);
- }
- }
-
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- updateState(mPreference);
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- // intentional no-op
- // We can rely on onAdbSettingChanged() to update this controller.
- }
-
- /**
- * 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,
- AdbPreferenceController.ADB_SETTING_OFF)
- == AdbPreferenceController.ADB_SETTING_OFF) {
- return false;
- }
- if (Settings.Global.getInt(cr, Settings.Global.PACKAGE_VERIFIER_ENABLE, SETTING_VALUE_ON)
- == SETTING_VALUE_OFF) {
- return false;
- } else {
- 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 = mPackageManager.queryBroadcastReceivers(
- verification, 0 /* flags */);
- if (receivers.size() == 0) {
- return false;
- }
- }
- return true;
- }
-}
diff --git a/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java b/src/com/android/settings/development/WebViewAppPreferenceController.java
similarity index 96%
rename from src/com/android/settings/development/WebViewAppPreferenceControllerV2.java
rename to src/com/android/settings/development/WebViewAppPreferenceController.java
index d061281..9ccb20b 100644
--- a/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java
+++ b/src/com/android/settings/development/WebViewAppPreferenceController.java
@@ -31,7 +31,7 @@
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
-public class WebViewAppPreferenceControllerV2 extends
+public class WebViewAppPreferenceController extends
DeveloperOptionsPreferenceController implements PreferenceControllerMixin {
private static final String TAG = "WebViewAppPrefCtrl";
@@ -42,7 +42,7 @@
private Preference mPreference;
- public WebViewAppPreferenceControllerV2(Context context) {
+ public WebViewAppPreferenceController(Context context) {
super(context);
mPackageManager = new PackageManagerWrapper(context.getPackageManager());
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagPreference.java b/src/com/android/settings/development/featureflags/FeatureFlagPreference.java
index 7da1826..b5a4a15 100644
--- a/src/com/android/settings/development/featureflags/FeatureFlagPreference.java
+++ b/src/com/android/settings/development/featureflags/FeatureFlagPreference.java
@@ -35,7 +35,7 @@
@Override
public void setChecked(boolean isChecked) {
setCheckedInternal(isChecked);
- FeatureFlagUtils.setEnabled(mKey, isChecked);
+ FeatureFlagUtils.setEnabled(getContext(), mKey, isChecked);
}
private void setCheckedInternal(boolean isChecked) {
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/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
index 5edac0f..802d774 100644
--- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
@@ -26,13 +26,15 @@
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.DeviceInfoUtils;
import com.android.settingslib.core.AbstractPreferenceController;
import java.util.ArrayList;
import java.util.List;
-public class PhoneNumberPreferenceController extends AbstractPreferenceController {
+public class PhoneNumberPreferenceController extends AbstractPreferenceController implements
+ PreferenceControllerMixin {
private final static String KEY_PHONE_NUMBER = "phone_number";
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/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index a3ed940..e9d3c85 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -16,7 +16,8 @@
package com.android.settings.deviceinfo;
-import android.app.Activity;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
@@ -63,8 +64,6 @@
import java.util.Collections;
import java.util.List;
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
/**
* Panel showing both internal storage (both built-in storage and private
* volumes) and removable storage (public volumes).
@@ -545,13 +544,7 @@
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);
- }
- };
+ = (activity, summaryLoader) -> new SummaryProvider(activity, summaryLoader);
/** Enable indexing of searchable data */
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
@@ -559,15 +552,17 @@
@Override
public List<SearchIndexableRaw> getRawDataToIndex(
Context context, boolean enabled) {
- final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+ final List<SearchIndexableRaw> result = new ArrayList<>();
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.storage_settings);
+ data.key = "storage_settings";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.internal_storage);
+ data.key = "storage_settings_internal_storage";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
@@ -577,6 +572,7 @@
for (VolumeInfo vol : vols) {
if (isInteresting(vol)) {
data.title = storage.getBestVolumeDescription(vol);
+ data.key = "storage_settings_volume_" +vol.id;
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
}
@@ -584,36 +580,43 @@
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.memory_size);
+ data.key = "storage_settings_memory_size";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.memory_available);
+ data.key = "storage_settings_memory_available";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.memory_apps_usage);
+ data.key = "storage_settings_apps_space";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.memory_dcim_usage);
+ data.key = "storage_settings_dcim_space";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.memory_music_usage);
+ data.key = "storage_settings_music_space";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.memory_media_misc_usage);
+ data.key = "storage_settings_misc_space";
data.screenTitle = context.getString(R.string.storage_settings);
result.add(data);
data = new SearchIndexableRaw(context);
data.title = context.getString(R.string.storage_menu_free);
+ data.key = "storage_settings_free_space";
data.screenTitle = context.getString(R.string.storage_menu_free);
// We need to define all three in order for this to trigger properly.
data.intentAction = StorageManager.ACTION_MANAGE_STORAGE;
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/display/ScreenZoomSettings.java b/src/com/android/settings/display/ScreenZoomSettings.java
index a77782f..6b5216e 100644
--- a/src/com/android/settings/display/ScreenZoomSettings.java
+++ b/src/com/android/settings/display/ScreenZoomSettings.java
@@ -22,6 +22,7 @@
import android.content.res.Resources;
import android.os.Bundle;
import android.view.Display;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.PreviewSeekBarPreferenceFragment;
import com.android.settings.R;
@@ -48,7 +49,7 @@
mActivityLayoutResId = R.layout.screen_zoom_activity;
// This should be replaced once the final preview sample screen is in place.
- mPreviewSampleResIds = new int[]{R.layout.screen_zoom_preview_1,
+ mPreviewSampleResIds = new int[] {R.layout.screen_zoom_preview_1,
R.layout.screen_zoom_preview_2,
R.layout.screen_zoom_preview_settings};
@@ -60,8 +61,8 @@
// connect to the window manager service. Just use the current
// density and don't let the user change anything.
final int densityDpi = getResources().getDisplayMetrics().densityDpi;
- mValues = new int[] { densityDpi };
- mEntries = new String[] { getString(DisplayDensityUtils.SUMMARY_DEFAULT) };
+ mValues = new int[] {densityDpi};
+ mEntries = new String[] {getString(DisplayDensityUtils.SUMMARY_DEFAULT)};
mInitialIndex = 0;
mDefaultDensity = densityDpi;
} else {
@@ -109,10 +110,12 @@
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
@Override
- public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+ public List<SearchIndexableRaw> getRawDataToIndex(Context context,
+ boolean enabled) {
final Resources res = context.getResources();
final SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.screen_zoom_title);
+ data.key = "screen_zoom_settings";
data.screenTitle = res.getString(R.string.screen_zoom_title);
data.keywords = res.getString(R.string.screen_zoom_keywords);
diff --git a/src/com/android/settings/fuelgauge/FakeUid.java b/src/com/android/settings/fuelgauge/FakeUid.java
index 2c3e3cf..2b5afe1 100644
--- a/src/com/android/settings/fuelgauge/FakeUid.java
+++ b/src/com/android/settings/fuelgauge/FakeUid.java
@@ -51,6 +51,11 @@
}
@Override
+ public Timer getMulticastWakelockStats() {
+ return null;
+ }
+
+ @Override
public ArrayMap<String, ? extends Timer> getSyncStats() {
return null;
}
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/network/PrivateDnsModeDialogFragment.java b/src/com/android/settings/network/PrivateDnsModeDialogFragment.java
index cb3079e..5704fb9 100644
--- a/src/com/android/settings/network/PrivateDnsModeDialogFragment.java
+++ b/src/com/android/settings/network/PrivateDnsModeDialogFragment.java
@@ -32,6 +32,7 @@
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
+import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
@@ -68,6 +69,8 @@
@VisibleForTesting
RadioGroup mRadioGroup;
@VisibleForTesting
+ Button mSaveButton;
+ @VisibleForTesting
String mMode;
public static void show(FragmentManager fragmentManager) {
@@ -81,17 +84,23 @@
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Context context = getContext();
- return new AlertDialog.Builder(context)
+ final AlertDialog dialog = new AlertDialog.Builder(context)
.setTitle(R.string.select_private_dns_configuration_title)
.setView(buildPrivateDnsView(context))
.setPositiveButton(R.string.save, this)
.setNegativeButton(R.string.dlg_cancel, null)
.create();
+
+ dialog.setOnShowListener(dialogInterface -> {
+ mSaveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
+ updateDialogInfo();
+ });
+ return dialog;
}
private View buildPrivateDnsView(final Context context) {
final ContentResolver contentResolver = context.getContentResolver();
- final String mode = Settings.Global.getString(contentResolver, MODE_KEY);
+ mMode = Settings.Global.getString(contentResolver, MODE_KEY);
final View view = LayoutInflater.from(context).inflate(R.layout.private_dns_mode_dialog,
null);
@@ -101,7 +110,7 @@
mRadioGroup = view.findViewById(R.id.private_dns_radio_group);
mRadioGroup.setOnCheckedChangeListener(this);
- mRadioGroup.check(PRIVATE_DNS_MAP.getOrDefault(mode, R.id.private_dns_mode_opportunistic));
+ mRadioGroup.check(PRIVATE_DNS_MAP.getOrDefault(mMode, R.id.private_dns_mode_opportunistic));
return view;
}
@@ -129,17 +138,15 @@
switch (checkedId) {
case R.id.private_dns_mode_off:
mMode = PRIVATE_DNS_MODE_OFF;
- mEditText.setEnabled(false);
break;
case R.id.private_dns_mode_opportunistic:
mMode = PRIVATE_DNS_MODE_OPPORTUNISTIC;
- mEditText.setEnabled(false);
break;
case R.id.private_dns_mode_provider:
mMode = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME;
- mEditText.setEnabled(true);
break;
}
+ updateDialogInfo();
}
@Override
@@ -152,8 +159,9 @@
@Override
public void afterTextChanged(Editable s) {
- // TODO(b/68030013): Disable the "positive button" ("Save") when appearsValid is false.
- final boolean valid = isWeaklyValidatedHostname(s.toString());
+ if (mSaveButton != null) {
+ mSaveButton.setEnabled(isWeaklyValidatedHostname(mEditText.getText().toString()));
+ }
}
private boolean isWeaklyValidatedHostname(String hostname) {
@@ -165,4 +173,17 @@
return hostname.matches(WEAK_HOSTNAME_REGEX);
}
+ private void updateDialogInfo() {
+ final boolean modeProvider = PRIVATE_DNS_MODE_PROVIDER_HOSTNAME.equals(mMode);
+ if (mEditText != null) {
+ mEditText.setEnabled(modeProvider);
+ }
+ if (mSaveButton != null) {
+ mSaveButton.setEnabled(
+ modeProvider
+ ? isWeaklyValidatedHostname(mEditText.getText().toString())
+ : true);
+ }
+ }
+
}
diff --git a/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java b/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java
index d6291a8..2eb9f6a 100644
--- a/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java
+++ b/src/com/android/settings/notification/EmergencyBroadcastPreferenceController.java
@@ -40,7 +40,6 @@
private AccountRestrictionHelper mHelper;
private UserManager mUserManager;
private PackageManager mPm;
- private boolean mCellBroadcastAppLinkEnabled;
public EmergencyBroadcastPreferenceController(Context context, String prefKey) {
this(context, new AccountRestrictionHelper(context), prefKey);
@@ -54,8 +53,6 @@
mHelper = helper;
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mPm = mContext.getPackageManager();
- // Enable link to CMAS app settings depending on the value in config.xml.
- mCellBroadcastAppLinkEnabled = isCellBroadcastAppLinkEnabled();
}
@Override
@@ -79,12 +76,13 @@
@Override
public boolean isAvailable() {
- return mUserManager.isAdminUser() && mCellBroadcastAppLinkEnabled
+ return mUserManager.isAdminUser() && isCellBroadcastAppLinkEnabled()
&& !mHelper.hasBaseUserRestriction(
UserManager.DISALLOW_CONFIG_CELL_BROADCASTS, UserHandle.myUserId());
}
private boolean isCellBroadcastAppLinkEnabled() {
+ // Enable link to CMAS app settings depending on the value in config.xml.
boolean enabled = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_cellBroadcastAppLinks);
if (enabled) {
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/notification/ZenModeAlarmsPreferenceController.java b/src/com/android/settings/notification/ZenModeAlarmsPreferenceController.java
index df9966d..ef8d026 100644
--- a/src/com/android/settings/notification/ZenModeAlarmsPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeAlarmsPreferenceController.java
@@ -26,7 +26,7 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
public class ZenModeAlarmsPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
+ AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_alarms";
private final ZenModeBackend mBackend;
diff --git a/src/com/android/settings/notification/ZenModeAutomaticRulesPreferenceController.java b/src/com/android/settings/notification/ZenModeAutomaticRulesPreferenceController.java
index 0ec5d69..f91bdd6 100644
--- a/src/com/android/settings/notification/ZenModeAutomaticRulesPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeAutomaticRulesPreferenceController.java
@@ -22,11 +22,10 @@
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceScreen;
-
import java.util.Map;
public class ZenModeAutomaticRulesPreferenceController extends
- AbstractZenModeAutomaticRulePreferenceController {
+ AbstractZenModeAutomaticRulePreferenceController {
private final String KEY_AUTOMATIC_RULES;
private PreferenceCategory mPreferenceCategory;
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index ae75798..d096e8c 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -34,7 +34,7 @@
public class ZenModeAutomationSettings extends ZenModeSettingsBase {
private static final String KEY_ADD_RULE = "zen_mode_add_automatic_rule";
private static final String KEY_AUTOMATIC_RULES = "zen_mode_automatic_rules";
- protected final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
+ protected static final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
@Override
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
diff --git a/src/com/android/settings/notification/ZenModeCallsPreferenceController.java b/src/com/android/settings/notification/ZenModeCallsPreferenceController.java
index 48f9d1c..d952c11 100644
--- a/src/com/android/settings/notification/ZenModeCallsPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeCallsPreferenceController.java
@@ -23,8 +23,7 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
-public class ZenModeCallsPreferenceController extends
- AbstractZenModePreferenceController {
+public class ZenModeCallsPreferenceController extends AbstractZenModePreferenceController {
protected static final String KEY = "zen_mode_calls";
private final ZenModeBackend mBackend;
diff --git a/src/com/android/settings/notification/ZenModeEventsPreferenceController.java b/src/com/android/settings/notification/ZenModeEventsPreferenceController.java
index 335002c..3763fed 100644
--- a/src/com/android/settings/notification/ZenModeEventsPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeEventsPreferenceController.java
@@ -23,10 +23,11 @@
import android.support.v7.preference.Preference;
import android.util.Log;
+
import com.android.settingslib.core.lifecycle.Lifecycle;
-public class ZenModeEventsPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
+public class ZenModeEventsPreferenceController extends AbstractZenModePreferenceController
+ implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_events";
private final ZenModeBackend mBackend;
@@ -68,8 +69,7 @@
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean allowEvents = (Boolean) newValue;
if (ZenModeSettingsBase.DEBUG) {
- Log.d(TAG, "onPrefChange allowEvents="
- + allowEvents);
+ Log.d(TAG, "onPrefChange allowEvents=" + allowEvents);
}
mBackend.saveSoundPolicy(Policy.PRIORITY_CATEGORY_EVENTS, allowEvents);
return true;
diff --git a/src/com/android/settings/notification/ZenModeMediaSystemOtherPreferenceController.java b/src/com/android/settings/notification/ZenModeMediaSystemOtherPreferenceController.java
index 8893ff5..8afe881 100644
--- a/src/com/android/settings/notification/ZenModeMediaSystemOtherPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeMediaSystemOtherPreferenceController.java
@@ -25,8 +25,8 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
-public class ZenModeMediaSystemOtherPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
+public class ZenModeMediaSystemOtherPreferenceController extends AbstractZenModePreferenceController
+ implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_media";
private final ZenModeBackend mBackend;
@@ -71,8 +71,7 @@
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean allowMedia = (Boolean) newValue;
if (ZenModeSettingsBase.DEBUG) {
- Log.d(TAG,
- "onPrefChange allowMediaSystemOther=" + allowMedia);
+ Log.d(TAG, "onPrefChange allowMediaSystemOther=" + allowMedia);
}
mBackend.saveSoundPolicy(Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER, allowMedia);
return true;
diff --git a/src/com/android/settings/notification/ZenModeMessagesPreferenceController.java b/src/com/android/settings/notification/ZenModeMessagesPreferenceController.java
index 257a7c9..dad6cf1 100644
--- a/src/com/android/settings/notification/ZenModeMessagesPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeMessagesPreferenceController.java
@@ -7,8 +7,7 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
-public class ZenModeMessagesPreferenceController extends
- AbstractZenModePreferenceController {
+public class ZenModeMessagesPreferenceController extends AbstractZenModePreferenceController {
protected static final String KEY = "zen_mode_messages";
private final ZenModeBackend mBackend;
diff --git a/src/com/android/settings/notification/ZenModeRemindersPreferenceController.java b/src/com/android/settings/notification/ZenModeRemindersPreferenceController.java
index a8fe220..edc7cf9 100644
--- a/src/com/android/settings/notification/ZenModeRemindersPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeRemindersPreferenceController.java
@@ -25,8 +25,8 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
-public class ZenModeRemindersPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
+public class ZenModeRemindersPreferenceController extends AbstractZenModePreferenceController
+ implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_reminders";
private final ZenModeBackend mBackend;
@@ -67,8 +67,7 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean allowReminders = (Boolean) newValue;
- if (ZenModeSettingsBase.DEBUG) Log.d(TAG, "onPrefChange allowReminders="
- + allowReminders);
+ if (ZenModeSettingsBase.DEBUG) Log.d(TAG, "onPrefChange allowReminders=" + allowReminders);
mBackend.saveSoundPolicy(NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS,
allowReminders);
return true;
diff --git a/src/com/android/settings/notification/ZenModeRepeatCallersPreferenceController.java b/src/com/android/settings/notification/ZenModeRepeatCallersPreferenceController.java
index eb52d55..1d18409 100644
--- a/src/com/android/settings/notification/ZenModeRepeatCallersPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeRepeatCallersPreferenceController.java
@@ -25,9 +25,8 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
-public class ZenModeRepeatCallersPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
-
+public class ZenModeRepeatCallersPreferenceController extends AbstractZenModePreferenceController
+ implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_repeat_callers";
private final ZenModeBackend mBackend;
diff --git a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
index b0715dc..9eccfdc 100644
--- a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
@@ -47,6 +47,10 @@
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.widget.SwitchBar;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.Arrays;
+import java.util.List;
import java.util.Arrays;
import java.util.List;
@@ -146,6 +150,11 @@
}
@Override
+ protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ return null;
+ }
+
+ @Override
public void onResume() {
super.onResume();
if (isUiRestricted()) {
diff --git a/src/com/android/settings/notification/ZenModeScreenOffPreferenceController.java b/src/com/android/settings/notification/ZenModeScreenOffPreferenceController.java
index 8099691..2b70706 100644
--- a/src/com/android/settings/notification/ZenModeScreenOffPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeScreenOffPreferenceController.java
@@ -25,7 +25,7 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
public class ZenModeScreenOffPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
+ AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_screen_off";
private final ZenModeBackend mBackend;
diff --git a/src/com/android/settings/notification/ZenModeScreenOnPreferenceController.java b/src/com/android/settings/notification/ZenModeScreenOnPreferenceController.java
index fac9bfd..8e0b348 100644
--- a/src/com/android/settings/notification/ZenModeScreenOnPreferenceController.java
+++ b/src/com/android/settings/notification/ZenModeScreenOnPreferenceController.java
@@ -25,7 +25,7 @@
import com.android.settingslib.core.lifecycle.Lifecycle;
public class ZenModeScreenOnPreferenceController extends
- AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener{
+ AbstractZenModePreferenceController implements Preference.OnPreferenceChangeListener {
protected static final String KEY = "zen_mode_screen_on";
private final ZenModeBackend mBackend;
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 6cdf00b..fbc9f7d 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -38,7 +38,6 @@
import java.util.Map.Entry;
public class ZenModeSettings extends ZenModeSettingsBase {
-
@Override
protected int getPreferenceScreenResId() {
return R.xml.zen_mode_settings;
@@ -59,7 +58,6 @@
return R.string.help_uri_interruptions;
}
-
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Lifecycle lifecycle) {
List<AbstractPreferenceController> controllers = new ArrayList<>();
@@ -195,24 +193,26 @@
*/
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.zen_mode_settings;
- return Arrays.asList(sir);
- }
- @Override
- public List<String> getNonIndexableKeys(Context context) {
- List<String> keys = super.getNonIndexableKeys(context);
- keys.add(ZenModeButtonPreferenceController.KEY);
- return keys;
- }
+ @Override
+ public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+ boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.zen_mode_settings;
+ return Arrays.asList(sir);
+ }
- @Override
- public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
- return buildPreferenceControllers(context, null);
- }
- };
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ List<String> keys = super.getNonIndexableKeys(context);
+ keys.add(ZenModeButtonPreferenceController.KEY);
+ return keys;
+ }
+
+ @Override
+ public List<AbstractPreferenceController> getPreferenceControllers(Context
+ context) {
+ return buildPreferenceControllers(context, null);
+ }
+ };
}
diff --git a/src/com/android/settings/notification/ZenRulePreference.java b/src/com/android/settings/notification/ZenRulePreference.java
index a838f29..4d7181a 100644
--- a/src/com/android/settings/notification/ZenRulePreference.java
+++ b/src/com/android/settings/notification/ZenRulePreference.java
@@ -40,7 +40,7 @@
import java.util.Map;
public class ZenRulePreference extends TwoTargetPreference {
- protected final ManagedServiceSettings.Config CONFIG =
+ private static final ManagedServiceSettings.Config CONFIG =
ZenModeAutomationSettings.getConditionProviderConfig();
final CharSequence mName;
final String mId;
diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java
index 3d63000..6bdce48 100644
--- a/src/com/android/settings/print/PrintSettingsFragment.java
+++ b/src/com/android/settings/print/PrintSettingsFragment.java
@@ -55,7 +55,6 @@
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.utils.ProfileSettingsPreferenceFragment;
import java.text.DateFormat;
@@ -616,49 +615,11 @@
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
- @Override
- public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
- List<SearchIndexableRaw> indexables = new ArrayList<SearchIndexableRaw>();
-
- PackageManager packageManager = context.getPackageManager();
- PrintManager printManager = (PrintManager) context.getSystemService(
- Context.PRINT_SERVICE);
-
- String screenTitle = context.getResources().getString(R.string.print_settings);
- SearchIndexableRaw data = new SearchIndexableRaw(context);
- data.title = screenTitle;
- data.screenTitle = screenTitle;
- indexables.add(data);
-
- // Indexing all services, regardless if enabled. Please note that the index will not be
- // updated until this function is called again
- List<PrintServiceInfo> services =
- printManager.getPrintServices(PrintManager.ALL_SERVICES);
-
- if (services != null) {
- final int serviceCount = services.size();
- for (int i = 0; i < serviceCount; i++) {
- PrintServiceInfo service = services.get(i);
-
- ComponentName componentName = new ComponentName(
- service.getResolveInfo().serviceInfo.packageName,
- service.getResolveInfo().serviceInfo.name);
-
- data = new SearchIndexableRaw(context);
- data.key = componentName.flattenToString();
- data.title = service.getResolveInfo().loadLabel(packageManager).toString();
- data.screenTitle = screenTitle;
- indexables.add(data);
- }
- }
-
- return indexables;
- }
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
boolean enabled) {
- List<SearchIndexableResource> indexables = new ArrayList<SearchIndexableResource>();
+ List<SearchIndexableResource> indexables = new ArrayList<>();
SearchIndexableResource indexable = new SearchIndexableResource(context);
indexable.xmlResId = R.xml.print_settings;
indexables.add(indexable);
diff --git a/src/com/android/settings/search/DatabaseIndexingManager.java b/src/com/android/settings/search/DatabaseIndexingManager.java
index 970b50f..0aeda66 100644
--- a/src/com/android/settings/search/DatabaseIndexingManager.java
+++ b/src/com/android/settings/search/DatabaseIndexingManager.java
@@ -19,20 +19,18 @@
import static com.android.settings.search.CursorToSearchResultConverter.COLUMN_INDEX_ID;
-import static com.android.settings.search.CursorToSearchResultConverter
- .COLUMN_INDEX_INTENT_ACTION_TARGET_PACKAGE;
+import static com.android.settings.search.CursorToSearchResultConverter.COLUMN_INDEX_INTENT_ACTION_TARGET_PACKAGE;
import static com.android.settings.search.CursorToSearchResultConverter.COLUMN_INDEX_KEY;
import static com.android.settings.search.DatabaseResultLoader.SELECT_COLUMNS;
-import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DOCID;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.CLASS_NAME;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_ENTRIES;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_KEYWORDS;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_KEY_REF;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON;
-import static com.android.settings.search.IndexDatabaseHelper.IndexColumns
- .DATA_SUMMARY_ON_NORMALIZED;
+import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_SUMMARY_ON_NORMALIZED;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_TITLE;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DATA_TITLE_NORMALIZED;
+import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.DOCID;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.ENABLED;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.ICON;
import static com.android.settings.search.IndexDatabaseHelper.IndexColumns.INTENT_ACTION;
@@ -55,6 +53,7 @@
import android.os.AsyncTask;
import android.os.Build;
import android.provider.SearchIndexablesContract;
+import android.provider.SearchIndexablesContract.SiteMapColumns;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
@@ -68,7 +67,6 @@
import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Objects;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -276,17 +274,11 @@
if (!TextUtils.isEmpty(dataRow.className)
&& !TextUtils.isEmpty(dataRow.childClassName)) {
- ContentValues siteMapPair = new ContentValues();
- final int pairDocId = Objects.hash(dataRow.className, dataRow.childClassName);
- siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.DOCID, pairDocId);
- siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.PARENT_CLASS,
- dataRow.className);
- siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.PARENT_TITLE,
- dataRow.screenTitle);
- siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.CHILD_CLASS,
- dataRow.childClassName);
- siteMapPair.put(IndexDatabaseHelper.SiteMapColumns.CHILD_TITLE,
- dataRow.updatedTitle);
+ final ContentValues siteMapPair = new ContentValues();
+ siteMapPair.put(SiteMapColumns.PARENT_CLASS, dataRow.className);
+ siteMapPair.put(SiteMapColumns.PARENT_TITLE, dataRow.screenTitle);
+ siteMapPair.put(SiteMapColumns.CHILD_CLASS, dataRow.childClassName);
+ siteMapPair.put(SiteMapColumns.CHILD_TITLE, dataRow.updatedTitle);
database.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_SITE_MAP,
null /* nullColumnHack */, siteMapPair);
diff --git a/src/com/android/settings/search/IndexDatabaseHelper.java b/src/com/android/settings/search/IndexDatabaseHelper.java
index b85b6c0..19e3419 100644
--- a/src/com/android/settings/search/IndexDatabaseHelper.java
+++ b/src/com/android/settings/search/IndexDatabaseHelper.java
@@ -22,6 +22,7 @@
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
+import android.provider.SearchIndexablesContract.SiteMapColumns;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
@@ -33,7 +34,7 @@
private static final String TAG = "IndexDatabaseHelper";
private static final String DATABASE_NAME = "search_index.db";
- private static final int DATABASE_VERSION = 117;
+ private static final int DATABASE_VERSION = 118;
private static final String SHARED_PREFS_TAG = "indexing_manager";
@@ -80,14 +81,6 @@
String TIME_STAMP = "timestamp";
}
- public interface SiteMapColumns {
- String DOCID = "docid";
- String PARENT_CLASS = "parent_class";
- String CHILD_CLASS = "child_class";
- String PARENT_TITLE = "parent_title";
- String CHILD_TITLE = "child_title";
- }
-
private static final String CREATE_INDEX_TABLE =
"CREATE VIRTUAL TABLE " + Tables.TABLE_PREFS_INDEX + " USING fts4" +
"(" +
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 0aa2ab7..7512c13 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -22,7 +22,6 @@
import com.android.settings.DeviceInfoSettings;
import com.android.settings.DisplaySettings;
import com.android.settings.LegalSettings;
-import com.android.settings.ScreenPinningSettings;
import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accessibility.AccessibilityShortcutPreferenceFragment;
import com.android.settings.accessibility.MagnificationPreferenceFragment;
@@ -35,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;
@@ -75,6 +75,7 @@
import com.android.settings.print.PrintSettingsFragment;
import com.android.settings.security.EncryptionAndCredential;
import com.android.settings.security.LockscreenDashboardFragment;
+import com.android.settings.security.ScreenPinningSettings;
import com.android.settings.security.SecuritySettings;
import com.android.settings.security.screenlock.ScreenLockSettings;
import com.android.settings.sim.SimSettings;
@@ -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/search/SettingsSearchIndexablesProvider.java b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
index 968847b..9e35082 100644
--- a/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
+++ b/src/com/android/settings/search/SettingsSearchIndexablesProvider.java
@@ -40,16 +40,24 @@
import static android.provider.SearchIndexablesContract.INDEXABLES_RAW_COLUMNS;
import static android.provider.SearchIndexablesContract.INDEXABLES_XML_RES_COLUMNS;
import static android.provider.SearchIndexablesContract.NON_INDEXABLES_KEYS_COLUMNS;
+import static android.provider.SearchIndexablesContract.SITE_MAP_COLUMNS;
+import static com.android.settings.dashboard.DashboardFragmentRegistry.CATEGORY_KEY_TO_PARENT_MAP;
import android.content.Context;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.provider.SearchIndexableResource;
+import android.provider.SearchIndexablesContract;
import android.provider.SearchIndexablesProvider;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
+import com.android.settings.SettingsActivity;
+import com.android.settings.overlay.FeatureFactory;
+import com.android.settingslib.drawer.DashboardCategory;
+import com.android.settingslib.drawer.Tile;
+
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -134,6 +142,38 @@
return cursor;
}
+ @Override
+ public Cursor querySiteMapPairs() {
+ final MatrixCursor cursor = new MatrixCursor(SITE_MAP_COLUMNS);
+ final Context context = getContext();
+ // Loop through all IA categories and pages and build additional SiteMapPairs
+ final List<DashboardCategory> categories = FeatureFactory.getFactory(context)
+ .getDashboardFeatureProvider(context).getAllCategories();
+ for (DashboardCategory category : categories) {
+ // Use the category key to look up parent (which page hosts this key)
+ final String parentClass = CATEGORY_KEY_TO_PARENT_MAP.get(category.key);
+ if (parentClass == null) {
+ continue;
+ }
+ // Build parent-child class pairs for all children listed under this key.
+ for (Tile tile : category.tiles) {
+ String childClass = null;
+ if (tile.metaData != null) {
+ childClass = tile.metaData.getString(
+ SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
+ }
+ if (childClass == null) {
+ continue;
+ }
+ cursor.newRow()
+ .add(SearchIndexablesContract.SiteMapColumns.PARENT_CLASS, parentClass)
+ .add(SearchIndexablesContract.SiteMapColumns.CHILD_CLASS, childClass);
+ }
+ }
+ // Done.
+ return cursor;
+ }
+
private List<String> getNonIndexableKeysFromProvider(Context context) {
final Collection<Class> values = SearchIndexableResources.providerValues();
final List<String> nonIndexableKeys = new ArrayList<>();
diff --git a/src/com/android/settings/ScreenPinningSettings.java b/src/com/android/settings/security/ScreenPinningSettings.java
similarity index 84%
rename from src/com/android/settings/ScreenPinningSettings.java
rename to src/com/android/settings/security/ScreenPinningSettings.java
index b3b6868..488e0c8 100644
--- a/src/com/android/settings/ScreenPinningSettings.java
+++ b/src/com/android/settings/security/ScreenPinningSettings.java
@@ -13,14 +13,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings;
+package com.android.settings.security;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.os.Bundle;
import android.os.UserHandle;
+import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
@@ -33,13 +33,15 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.widget.LockPatternUtils;
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.password.ChooseLockGeneric;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.widget.SwitchBar;
-import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
@@ -210,33 +212,13 @@
*/
public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider() {
+
@Override
- public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
- final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
-
- final Resources res = context.getResources();
-
- // Add fragment title
- SearchIndexableRaw data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.screen_pinning_title);
- data.screenTitle = res.getString(R.string.screen_pinning_title);
- result.add(data);
-
- if (isLockToAppEnabled(context)) {
- // Screen lock option
- data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.screen_pinning_unlock_none);
- data.screenTitle = res.getString(R.string.screen_pinning_title);
- result.add(data);
- } else {
- // Screen pinning description.
- data = new SearchIndexableRaw(context);
- data.title = res.getString(R.string.screen_pinning_description);
- data.screenTitle = res.getString(R.string.screen_pinning_title);
- result.add(data);
- }
-
- return result;
+ public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
+ boolean enabled) {
+ final SearchIndexableResource sir = new SearchIndexableResource(context);
+ sir.xmlResId = R.xml.screen_pinning_settings;
+ return Arrays.asList(sir);
}
};
}
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index 35ce909..01c138a 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -823,6 +823,7 @@
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = screenTitle;
+ data.key = "security_settings_screen";
data.screenTitle = screenTitle;
result.add(data);
@@ -834,11 +835,13 @@
// This catches the title which can be overloaded in an overlay
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.security_settings_fingerprint_preference_title);
+ data.key = "security_fingerprint";
data.screenTitle = screenTitle;
result.add(data);
// Fallback for when the above doesn't contain "fingerprint"
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.fingerprint_manage_category_title);
+ data.key = "security_managed_fingerprint";
data.screenTitle = screenTitle;
result.add(data);
}
@@ -853,22 +856,7 @@
profileUserId)) {
data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.lock_settings_profile_unification_title);
- data.screenTitle = screenTitle;
- result.add(data);
- }
- }
-
- // Advanced
- if (lockPatternUtils.isSecure(MY_USER_ID)) {
- final TrustAgentManager trustAgentManager =
- FeatureFactory.getFactory(context).getSecurityFeatureProvider()
- .getTrustAgentManager();
- final List<TrustAgentComponentInfo> agents =
- trustAgentManager.getActiveTrustAgents(context, lockPatternUtils);
- for (int i = 0; i < agents.size(); i++) {
- final TrustAgentComponentInfo agent = agents.get(i);
- data = new SearchIndexableRaw(context);
- data.title = agent.title;
+ data.key = "security_use_one_lock";
data.screenTitle = screenTitle;
result.add(data);
}
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 906c9d4..9f510d2 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -1136,6 +1136,7 @@
final Resources res = context.getResources();
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = res.getString(R.string.user_settings_title);
+ data.key = "users_settings";
data.screenTitle = res.getString(R.string.user_settings_title);
result.add(data);
@@ -1145,6 +1146,7 @@
R.string.user_add_user_or_profile_menu
: R.string.user_add_user_menu);
data.screenTitle = res.getString(R.string.user_settings_title);
+ data.key = "user_settings_add_users";
result.add(data);
}
return result;
diff --git a/src/com/android/settings/wallpaper/WallpaperTypeSettings.java b/src/com/android/settings/wallpaper/WallpaperTypeSettings.java
index 3c95785..a87249e 100644
--- a/src/com/android/settings/wallpaper/WallpaperTypeSettings.java
+++ b/src/com/android/settings/wallpaper/WallpaperTypeSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.wallpaper;
-import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -113,6 +112,7 @@
SearchIndexableRaw data = new SearchIndexableRaw(context);
data.title = label.toString();
+ data.key = "wallpaper_type_settings";
data.screenTitle = context.getResources().getString(
R.string.wallpaper_settings_fragment_title);
data.intentAction = Intent.ACTION_SET_WALLPAPER;
diff --git a/src/com/android/settings/webview/WebViewAppPreferenceController.java b/src/com/android/settings/webview/WebViewAppPreferenceController.java
index 9410af7..18d874e 100644
--- a/src/com/android/settings/webview/WebViewAppPreferenceController.java
+++ b/src/com/android/settings/webview/WebViewAppPreferenceController.java
@@ -23,7 +23,7 @@
import com.android.settings.applications.defaultapps.DefaultAppPreferenceController;
/**
- * Deprecated in favor of {@link com.android.settings.development.WebViewAppPreferenceControllerV2}
+ * Deprecated in favor of {@link com.android.settings.development.WebViewAppPreferenceController}
*/
@Deprecated
public class WebViewAppPreferenceController extends DefaultAppPreferenceController {
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 14db3d3..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;
@@ -68,7 +64,6 @@
import com.android.settingslib.wifi.AccessPoint;
import com.android.settingslib.wifi.AccessPoint.AccessPointListener;
import com.android.settingslib.wifi.AccessPointPreference;
-import com.android.settingslib.wifi.WifiSavedConfigUtils;
import com.android.settingslib.wifi.WifiTracker;
import com.android.settingslib.wifi.WifiTrackerFactory;
@@ -492,7 +487,7 @@
WifiConfiguration config = mSelectedAccessPoint.getConfig();
// Some configs are ineditable
- if (isEditabilityLockedDown(getActivity(), config)) {
+ if (WifiUtils.isNetworkLockedDown(getActivity(), config)) {
return;
}
@@ -595,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;
@@ -1117,78 +1112,10 @@
data.key = DATA_KEY_REFERENCE;
result.add(data);
- // Add saved Wi-Fi access points
- final List<AccessPoint> accessPoints =
- WifiSavedConfigUtils.getAllConfigs(context,
- context.getSystemService(WifiManager.class));
- for (AccessPoint accessPoint : accessPoints) {
- data = new SearchIndexableRaw(context);
- data.title = accessPoint.getSsidStr();
- data.screenTitle = res.getString(R.string.wifi_settings);
- data.enabled = enabled;
- result.add(data);
- }
-
return result;
}
};
- /**
- * 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/wifi/tether/WifiTetherSettings.java b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
index 1569bfc..d06ad4a 100644
--- a/src/com/android/settings/wifi/tether/WifiTetherSettings.java
+++ b/src/com/android/settings/wifi/tether/WifiTetherSettings.java
@@ -28,6 +28,7 @@
import android.os.Bundle;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
+import android.text.TextUtils;
import android.util.Log;
import com.android.internal.logging.nano.MetricsProto;
@@ -40,6 +41,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
public class WifiTetherSettings extends RestrictedDashboardFragment
implements WifiTetherBasePreferenceController.OnTetherConfigUpdateListener {
@@ -156,6 +158,7 @@
config.SSID = mSSIDPreferenceController.getSSID();
config.preSharedKey = mPasswordPreferenceController.getPassword();
+ ensureWifiConfigHasPassword(config);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA2_PSK);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.apBand = mApBandPreferenceController.getBandIndex();
@@ -177,6 +180,15 @@
}
@VisibleForTesting
+ static void ensureWifiConfigHasPassword(WifiConfiguration config) {
+ if (TextUtils.isEmpty(config.preSharedKey)) {
+ String randomUUID = UUID.randomUUID().toString();
+ //first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
+ config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9, 13);
+ }
+ }
+
+ @VisibleForTesting
class TetherChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context content, Intent intent) {
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/res/values-mcc999/config.xml b/tests/robotests/res/values-mcc999/config.xml
index c2909ac..4113c90 100644
--- a/tests/robotests/res/values-mcc999/config.xml
+++ b/tests/robotests/res/values-mcc999/config.xml
@@ -15,7 +15,9 @@
-->
<resources>
+ <bool name="config_tintSettingIcon">false</bool>
<bool name="config_enableColorTemperature">false</bool>
<bool name="config_show_camera_laser_sensor">false</bool>
<bool name="config_show_connectivity_monitor">false</bool>
+ <bool name="config_display_recent_apps">false</bool>
</resources>
\ No newline at end of file
diff --git a/tests/robotests/res/values/config.xml b/tests/robotests/res/values/config.xml
index 9e2d911..4004106 100644
--- a/tests/robotests/res/values/config.xml
+++ b/tests/robotests/res/values/config.xml
@@ -20,4 +20,5 @@
<bool name="config_enableColorTemperature">true</bool>
<bool name="config_show_camera_laser_sensor">true</bool>
<bool name="config_show_connectivity_monitor">true</bool>
+ <bool name="config_display_recent_apps">true</bool>
</resources>
\ No newline at end of file
diff --git a/tests/robotests/src/android/util/FeatureFlagUtils.java b/tests/robotests/src/android/util/FeatureFlagUtils.java
index 189336b..e9dc966 100644
--- a/tests/robotests/src/android/util/FeatureFlagUtils.java
+++ b/tests/robotests/src/android/util/FeatureFlagUtils.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.os.SystemProperties;
+import android.provider.Settings;
import android.text.TextUtils;
import java.util.HashMap;
@@ -37,13 +38,24 @@
* @return true if the flag is enabled (either by default in system, or override by user)
*/
public static boolean isEnabled(Context context, String feature) {
- // Tries to get feature flag from system property.
- // Step 1: check if feature flag has any override. Flag name: sys.fflag.override.<feature>
- String value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature);
+ // Override precedence:
+ // Settings.Global -> sys.fflag.override.* -> sys.fflag.*
+
+ // Step 1: check if feature flag is set in Settings.Global.
+ String value;
+ if (context != null) {
+ value = Settings.Global.getString(context.getContentResolver(), feature);
+ if (!TextUtils.isEmpty(value)) {
+ return Boolean.parseBoolean(value);
+ }
+ }
+
+ // Step 2: check if feature flag has any override. Flag name: sys.fflag.override.<feature>
+ value = SystemProperties.get(FFLAG_OVERRIDE_PREFIX + feature);
if (!TextUtils.isEmpty(value)) {
return Boolean.parseBoolean(value);
}
- // Step 2: check if feature flag has any default value. Flag name: sys.fflag.<feature>
+ // Step 3: check if feature flag has any default value. Flag name: sys.fflag.<feature>
value = SystemProperties.get(FFLAG_PREFIX + feature);
return Boolean.parseBoolean(value);
}
@@ -51,7 +63,7 @@
/**
* Override feature flag to new state.
*/
- public static void setEnabled(String feature, boolean enabled) {
+ public static void setEnabled(Context context, String feature, boolean enabled) {
SystemProperties.set(FFLAG_OVERRIDE_PREFIX + feature, enabled ? "true" : "false");
}
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 8cedaf1..56343e2 100644
--- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -16,20 +16,34 @@
package com.android.settings;
+import static com.android.settings.DeviceInfoSettings.NON_SIM_PREFERENCES_COUNT;
+import static com.android.settings.DeviceInfoSettings.SIM_PREFERENCES_COUNT;
+
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.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.app.Activity;
import android.content.Context;
import android.os.Build;
+import android.os.SystemProperties;
import android.support.v7.preference.PreferenceScreen;
+import android.telephony.TelephonyManager;
+import android.util.FeatureFlagUtils;
+import android.view.View;
+import com.android.settings.core.FeatureFlags;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.XmlTestUtils;
+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;
@@ -40,34 +54,48 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import org.robolectric.util.ReflectionHelpers;
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
- manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION_O,
- shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
+ manifest = TestConfig.MANIFEST_PATH,
+ sdk = TestConfig.SDK_VERSION_O,
+ shadows = {ShadowUtils.class, ShadowConnectivityManager.class, ShadowUserManager.class}
)
public class DeviceInfoSettingsTest {
@Mock
+ private Activity mActivity;
+ @Mock
private PreferenceScreen mScreen;
@Mock
private SummaryLoader mSummaryLoader;
+ @Mock
+ private TelephonyManager mTelephonyManager;
+ private Context mContext;
private DeviceInfoSettings mSettings;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
mSettings = spy(new DeviceInfoSettings());
+
+ doReturn(mActivity).when(mSettings).getActivity();
+ doReturn(mContext.getTheme()).when(mActivity).getTheme();
+ doReturn(mContext.getResources()).when(mSettings).getResources();
+ doNothing().when(mSettings).onCreatePreferences(any(), any());
+
doReturn(mScreen).when(mSettings).getPreferenceScreen();
+ doReturn(mTelephonyManager).when(mSettings).getSystemService(Context.TELEPHONY_SERVICE);
}
@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
@@ -91,4 +119,32 @@
assertThat(keys).containsAllIn(niks);
}
+
+ @Test
+ @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class,
+ SettingsShadowSystemProperties.class})
+ public void onCreate_singleSim_shouldAddSingleSimCount() {
+ SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2,
+ "true");
+ doReturn(1).when(mTelephonyManager).getPhoneCount();
+
+ mSettings.onCreate(null /* icicle */);
+
+ verify(mScreen).setInitialExpandedChildrenCount(
+ SIM_PREFERENCES_COUNT + NON_SIM_PREFERENCES_COUNT);
+ }
+
+ @Test
+ @Config(shadows = {SettingsShadowResources.SettingsShadowTheme.class,
+ SettingsShadowSystemProperties.class})
+ public void onCreate_dualeSim_shouldAddDualSimCount() {
+ SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + FeatureFlags.DEVICE_INFO_V2,
+ "true");
+ doReturn(2).when(mTelephonyManager).getPhoneCount();
+
+ mSettings.onCreate(null /* icicle */);
+
+ verify(mScreen).setInitialExpandedChildrenCount(
+ 2 * SIM_PREFERENCES_COUNT + NON_SIM_PREFERENCES_COUNT);
+ }
}
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/SetupChooseLockPatternTest.java b/tests/robotests/src/com/android/settings/SetupChooseLockPatternTest.java
index 206ba95..17d1021 100644
--- a/tests/robotests/src/com/android/settings/SetupChooseLockPatternTest.java
+++ b/tests/robotests/src/com/android/settings/SetupChooseLockPatternTest.java
@@ -30,6 +30,7 @@
import com.android.settings.password.SetupChooseLockPattern;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.SettingsShadowResourcesImpl;
import com.android.settings.testutils.shadow.ShadowEventLogWriter;
import com.android.settings.testutils.shadow.ShadowUtils;
@@ -44,9 +45,10 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = {
SettingsShadowResources.class,
+ SettingsShadowResourcesImpl.class,
SettingsShadowResources.SettingsShadowTheme.class,
ShadowEventLogWriter.class,
ShadowUtils.class
@@ -62,7 +64,7 @@
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
- mActivity = Robolectric.buildActivity(
+ mActivity = Robolectric.buildActivity(
SetupChooseLockPattern.class,
SetupChooseLockPattern.modifyIntentForSetup(
application,
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/accessibility/AccessibilitySettingsTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
index fb32da1..6616537 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilitySettingsTest.java
@@ -33,7 +33,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 AccessibilitySettingsTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/accessibility/ShortcutServicePickerFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ShortcutServicePickerFragmentTest.java
index 66621a0..2e95c73 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ShortcutServicePickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ShortcutServicePickerFragmentTest.java
@@ -41,7 +41,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 ShortcutServicePickerFragmentTest {
private static final String TEST_SERVICE_KEY_1 = "abc/123";
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
index 5ef5a12..8d1d174 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragmentTest.java
@@ -38,7 +38,7 @@
import org.robolectric.util.FragmentTestUtil;
@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/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
index cfed83b..8924551 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java
@@ -55,7 +55,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)
public class AccountDetailDashboardFragmentTest {
private static final String METADATA_CATEGORY = "com.android.settings.category";
@@ -63,8 +63,6 @@
private static final String METADATA_USER_HANDLE = "user_handle";
@Mock(answer = RETURNS_DEEP_STUBS)
- private Activity mActivity;
- @Mock(answer = RETURNS_DEEP_STUBS)
private AccountManager mAccountManager;
@Mock
private Preference mPreference;
@@ -129,11 +127,11 @@
@Test
public void refreshDashboardTiles_HasAccountType_shouldAddAccountNameToIntent() {
- FakeFeatureFactory.setupForTest(mActivity);
+ FakeFeatureFactory.setupForTest(mContext);
final FakeFeatureFactory featureFactory =
- (FakeFeatureFactory) FakeFeatureFactory.getFactory(mActivity);
+ (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
final DashboardFeatureProviderImpl dashboardFeatureProvider =
- new DashboardFeatureProviderImpl(mActivity);
+ new DashboardFeatureProviderImpl(mContext);
final PackageManager packageManager = mock(PackageManager.class);
ReflectionHelpers.setField(dashboardFeatureProvider, "mPackageManager", packageManager);
when(packageManager.resolveActivity(any(Intent.class), anyInt()))
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java
index 4380e5c..1b20e96 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountHeaderPreferenceControllerTest.java
@@ -56,7 +56,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = AccountHeaderPreferenceControllerTest.ShadowAuthenticatorHelper.class
)
public class AccountHeaderPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
index 139bee7..6daaeca 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceControllerTest.java
@@ -68,7 +68,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
public class AccountPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceTest.java b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceTest.java
index 0778043..4399580 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountPreferenceTest.java
@@ -35,7 +35,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 AccountPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountSyncPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AccountSyncPreferenceControllerTest.java
index 5fbd3a7..dde68f5 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountSyncPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountSyncPreferenceControllerTest.java
@@ -47,7 +47,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowAccountManager.class, ShadowContentResolver.class})
public class AccountSyncPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/accounts/AccountTypePreferenceLoaderTest.java b/tests/robotests/src/com/android/settings/accounts/AccountTypePreferenceLoaderTest.java
index fff73b7..2e7f0fa 100644
--- a/tests/robotests/src/com/android/settings/accounts/AccountTypePreferenceLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AccountTypePreferenceLoaderTest.java
@@ -50,7 +50,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class AccountTypePreferenceLoaderTest {
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/accounts/AddUserWhenLockedPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AddUserWhenLockedPreferenceControllerTest.java
index faaf7db..e00a0ae 100644
--- a/tests/robotests/src/com/android/settings/accounts/AddUserWhenLockedPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AddUserWhenLockedPreferenceControllerTest.java
@@ -41,7 +41,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class AddUserWhenLockedPreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/accounts/AutoSyncDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AutoSyncDataPreferenceControllerTest.java
index 4715f88..336de21 100644
--- a/tests/robotests/src/com/android/settings/accounts/AutoSyncDataPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AutoSyncDataPreferenceControllerTest.java
@@ -44,14 +44,14 @@
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 AutoSyncDataPreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS)
private PreferenceScreen mScreen;
@Mock(answer = RETURNS_DEEP_STUBS)
private UserManager mUserManager;
- @Mock(answer = RETURNS_DEEP_STUBS)
+ @Mock
private Fragment mFragment;
private Preference mPreference;
diff --git a/tests/robotests/src/com/android/settings/accounts/AutoSyncPersonalDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AutoSyncPersonalDataPreferenceControllerTest.java
index 597fbd4..50d4df8 100644
--- a/tests/robotests/src/com/android/settings/accounts/AutoSyncPersonalDataPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AutoSyncPersonalDataPreferenceControllerTest.java
@@ -42,7 +42,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 AutoSyncPersonalDataPreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java
index a25aa28..35a8bb6 100644
--- a/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/AutoSyncWorkDataPreferenceControllerTest.java
@@ -42,7 +42,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 AutoSyncWorkDataPreferenceControllerTest {
private static int MANAGED_PROFILE_ID = 10;
diff --git a/tests/robotests/src/com/android/settings/accounts/ProviderPreferenceTest.java b/tests/robotests/src/com/android/settings/accounts/ProviderPreferenceTest.java
index 4e4bb4f..4d1667f 100644
--- a/tests/robotests/src/com/android/settings/accounts/ProviderPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/ProviderPreferenceTest.java
@@ -32,7 +32,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 ProviderPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java
index d4e866f..8250340 100644
--- a/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/RemoveAccountPreferenceControllerTest.java
@@ -40,6 +40,7 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v14.preference.PreferenceFragment;
+import android.support.v7.preference.PreferenceManager;
import android.support.v7.preference.PreferenceScreen;
import android.widget.Button;
@@ -60,7 +61,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class RemoveAccountPreferenceControllerTest {
private static final String KEY_REMOVE_ACCOUNT = "remove_account";
@@ -70,9 +71,11 @@
private AccountManager mAccountManager;
@Mock
private DevicePolicyManagerWrapper mDevicePolicyManager;
- @Mock(answer = RETURNS_DEEP_STUBS)
+ @Mock
private PreferenceFragment mFragment;
@Mock
+ private PreferenceManager mPreferenceManager;
+ @Mock
private PreferenceScreen mScreen;
@Mock
private FragmentManager mFragmentManager;
@@ -92,7 +95,8 @@
mContext = spy(shadowContext.getApplicationContext());
when(mFragment.getPreferenceScreen()).thenReturn(mScreen);
- when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
+ when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
+ when(mPreferenceManager.getContext()).thenReturn(mContext);
when(mFragment.getFragmentManager()).thenReturn(mFragmentManager);
when(mFragmentManager.beginTransaction()).thenReturn(mFragmentTransaction);
when(mAccountManager.getAuthenticatorTypesAsUser(anyInt())).thenReturn(
diff --git a/tests/robotests/src/com/android/settings/accounts/RemoveUserFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/RemoveUserFragmentTest.java
index cd73068..ef23d22 100644
--- a/tests/robotests/src/com/android/settings/accounts/RemoveUserFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/RemoveUserFragmentTest.java
@@ -28,7 +28,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 RemoveUserFragmentTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java
index 8dba2f2..2383ed1 100644
--- a/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accounts/UserAndAccountDashboardFragmentTest.java
@@ -43,7 +43,7 @@
import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class UserAndAccountDashboardFragmentTest {
private static final String METADATA_CATEGORY = "com.android.settings.category";
diff --git a/tests/robotests/src/com/android/settings/applications/AppAndNotificationDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/applications/AppAndNotificationDashboardFragmentTest.java
index 5a798f9..55141f7 100644
--- a/tests/robotests/src/com/android/settings/applications/AppAndNotificationDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppAndNotificationDashboardFragmentTest.java
@@ -16,32 +16,35 @@
package com.android.settings.applications;
-import android.content.Context;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
import android.os.UserManager;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.notification.EmergencyBroadcastPreferenceController;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.XmlTestUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
import java.util.List;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.when;
-
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class AppAndNotificationDashboardFragmentTest {
@Test
+ @Config(shadows = {ShadowEmergencyBroadcastPreferenceController.class})
public void testNonIndexableKeys_existInXmlLayout() {
final Context context = spy(RuntimeEnvironment.application);
UserManager manager = mock(UserManager.class);
@@ -56,4 +59,13 @@
assertThat(keys).containsAllIn(niks);
}
+
+ @Implements(EmergencyBroadcastPreferenceController.class)
+ public static class ShadowEmergencyBroadcastPreferenceController {
+
+ @Implementation
+ public boolean isAvailable() {
+ return true;
+ }
+ }
}
diff --git a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
index 62395f3..75ae458 100644
--- a/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppInfoWithHeaderTest.java
@@ -16,6 +16,13 @@
package com.android.settings.applications;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -49,14 +56,8 @@
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.util.ReflectionHelpers;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = ShadowEntityHeaderController.class)
public class AppInfoWithHeaderTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
index 2e52214..b0f0d0c 100644
--- a/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppPermissionsPreferenceControllerTest.java
@@ -46,7 +46,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 AppPermissionsPreferenceControllerTest {
private static final String PERM_LOCATION = "android.permission-group.LOCATION";
diff --git a/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java
index d63697e..6fadb43 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStateAppOpsBridgeTest.java
@@ -37,7 +37,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 final class AppStateAppOpsBridgeTest {
@Mock private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java b/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java
index 62623e5..c88f878 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStateInstallAppsBridgeTest.java
@@ -28,7 +28,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 AppStateInstallAppsBridgeTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java b/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java
index 1f6aea4..d254074 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStorageSettingsTest.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 AppStorageSettingsTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java b/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java
index 027bd33..62cb26c 100644
--- a/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppStorageSizesControllerTest.java
@@ -8,8 +8,10 @@
import android.content.Context;
import android.support.v7.preference.Preference;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.R;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
import org.junit.Before;
import org.junit.Test;
@@ -18,11 +20,8 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import com.android.settings.R;
-import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
-
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class AppStorageSizesControllerTest {
private static final String COMPUTING = "Computing…";
private static final String INVALID_SIZE = "Couldn’t compute package size.";
@@ -85,9 +84,9 @@
mController.setResult(result);
mController.updateUi(mContext);
- assertThat(mAppPreference.getSummary()).isEqualTo("1.00 B");
- assertThat(mCachePreference.getSummary()).isEqualTo("10.00 B");
- assertThat(mDataPreference.getSummary()).isEqualTo("90.00 B");
+ assertThat(mAppPreference.getSummary()).isEqualTo("1 B");
+ assertThat(mCachePreference.getSummary()).isEqualTo("10 B");
+ assertThat(mDataPreference.getSummary()).isEqualTo("90 B");
assertThat(mTotalPreference.getSummary()).isEqualTo("101 B");
}
@@ -103,10 +102,10 @@
mController.setCacheCleared(true);
mController.updateUi(mContext);
- assertThat(mAppPreference.getSummary()).isEqualTo("1.00 B");
- assertThat(mCachePreference.getSummary()).isEqualTo("0.00 B");
- assertThat(mDataPreference.getSummary()).isEqualTo("90.00 B");
- assertThat(mTotalPreference.getSummary()).isEqualTo("91.00 B");
+ assertThat(mAppPreference.getSummary()).isEqualTo("1 B");
+ assertThat(mCachePreference.getSummary()).isEqualTo("0 B");
+ assertThat(mDataPreference.getSummary()).isEqualTo("90 B");
+ assertThat(mTotalPreference.getSummary()).isEqualTo("91 B");
}
@Test
@@ -121,9 +120,9 @@
mController.setDataCleared(true);
mController.updateUi(mContext);
- assertThat(mAppPreference.getSummary()).isEqualTo("1.00 B");
- assertThat(mCachePreference.getSummary()).isEqualTo("0.00 B");
- assertThat(mDataPreference.getSummary()).isEqualTo("0.00 B");
- assertThat(mTotalPreference.getSummary()).isEqualTo("1.00 B");
+ assertThat(mAppPreference.getSummary()).isEqualTo("1 B");
+ assertThat(mCachePreference.getSummary()).isEqualTo("0 B");
+ assertThat(mDataPreference.getSummary()).isEqualTo("0 B");
+ assertThat(mTotalPreference.getSummary()).isEqualTo("1 B");
}
}
diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
index 33d261f..eb3d94f 100644
--- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsCounterTest.java
@@ -56,7 +56,7 @@
* Tests for {@link InstalledAppCounter}.
*/
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public final class AppWithAdminGrantedPermissionsCounterTest {
private final String APP_1 = "app1";
diff --git a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java
index 2e9328a..d7c8059 100644
--- a/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/AppWithAdminGrantedPermissionsListerTest.java
@@ -55,7 +55,7 @@
* Tests for {@link AppWithAdminGrantedPermissionsLister}.
*/
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public final class AppWithAdminGrantedPermissionsListerTest {
private final String APP_1 = "app1";
diff --git a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
index e5b7a66..dad02ef 100644
--- a/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/applications/ApplicationFeatureProviderImplTest.java
@@ -55,7 +55,7 @@
* Tests for {@link ApplicationFeatureProviderImpl}.
*/
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowUserManager.class})
public final class ApplicationFeatureProviderImplTest {
diff --git a/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
index 9441707..78ec265 100644
--- a/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
@@ -52,7 +52,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 DefaultAppSettingsTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java b/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java
index 5d20a4c..38c0128 100644
--- a/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/DrawOverlayDetailsTest.java
@@ -46,7 +46,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DrawOverlayDetailsTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/EnterpriseDefaultAppsTest.java b/tests/robotests/src/com/android/settings/applications/EnterpriseDefaultAppsTest.java
index 10caf13..8014dbb 100644
--- a/tests/robotests/src/com/android/settings/applications/EnterpriseDefaultAppsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/EnterpriseDefaultAppsTest.java
@@ -27,7 +27,7 @@
import static junit.framework.Assert.assertTrue;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class EnterpriseDefaultAppsTest {
@Test
public void testNumberOfIntentsCorrelateWithUI() throws Exception {
diff --git a/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java b/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java
index 3269acb..d34b2eb 100644
--- a/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/FetchPackageStorageAsyncLoaderTest.java
@@ -44,7 +44,7 @@
import java.io.IOException;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class FetchPackageStorageAsyncLoaderTest {
private static final String PACKAGE_NAME = "com.test.package";
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java
index 58c4386..def8758 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppCounterTest.java
@@ -61,7 +61,7 @@
* Tests for {@link InstalledAppCounter}.
*/
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowUserManager.class})
public final class InstalledAppCounterTest {
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
index 58a9577..b8a27b9 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
@@ -17,6 +17,7 @@
package com.android.settings.applications;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.anyDouble;
import static org.mockito.Matchers.anyInt;
@@ -83,9 +84,9 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
- manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
- shadows = InstalledAppDetailsTest.ShadowUtils.class
+ manifest = TestConfig.MANIFEST_PATH,
+ sdk = TestConfig.SDK_VERSION_O,
+ shadows = InstalledAppDetailsTest.ShadowUtils.class
)
public final class InstalledAppDetailsTest {
@@ -192,7 +193,7 @@
when(stats.getTotalBytes()).thenReturn(1L);
assertThat(InstalledAppDetails.getStorageSummary(context, stats, true))
- .isEqualTo("1.00 B used in external storage");
+ .isEqualTo("1 B used in external storage");
}
@Test
@@ -202,7 +203,7 @@
when(stats.getTotalBytes()).thenReturn(1L);
assertThat(InstalledAppDetails.getStorageSummary(context, stats, false))
- .isEqualTo("1.00 B used in internal storage");
+ .isEqualTo("1 B used in internal storage");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java
index c74deae..6a5cfeb 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppListerTest.java
@@ -57,7 +57,7 @@
* Tests for {@link InstalledAppLister}.
*/
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public final class InstalledAppListerTest {
private final String APP_1 = "app1";
diff --git a/tests/robotests/src/com/android/settings/applications/NotificationAppsTest.java b/tests/robotests/src/com/android/settings/applications/NotificationAppsTest.java
index 11d757f..735a811 100644
--- a/tests/robotests/src/com/android/settings/applications/NotificationAppsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/NotificationAppsTest.java
@@ -49,7 +49,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class NotificationAppsTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/PictureInPictureDetailsTest.java b/tests/robotests/src/com/android/settings/applications/PictureInPictureDetailsTest.java
index 02b8c7a..b998b81e 100644
--- a/tests/robotests/src/com/android/settings/applications/PictureInPictureDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/PictureInPictureDetailsTest.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 PictureInPictureDetailsTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java b/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java
index d379dbd..85b398a 100644
--- a/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/PictureInPictureSettingsTest.java
@@ -51,7 +51,7 @@
import java.util.Collections;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class PictureInPictureSettingsTest {
private static final int PRIMARY_USER_ID = 0;
diff --git a/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java b/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java
index 30ebcde..dedb61d 100644
--- a/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java
+++ b/tests/robotests/src/com/android/settings/applications/PremiumSmsAccessTest.java
@@ -38,7 +38,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class PremiumSmsAccessTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java
index 5e85f9b..d0d8a3b 100644
--- a/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java
@@ -16,13 +16,30 @@
package com.android.settings.applications;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+import static org.mockito.Matchers.anyLong;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.argThat;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.app.Application;
import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
-import android.content.res.Configuration;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;
@@ -31,14 +48,13 @@
import android.text.TextUtils;
import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.applications.ApplicationsState;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mockito.Answers;
import org.mockito.ArgumentMatcher;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
@@ -47,25 +63,9 @@
import java.util.ArrayList;
import java.util.List;
-import java.util.Locale;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.argThat;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.doNothing;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class RecentAppsPreferenceControllerTest {
@Mock
@@ -76,14 +76,18 @@
private Preference mSeeAllPref;
@Mock
private PreferenceCategory mDivider;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mMockContext;
@Mock
private UsageStatsManager mUsageStatsManager;
@Mock
private UserManager mUserManager;
@Mock
private ApplicationsState mAppState;
+ @Mock
+ private PackageManager mPackageManager;
+ @Mock
+ private ApplicationsState.AppEntry mAppEntry;
+ @Mock
+ private ApplicationInfo mApplicationInfo;
private Context mContext;
private RecentAppsPreferenceController mController;
@@ -91,12 +95,11 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- when(mMockContext.getSystemService(Context.USAGE_STATS_SERVICE))
- .thenReturn(mUsageStatsManager);
- when(mMockContext.getSystemService(Context.USER_SERVICE))
- .thenReturn(mUserManager);
+ mContext = spy(RuntimeEnvironment.application);
+ doReturn(mUsageStatsManager).when(mContext).getSystemService(Context.USAGE_STATS_SERVICE);
+ doReturn(mUserManager).when(mContext).getSystemService(Context.USER_SERVICE);
+ doReturn(mPackageManager).when(mContext).getPackageManager();
- mContext = RuntimeEnvironment.application;
mController = new RecentAppsPreferenceController(mContext, mAppState, null);
when(mScreen.findPreference(anyString())).thenReturn(mCategory);
@@ -125,7 +128,7 @@
@Test
public void onDisplayAndUpdateState_shouldRefreshUi() {
mController = spy(
- new RecentAppsPreferenceController(mMockContext, (Application) null, null));
+ new RecentAppsPreferenceController(mContext, (Application) null, null));
doNothing().when(mController).refreshUi(mContext);
@@ -136,11 +139,8 @@
}
@Test
+ @Config(qualifiers = "mcc999")
public void display_shouldNotShowRecents_showAppInfoPreference() {
- mController = new RecentAppsPreferenceController(mMockContext, mAppState, null);
- when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps))
- .thenReturn(false);
-
mController.displayPreference(mScreen);
verify(mCategory, never()).addPreference(any(Preference.class));
@@ -152,8 +152,6 @@
@Test
public void display_showRecents() {
- when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps))
- .thenReturn(true);
final List<UsageStats> stats = new ArrayList<>();
final UsageStats stat1 = new UsageStats();
final UsageStats stat2 = new UsageStats();
@@ -172,20 +170,17 @@
// stat1, stat2 are valid apps. stat3 is invalid.
when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId()))
- .thenReturn(mock(ApplicationsState.AppEntry.class));
+ .thenReturn(mAppEntry);
when(mAppState.getEntry(stat2.mPackageName, UserHandle.myUserId()))
- .thenReturn(mock(ApplicationsState.AppEntry.class));
+ .thenReturn(mAppEntry);
when(mAppState.getEntry(stat3.mPackageName, UserHandle.myUserId()))
.thenReturn(null);
- when(mMockContext.getPackageManager().resolveActivity(any(Intent.class), anyInt()))
- .thenReturn(new ResolveInfo());
+ when(mPackageManager.resolveActivity(any(Intent.class), anyInt())).thenReturn(
+ new ResolveInfo());
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
.thenReturn(stats);
- final Configuration configuration = new Configuration();
- configuration.locale = Locale.US;
- when(mMockContext.getResources().getConfiguration()).thenReturn(configuration);
+ mAppEntry.info = mApplicationInfo;
- mController = new RecentAppsPreferenceController(mMockContext, mAppState, null);
mController.displayPreference(mScreen);
verify(mCategory).setTitle(R.string.recent_app_category_title);
@@ -200,8 +195,6 @@
@Test
public void display_hasRecentButNoneDisplayable_showAppInfo() {
- when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps))
- .thenReturn(true);
final List<UsageStats> stats = new ArrayList<>();
final UsageStats stat1 = new UsageStats();
final UsageStats stat2 = new UsageStats();
@@ -218,12 +211,11 @@
.thenReturn(mock(ApplicationsState.AppEntry.class));
when(mAppState.getEntry(stat2.mPackageName, UserHandle.myUserId()))
.thenReturn(mock(ApplicationsState.AppEntry.class));
- when(mMockContext.getPackageManager().resolveActivity(any(Intent.class), anyInt()))
- .thenReturn(new ResolveInfo());
+ when(mPackageManager.resolveActivity(any(Intent.class), anyInt())).thenReturn(
+ new ResolveInfo());
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
.thenReturn(stats);
- mController = new RecentAppsPreferenceController(mMockContext, mAppState, null);
mController.displayPreference(mScreen);
verify(mCategory, never()).addPreference(any(Preference.class));
@@ -234,8 +226,6 @@
@Test
public void display_showRecents_formatSummary() {
- when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps))
- .thenReturn(true);
final List<UsageStats> stats = new ArrayList<>();
final UsageStats stat1 = new UsageStats();
stat1.mLastTimeUsed = System.currentTimeMillis();
@@ -243,17 +233,13 @@
stats.add(stat1);
when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId()))
- .thenReturn(mock(ApplicationsState.AppEntry.class));
- when(mMockContext.getPackageManager().resolveActivity(any(Intent.class), anyInt()))
- .thenReturn(new ResolveInfo());
+ .thenReturn(mAppEntry);
+ when(mPackageManager.resolveActivity(any(Intent.class), anyInt())).thenReturn(
+ new ResolveInfo());
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
- .thenReturn(stats);
+ .thenReturn(stats);
+ mAppEntry.info = mApplicationInfo;
- final Configuration configuration = new Configuration();
- configuration.locale = Locale.US;
- when(mMockContext.getResources().getConfiguration()).thenReturn(configuration);
-
- mController = new RecentAppsPreferenceController(mMockContext, mAppState, null);
mController.displayPreference(mScreen);
verify(mCategory).addPreference(argThat(summaryMatches("0 min. ago")));
diff --git a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
index f17addd..09bfc29 100644
--- a/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/SpecialAppAccessPreferenceControllerTest.java
@@ -36,7 +36,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 SpecialAppAccessPreferenceControllerTest {
private Context mContext;
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java
index 1a3aeb5..64ef4ff 100644
--- a/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/UsageAccessDetailsTest.java
@@ -41,7 +41,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class UsageAccessDetailsTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java b/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java
index d2f1bbd..5f9ec95 100644
--- a/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/VrListenerSettingsTest.java
@@ -36,7 +36,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 VrListenerSettingsTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java b/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java
index a995394..6cd07e3 100644
--- a/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/WriteSettingsDetailsTest.java
@@ -36,7 +36,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 WriteSettingsDetailsTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
index c59ac18..253d6ea 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
@@ -46,7 +46,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 AssistContextPreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
index 1dec8d0..e062291 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistFlashScreenPreferenceControllerTest.java
@@ -51,7 +51,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 AssistFlashScreenPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/assist/AssistSettingObserverTest.java b/tests/robotests/src/com/android/settings/applications/assist/AssistSettingObserverTest.java
index f0956c7..431cfba 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistSettingObserverTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistSettingObserverTest.java
@@ -29,7 +29,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 AssistSettingObserverTest {
private AssistSettingObserver mObserver;
diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPickerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPickerTest.java
index 65f0b46..1018872 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPickerTest.java
@@ -40,7 +40,7 @@
import static org.mockito.Mockito.spy;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultAssistPickerTest {
private static ComponentName sTestAssist;
diff --git a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
index 180abbb..199862f 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/DefaultAssistPreferenceControllerTest.java
@@ -56,7 +56,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 DefaultAssistPreferenceControllerTest {
private static final String TEST_KEY = "test_pref_key";
diff --git a/tests/robotests/src/com/android/settings/applications/assist/ManageAssistTest.java b/tests/robotests/src/com/android/settings/applications/assist/ManageAssistTest.java
index 1b4fb09..6abf09d 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/ManageAssistTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/ManageAssistTest.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 ManageAssistTest {
private ManageAssist mSettings;
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
index d4cd6da..0b933c6 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
@@ -17,11 +17,17 @@
package com.android.settings.applications.defaultapps;
import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+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.ApplicationInfo;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
@@ -39,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 DefaultAppInfoTest {
@Mock
@@ -50,15 +56,24 @@
private PackageManager mPackageManager;
@Mock
private PackageManagerWrapper mPackageManagerWrapper;
+ @Mock
+ private ApplicationInfo mApplicationInfo;
+ @Mock
+ private Drawable mIcon;
private Context mContext;
private DefaultAppInfo mInfo;
@Before
- public void setUp() {
+ public void setUp() throws PackageManager.NameNotFoundException {
MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
+ mContext = spy(RuntimeEnvironment.application);
+ doReturn(mPackageManager).when(mContext).getPackageManager();
when(mPackageManagerWrapper.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManagerWrapper.getApplicationInfoAsUser(anyString(), anyInt(),
+ anyInt())).thenReturn(mApplicationInfo);
+ when(mPackageManager.loadUnbadgedItemIcon(mPackageItemInfo, mApplicationInfo)).thenReturn(
+ mIcon);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
index 42a6225..804df51 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPickerFragmentTest.java
@@ -51,7 +51,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 DefaultAppPickerFragmentTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
index a02a2de..f16c05e 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceControllerTest.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 DefaultAppPreferenceControllerTest {
private static final String TEST_APP_NAME = "test";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
index 06d3b8b..61d7f34 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPickerTest.java
@@ -43,7 +43,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 DefaultAutofillPickerTest {
private static final String TEST_APP_KEY = "foo.bar/foo.bar.Baz";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java
index bc72ee4..8a181d8 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceControllerTest.java
@@ -46,7 +46,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultAutofillPreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
index e8a6c1e..934c4c6 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPickerTest.java
@@ -39,7 +39,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultBrowserPickerTest {
private static final String TEST_APP_KEY = "";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
index 8d527ff..b3406a1 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java
@@ -48,7 +48,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultBrowserPreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java
index 124817a..d499ac2 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultEmergencyPickerTest.java
@@ -41,7 +41,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultEmergencyPickerTest {
private static final String TEST_APP_KEY = "test_app";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
index 4b82f1a..4680a08 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePickerTest.java
@@ -59,7 +59,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultHomePickerTest {
private static final String TEST_APP_KEY = "com.android.settings/DefaultEmergencyPickerTest";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java
index 8a8cc29..cf19655 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceControllerTest.java
@@ -51,7 +51,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultHomePreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java
index 6a73269..025d50a 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPaymentSettingsPreferenceControllerTest.java
@@ -42,7 +42,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 DefaultPaymentSettingsPreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java
index f2b7db8..b1bea25 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultPhonePickerTest.java
@@ -43,7 +43,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultPhonePickerTest {
private static final String TEST_APP_KEY = "com.android.settings/PickerTest";
diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java
index 91e68ea..e9bdfe3 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultSmsPickerTest.java
@@ -42,7 +42,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultSmsPickerTest {
private static final String TEST_APP_KEY = "com.android.settings/PickerTest";
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
index 982fb56..2dde6f4 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
@@ -35,7 +35,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 AppFilterItemTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
index 3fe5e67..ccd8470 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
@@ -60,7 +60,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 AppFilterRegistryTest {
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
index c32b262..ebc0ddc 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
@@ -37,7 +37,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 ApplicationViewHolderTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
index dfe8e4c..d208194 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
@@ -73,7 +73,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
// TODO: Consider making the shadow class set global using a robolectric.properties file.
@Config(manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = {
SettingsShadowResources.class,
SettingsShadowTheme.class,
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java
index fc761cc..c7f2f53 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.applications.manageapplications;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.nullable;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -27,6 +28,7 @@
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
import android.provider.DocumentsContract;
+import android.text.format.Formatter;
import android.view.View;
import android.widget.FrameLayout;
@@ -46,7 +48,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class MusicViewHolderControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Fragment mFragment;
@@ -75,7 +77,8 @@
public void storageShouldBeZeroBytesIfQueriedBeforeStorageQueryFinishes() {
mController.setupView(mHolder);
- assertThat(mHolder.mSummary.getText().toString()).isEqualTo("0.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo(
+ Formatter.formatFileSize(mContext, 0));
}
@Test
@@ -86,7 +89,8 @@
mController.queryStats();
mController.setupView(mHolder);
- assertThat(mHolder.mSummary.getText().toString()).isEqualTo("1.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo(
+ Formatter.formatFileSize(mContext, 1));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java
index 0a147ac..fd25921 100644
--- a/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.applications.manageapplications;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.nullable;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -26,6 +27,7 @@
import android.content.Intent;
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
+import android.text.format.Formatter;
import android.view.View;
import android.widget.FrameLayout;
@@ -44,11 +46,12 @@
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 PhotosViewHolderControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Fragment mFragment;
- @Mock private StorageStatsSource mSource;
+ @Mock
+ private StorageStatsSource mSource;
private Context mContext;
private PhotosViewHolderController mController;
@@ -74,7 +77,8 @@
public void storageShouldBeZeroBytesIfQueriedBeforeStorageQueryFinishes() {
mController.setupView(mHolder);
- assertThat(mHolder.mSummary.getText().toString()).isEqualTo("0.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo(
+ Formatter.formatFileSize(mContext, 0));
}
@Test
@@ -85,7 +89,8 @@
mController.queryStats();
mController.setupView(mHolder);
- assertThat(mHolder.mSummary.getText().toString()).isEqualTo("11.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo(
+ Formatter.formatFileSize(mContext, 11));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java
index 5fc3ebc..39cc9a2 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityPreferenceControllerTest.java
@@ -45,7 +45,7 @@
import org.robolectric.annotation.Implements;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {BackupSettingsActivityPreferenceControllerTest.ShadowBackupManager.class})
public class BackupSettingsActivityPreferenceControllerTest {
private static final String KEY_BACKUP_SETTINGS = "backup_settings";
diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java
index 44c7e10..cf3cb53 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsActivityTest.java
@@ -58,7 +58,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {BackupSettingsActivityTest.ShadowBackupSettingsHelper.class,
BackupSettingsActivityTest.ShadowUserHandle.class})
public class BackupSettingsActivityTest {
diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
index 9de0c6a..eb33cd6 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsHelperTest.java
@@ -50,7 +50,7 @@
import com.android.settingslib.drawer.SettingsDrawerActivity;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {BackupSettingsHelperTest.ShadowBackupManagerStub.class})
public class BackupSettingsHelperTest {
diff --git a/tests/robotests/src/com/android/settings/backup/BackupSettingsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/backup/BackupSettingsPreferenceControllerTest.java
index 3ad49e7..83d9709 100644
--- a/tests/robotests/src/com/android/settings/backup/BackupSettingsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/backup/BackupSettingsPreferenceControllerTest.java
@@ -41,7 +41,7 @@
import android.support.v7.preference.PreferenceScreen;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {BackupSettingsPreferenceControllerTest.ShadowBackupSettingsHelper.class})
public class BackupSettingsPreferenceControllerTest {
private static final String BACKUP_SETTINGS = "backup_settings";
diff --git a/tests/robotests/src/com/android/settings/bluetooth/AlwaysDiscoverableTest.java b/tests/robotests/src/com/android/settings/bluetooth/AlwaysDiscoverableTest.java
index fd46b4b..3cc90bd 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/AlwaysDiscoverableTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/AlwaysDiscoverableTest.java
@@ -41,7 +41,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 AlwaysDiscoverableTest {
@Mock
private LocalBluetoothAdapter mLocalAdapter;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java
index 7b0a3f23..e7ce7e0 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.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,
shadows = SettingsShadowBluetoothDevice.class)
public class BluetoothDetailsButtonsControllerTest extends BluetoothDetailsControllerTestBase {
private BluetoothDetailsButtonsController mController;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsControllerTestBase.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsControllerTestBase.java
index 33a5ed5..b03ecc1 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsControllerTestBase.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsControllerTestBase.java
@@ -28,14 +28,20 @@
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
+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 BluetoothDetailsControllerTestBase {
protected Context mContext;
protected Lifecycle mLifecycle;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
index 544b590..cd07a90 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceDetailsFragmentTest.java
@@ -53,7 +53,7 @@
import org.robolectric.fakes.RoboMenu;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class BluetoothDeviceDetailsFragmentTest {
private BluetoothDeviceDetailsFragment mFragment;
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java
index 2e094e2..93de52d 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceNamePreferenceControllerTest.java
@@ -40,7 +40,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 BluetoothDeviceNamePreferenceControllerTest {
private static final String DEVICE_NAME = "Nightshade";
private static final int ORDER = 1;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDevicePreferenceTest.java
index ac0720a..3dd97bb 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;
@@ -48,9 +49,10 @@
import static org.mockito.Mockito.when;
@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)
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/BluetoothDeviceRenamePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.java
index cde95cd..186e274 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDeviceRenamePreferenceControllerTest.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 BluetoothDeviceRenamePreferenceControllerTest {
private static final String DEVICE_NAME = "Nightshade";
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/BluetoothEnablerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothEnablerTest.java
index b973edb..102f0a7 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothEnablerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothEnablerTest.java
@@ -58,7 +58,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O, shadows = {
SettingsShadowResources.class, SettingsShadowResources.SettingsShadowTheme.class
})
public class BluetoothEnablerTest {
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java
index cdaf876..ed63fc4 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothFilesPreferenceControllerTest.java
@@ -35,7 +35,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class BluetoothFilesPreferenceControllerTest {
private Context mContext;
private BluetoothFilesPreferenceController mController;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java
index c9d5746..534cace 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothMasterSwitchPreferenceControllerTest.java
@@ -47,7 +47,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class BluetoothMasterSwitchPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java
index d1d4935..2b30ae4 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDetailTest.java
@@ -52,7 +52,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 BluetoothPairingDetailTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
index fba11de..25a24d4 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingDialogTest.java
@@ -53,7 +53,7 @@
import org.robolectric.util.FragmentTestUtil;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows=ShadowEventLogWriter.class)
public class BluetoothPairingDialogTest {
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java
index 4459f61..192e447 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothPairingPreferenceControllerTest.java
@@ -49,7 +49,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 BluetoothPairingPreferenceControllerTest {
private static final int ORDER = 1;
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java
index 0061ee5..e7a66fa 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsSummaryProviderTest.java
@@ -35,7 +35,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 BluetoothSettingsSummaryProviderTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java
index c772560..b177729 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSettingsTest.java
@@ -50,7 +50,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 BluetoothSettingsTest {
private static final String FOOTAGE_MAC_STRING = "Bluetooth mac: xxxx";
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
index 0c27412..cb04347 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothSummaryUpdaterTest.java
@@ -51,7 +51,7 @@
import java.util.Set;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class BluetoothSummaryUpdaterTest {
private static final String DEVICE_NAME = "Nightshade";
private static final String DEVICE_KEYBOARD_NAME = "Bluetooth Keyboard";
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/bluetooth/DeviceListPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
index 49efecb..169db24 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/DeviceListPreferenceFragmentTest.java
@@ -49,7 +49,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 DeviceListPreferenceFragmentTest {
private static final String FOOTAGE_MAC_STRING = "Bluetooth mac: xxxx";
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java
index 3294ffd..f9b392e 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/DevicePickerFragmentTest.java
@@ -30,7 +30,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 DevicePickerFragmentTest {
@Mock
private LocalBluetoothAdapter mLocalAdapter;
diff --git a/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java b/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
index a6793bb..56454b8 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/DeviceProfilesSettingsTest.java
@@ -56,7 +56,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = {
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O, shadows = {
ShadowEventLogWriter.class
})
public class DeviceProfilesSettingsTest {
diff --git a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
index 9343721..71e9933 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/ForgetDeviceDialogFragmentTest.java
@@ -46,7 +46,7 @@
import org.robolectric.shadows.ShadowDialog;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class ForgetDeviceDialogFragmentTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java b/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java
index a8ef4e6..65fe46c 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/RemoteDeviceNameDialogFragmentTest.java
@@ -50,7 +50,7 @@
import org.robolectric.util.FragmentTestUtil;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class RemoteDeviceNameDialogFragmentTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/bluetooth/UtilsTest.java b/tests/robotests/src/com/android/settings/bluetooth/UtilsTest.java
index e0d4638..43583ed 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/UtilsTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/UtilsTest.java
@@ -41,7 +41,7 @@
import static org.mockito.Mockito.when;
@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)
public class UtilsTest {
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..4bcb299 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment2Test.java
@@ -50,8 +50,8 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class ConnectedDeviceDashboardFragmentTest {
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+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/connecteddevice/UsbModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java
index 7edde6e..59a5172 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/UsbModePreferenceControllerTest.java
@@ -26,7 +26,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class UsbModePreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
index 14da5d6..c9469a8 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardAdapterTest.java
@@ -68,7 +68,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = {
SettingsShadowResources.class,
SettingsShadowResources.SettingsShadowTheme.class,
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
index cc4f741..a3483fb 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardDataTest.java
@@ -49,7 +49,7 @@
import java.util.Objects;
@RunWith(RobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DashboardDataTest {
private static final String TEST_SUGGESTION_TITLE = "Use fingerprint";
private static final String TEST_CATEGORY_TILE_TITLE = "Display";
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
index a977872..559e989 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java
@@ -17,10 +17,13 @@
package com.android.settings.dashboard;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
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 static org.robolectric.RuntimeEnvironment.application;
@@ -30,7 +33,8 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.graphics.Bitmap;
import android.graphics.drawable.Icon;
import android.os.Bundle;
@@ -60,6 +64,7 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowActivity;
import org.robolectric.shadows.ShadowApplication;
@@ -69,7 +74,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = ShadowUserManager.class)
public class DashboardFeatureProviderImplTest {
@@ -79,21 +84,28 @@
private UserManager mUserManager;
@Mock
private CategoryManager mCategoryManager;
+ @Mock
+ private PackageManager mPackageManager;
private FakeFeatureFactory mFeatureFactory;
+ private Context mContext;
private DashboardFeatureProviderImpl mImpl;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = spy(RuntimeEnvironment.application);
+ doReturn(mPackageManager).when(mContext).getPackageManager();
+ when(mPackageManager.resolveActivity(any(Intent.class), anyInt())).thenReturn(
+ new ResolveInfo());
FakeFeatureFactory.setupForTest(mActivity);
mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mActivity);
- mImpl = new DashboardFeatureProviderImpl(mActivity);
+ mImpl = new DashboardFeatureProviderImpl(mContext);
}
@Test
public void shouldHoldAppContext() {
- assertThat(mImpl.mContext).isEqualTo(mActivity.getApplicationContext());
+ assertThat(mImpl.mContext).isEqualTo(mContext.getApplicationContext());
}
@Test
@@ -342,7 +354,7 @@
}
@Test
- public void bindPreference_withIntentActionMetatdata_shouldSetLaunchAction() {
+ public void bindPreference_withIntentActionMetadata_shouldSetLaunchAction() {
Activity activity = Robolectric.buildActivity(Activity.class).get();
final ShadowApplication application = ShadowApplication.getInstance();
final Preference preference = new Preference(application.getApplicationContext());
@@ -437,14 +449,13 @@
}
@Test
- public void testShouldTintIcon_shouldReturnValueFromResource() {
- final Resources res = mActivity.getApplicationContext().getResources();
- when(res.getBoolean(R.bool.config_tintSettingIcon))
- .thenReturn(false);
- assertThat(mImpl.shouldTintIcon()).isFalse();
-
- when(res.getBoolean(R.bool.config_tintSettingIcon))
- .thenReturn(true);
+ public void testShouldTintIcon_enabledInResources_shouldBeTrue() {
assertThat(mImpl.shouldTintIcon()).isTrue();
}
+
+ @Test
+ @Config(qualifiers = "mcc999")
+ public void testShouldTintIcon_disabledInResources_shouldBeFalse() {
+ assertThat(mImpl.shouldTintIcon()).isFalse();
+ }
}
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
index 9ba0807..2ee1837 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFragmentTest.java
@@ -58,7 +58,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 DashboardFragmentTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java
index cda9a22..bb24435 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardItemAnimatorTest.java
@@ -31,7 +31,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 DashboardItemAnimatorTest {
private DashboardItemAnimator mDashboardItemAnimator;
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java
index f3ed57c..2437565 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardSummaryTest.java
@@ -47,7 +47,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DashboardSummaryTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardTilePlaceholderPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardTilePlaceholderPreferenceControllerTest.java
index c48f30c..6ea3222 100644
--- a/tests/robotests/src/com/android/settings/dashboard/DashboardTilePlaceholderPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/DashboardTilePlaceholderPreferenceControllerTest.java
@@ -37,7 +37,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DashboardTilePlaceholderPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
index 44b6139..92ed7b4 100644
--- a/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/SummaryLoaderTest.java
@@ -41,7 +41,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 SummaryLoaderTest {
private static final String SUMMARY_1 = "summary1";
diff --git a/tests/robotests/src/com/android/settings/dashboard/SupportItemAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/SupportItemAdapterTest.java
index 3dd5266..52c8fbb 100644
--- a/tests/robotests/src/com/android/settings/dashboard/SupportItemAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/SupportItemAdapterTest.java
@@ -49,7 +49,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)
public class SupportItemAdapterTest {
private static final String ACCOUNT_TYPE = "com.google";
private final Account USER_1 = new Account("user1", ACCOUNT_TYPE);
diff --git a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java
index d943fe3..03165c6 100644
--- a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionAdapterTest.java
@@ -43,7 +43,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class ConditionAdapterTest {
@Mock
private Condition mCondition1;
diff --git a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java
index d077e6f..623f762 100644
--- a/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/conditional/ConditionTest.java
@@ -41,7 +41,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class ConditionTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/dashboard/conditional/DndConditionTest.java b/tests/robotests/src/com/android/settings/dashboard/conditional/DndConditionTest.java
index e46ae9e..aa81a1c 100644
--- a/tests/robotests/src/com/android/settings/dashboard/conditional/DndConditionTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/conditional/DndConditionTest.java
@@ -35,7 +35,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DndConditionTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/EventStoreTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/EventStoreTest.java
index 114ee2b..9598c1e 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/EventStoreTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/EventStoreTest.java
@@ -29,7 +29,7 @@
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class EventStoreTest {
private EventStore mEventStore;
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
index 1a170c8..b052527 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionAdapterTest.java
@@ -62,7 +62,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 SuggestionAdapterTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java
index c48978c..ad97e18 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionControllerMixinTest.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,
shadows = {
ShadowSuggestionController.class
})
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
index 4aced2f..c94f200 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionDismissControllerTest.java
@@ -46,7 +46,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 SuggestionDismissControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeaturizerTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeaturizerTest.java
index 4d6a743..f5e342b 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeaturizerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionFeaturizerTest.java
@@ -32,7 +32,7 @@
import org.robolectric.RuntimeEnvironment;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SuggestionFeaturizerTest {
private EventStore mEventStore;
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionRankerTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionRankerTest.java
index 1f32531..3698e4e 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionRankerTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionRankerTest.java
@@ -41,7 +41,7 @@
import static org.mockito.Mockito.spy;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class SuggestionRankerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionStateProviderTest.java b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionStateProviderTest.java
index 2122d54..6ddba03 100644
--- a/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionStateProviderTest.java
+++ b/tests/robotests/src/com/android/settings/dashboard/suggestions/SuggestionStateProviderTest.java
@@ -38,7 +38,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 SuggestionStateProviderTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
index 15ca6e4..4f7e216 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsagePreferenceTest.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,
shadows = ShadowThreadUtils.class)
public class AppDataUsagePreferenceTest {
diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
index 26071ed..75fec68 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java
@@ -57,7 +57,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,
shadows = ShadowEntityHeaderController.class)
public class AppDataUsageTest {
diff --git a/tests/robotests/src/com/android/settings/datausage/AppPrefLoaderTest.java b/tests/robotests/src/com/android/settings/datausage/AppPrefLoaderTest.java
index ac28e1d..b6547ab 100644
--- a/tests/robotests/src/com/android/settings/datausage/AppPrefLoaderTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/AppPrefLoaderTest.java
@@ -44,7 +44,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class AppPrefLoaderTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java b/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java
index 8b635d2..d735342 100644
--- a/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/BillingCycleSettingsTest.java
@@ -38,7 +38,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class BillingCycleSettingsTest {
private static final int LIMIT_BYTES = 123;
diff --git a/tests/robotests/src/com/android/settings/datausage/DataPlanSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataPlanSummaryPreferenceTest.java
index 9ddce53..a5dea97 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataPlanSummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataPlanSummaryPreferenceTest.java
@@ -38,7 +38,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,
shadows = {
SettingsShadowResources.class,
SettingsShadowResources.SettingsShadowTheme.class
diff --git a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
index 748c317..cf790e9 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
@@ -45,7 +45,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 DataPlanUsageSummaryTest {
@Mock
private ConnectivityManager mManager;
diff --git a/tests/robotests/src/com/android/settings/datausage/DataPlansSyncTimePreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/DataPlansSyncTimePreferenceTest.java
index ba2d5f1..1e2565e 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataPlansSyncTimePreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataPlansSyncTimePreferenceTest.java
@@ -35,7 +35,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 final class DataPlansSyncTimePreferenceTest {
private static final String SYNC_TIME = "Today 12:24pm";
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageInfoControllerTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageInfoControllerTest.java
index e60243b..57041fd 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageInfoControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageInfoControllerTest.java
@@ -13,7 +13,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 DataUsageInfoControllerTest {
private DataUsageInfoController mInfoController;
private DataUsageInfo info;
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index 9ab88d3..59c99f4 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.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 DataUsageListTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index dc53ca1..179f743 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -48,7 +48,7 @@
import java.util.ArrayList;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DataUsageSummaryTest {
@Mock
private ConnectivityManager mManager;
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageUtilsTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageUtilsTest.java
index cdcd3a9..1dacc68 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageUtilsTest.java
@@ -33,7 +33,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public final class DataUsageUtilsTest {
@Mock private ConnectivityManager mManager;
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/datausage/ManageDataPlansPreferenceTest.java b/tests/robotests/src/com/android/settings/datausage/ManageDataPlansPreferenceTest.java
index 6eff393..e96b4e8 100644
--- a/tests/robotests/src/com/android/settings/datausage/ManageDataPlansPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/ManageDataPlansPreferenceTest.java
@@ -35,7 +35,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 final class ManageDataPlansPreferenceTest {
private Preference mPreference;
private PreferenceViewHolder mHolder;
diff --git a/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java b/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java
index f20e50c..081337f 100644
--- a/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java
@@ -40,7 +40,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 UnrestrictedDataAccessTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/datetime/AutoTimeFormatPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/AutoTimeFormatPreferenceControllerTest.java
index 06969bb..f9784ef 100644
--- a/tests/robotests/src/com/android/settings/datetime/AutoTimeFormatPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/AutoTimeFormatPreferenceControllerTest.java
@@ -40,7 +40,7 @@
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class AutoTimeFormatPreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/datetime/AutoTimePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/AutoTimePreferenceControllerTest.java
index d28cad1..f4c1596 100644
--- a/tests/robotests/src/com/android/settings/datetime/AutoTimePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/AutoTimePreferenceControllerTest.java
@@ -35,7 +35,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 AutoTimePreferenceControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
index 5cbef72..950fd0d 100644
--- a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.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,
shadows = ShadowConnectivityManager.class)
public class AutoTimeZonePreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java
index e6a6dd8..000dd2c 100644
--- a/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/DatePreferenceControllerTest.java
@@ -22,6 +22,7 @@
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settingslib.RestrictedPreference;
import org.junit.Before;
import org.junit.Test;
@@ -36,7 +37,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DatePreferenceControllerTest {
@Mock
@@ -48,14 +49,15 @@
@Mock
private AutoTimePreferenceController mAutoTimePreferenceController;
- private Preference mPreference;
+ private RestrictedPreference mPreference;
private DatePreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
when(mContext.getSystemService(Context.ALARM_SERVICE)).thenReturn(mAlarmManager);
- mPreference = new Preference(ShadowApplication.getInstance().getApplicationContext());
+ mPreference = new RestrictedPreference(ShadowApplication.getInstance().
+ getApplicationContext());
mController = new DatePreferenceController(mContext, mHost, mAutoTimePreferenceController);
}
@@ -72,6 +74,9 @@
@Test
public void updateState_autoTimeEnabled_shouldDisablePref() {
+ // Make sure not disabled by admin.
+ mPreference.setDisabledByAdmin(null);
+
when(mAutoTimePreferenceController.isEnabled()).thenReturn(true);
mController.updateState(mPreference);
@@ -80,6 +85,9 @@
@Test
public void updateState_autoTimeDisabled_shouldEnablePref() {
+ // Make sure not disabled by admin.
+ mPreference.setDisabledByAdmin(null);
+
when(mAutoTimePreferenceController.isEnabled()).thenReturn(false);
mController.updateState(mPreference);
diff --git a/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java b/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java
index ada59f4..524a88e 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java
@@ -39,7 +39,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 TimeChangeListenerMixinTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/datetime/TimeFormatPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/TimeFormatPreferenceControllerTest.java
index cd13513..2e975c3 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimeFormatPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimeFormatPreferenceControllerTest.java
@@ -41,7 +41,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 TimeFormatPreferenceControllerTest {
@Mock(answer = RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java
index 15877e0..afec523 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimePreferenceControllerTest.java
@@ -17,10 +17,11 @@
package com.android.settings.datetime;
import android.content.Context;
-import android.support.v7.preference.Preference;
+import android.os.UserManager;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settingslib.RestrictedPreference;
import org.junit.Before;
import org.junit.Test;
@@ -31,11 +32,12 @@
import org.robolectric.shadows.ShadowApplication;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class TimePreferenceControllerTest {
@Mock
@@ -46,12 +48,13 @@
private AutoTimePreferenceController mAutoTimePreferenceController;
private TimePreferenceController mController;
- private Preference mPreference;
+ private RestrictedPreference mPreference;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mPreference = new Preference(ShadowApplication.getInstance().getApplicationContext());
+ mPreference = new RestrictedPreference(
+ ShadowApplication.getInstance().getApplicationContext());
mController = new TimePreferenceController(mContext, mHost, mAutoTimePreferenceController);
}
@@ -62,6 +65,9 @@
@Test
public void updateState_autoTimeEnabled_shouldDisablePref() {
+ // Make sure not disabled by admin.
+ mPreference.setDisabledByAdmin(null);
+
when(mAutoTimePreferenceController.isEnabled()).thenReturn(true);
mController.updateState(mPreference);
@@ -70,6 +76,9 @@
@Test
public void updateState_autoTimeDisabled_shouldEnablePref() {
+ // Make sure not disabled by admin.
+ mPreference.setDisabledByAdmin(null);
+
when(mAutoTimePreferenceController.isEnabled()).thenReturn(false);
mController.updateState(mPreference);
diff --git a/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java
index 2f96d65..aa10a70 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimeZonePreferenceControllerTest.java
@@ -21,6 +21,7 @@
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settingslib.RestrictedPreference;
import org.junit.Before;
import org.junit.Test;
@@ -36,20 +37,21 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class TimeZonePreferenceControllerTest {
@Mock
private AutoTimeZonePreferenceController mAutoTimeZonePreferenceController;
+
private Context mContext;
private TimeZonePreferenceController mController;
- private Preference mPreference;
+ private RestrictedPreference mPreference;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = ShadowApplication.getInstance().getApplicationContext();
- mPreference = new Preference(mContext);
+ mPreference = new RestrictedPreference(mContext);
mController = spy(new TimeZonePreferenceController(mContext,
mAutoTimeZonePreferenceController));
}
@@ -61,6 +63,9 @@
@Test
public void updateState_autoTimeZoneEnabled_shouldDisablePref() {
+ // Make sure not disabled by admin.
+ mPreference.setDisabledByAdmin(null);
+
doReturn("test timezone").when(mController).getTimeZoneOffsetAndName();
when(mAutoTimeZonePreferenceController.isEnabled()).thenReturn(true);
mController.updateState(mPreference);
@@ -70,6 +75,9 @@
@Test
public void updateState_autoTimeZoneDisabled_shouldEnablePref() {
+ // Make sure not disabled by admin.
+ mPreference.setDisabledByAdmin(null);
+
doReturn("test timezone").when(mController).getTimeZoneOffsetAndName();
when(mAutoTimeZonePreferenceController.isEnabled()).thenReturn(false);
mController.updateState(mPreference);
diff --git a/tests/robotests/src/com/android/settings/datetime/ZonePickerComparatorTest.java b/tests/robotests/src/com/android/settings/datetime/ZonePickerComparatorTest.java
index 4c1794c..10e5e5c 100644
--- a/tests/robotests/src/com/android/settings/datetime/ZonePickerComparatorTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/ZonePickerComparatorTest.java
@@ -23,7 +23,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 ZonePickerComparatorTest {
// Strings in Chinese are sorted by alphabet order of their Pinyin.
diff --git a/tests/robotests/src/com/android/settings/datetime/ZonePickerTest.java b/tests/robotests/src/com/android/settings/datetime/ZonePickerTest.java
index 92807e9..09ff1cd 100644
--- a/tests/robotests/src/com/android/settings/datetime/ZonePickerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/ZonePickerTest.java
@@ -39,7 +39,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 ZonePickerTest {
private Activity mActivity;
diff --git a/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerDescriptionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerDescriptionPreferenceControllerTest.java
index dd438ff..d0f895a 100644
--- a/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerDescriptionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerDescriptionPreferenceControllerTest.java
@@ -23,7 +23,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 AutomaticStorageManagerDescriptionPreferenceControllerTest {
@Mock private PreferenceScreen mScreen;
@Mock private Preference mPreference;
diff --git a/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java
index 38c4ab2..3b98063 100644
--- a/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deletionhelper/AutomaticStorageManagerSwitchBarControllerTest.java
@@ -51,7 +51,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 AutomaticStorageManagerSwitchBarControllerTest {
private Context mContext;
private SwitchBar mSwitchBar;
diff --git a/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java
index 2d75b8a..82086dd 100644
--- a/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerTest.java
@@ -16,16 +16,19 @@
package com.android.settings.development;
+import static com.android.settings.development.BugReportInPowerPreferenceController.COMPONENT_NAME;
+import static com.android.settings.development.BugReportInPowerPreferenceController
+ .SETTING_VALUE_OFF;
+import static com.android.settings.development.BugReportInPowerPreferenceController
+ .SETTING_VALUE_ON;
+
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.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.UserManager;
@@ -35,158 +38,136 @@
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
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;
-import org.robolectric.shadows.ShadowApplication;
+import org.robolectric.util.ReflectionHelpers;
-/**
- * deprecated in favor of {@link BugReportInPowerPreferenceControllerV2}
- */
-@Deprecated
+
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BugReportInPowerPreferenceControllerTest {
- @Mock(answer = RETURNS_DEEP_STUBS)
+ @Mock
private PreferenceScreen mScreen;
@Mock
private UserManager mUserManager;
@Mock
- private PackageManager mPackageManager;
-
+ private PackageManagerWrapper mPackageManager;
+ @Mock
private Context mContext;
+ @Mock
private SwitchPreference mPreference;
+
+ private ContentResolver mContentResolver;
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);
+ mContentResolver = RuntimeEnvironment.application.getContentResolver();
+ when(mContext.getContentResolver()).thenReturn(mContentResolver);
+ when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
mController = new BugReportInPowerPreferenceController(mContext);
- mPreference.setKey(mController.getPreferenceKey());
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
}
@Test
- public void displayPreference_hasDebugRestriction_shouldRemovePreference() {
+ public void isAvailable_hasDebugRestriction_shouldReturnFalse() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isFalse();
+ assertThat(mController.isAvailable()).isFalse();
}
@Test
- public void displayPreference_noDebugRestriction_shouldNotRemovePreference() {
+ public void isAvailable_noDebugRestriction_shouldReturnTrue() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isTrue();
+ assertThat(mController.isAvailable()).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() {
+ public void onDeveloperOptionsSwitchDisabled_preferenceShouldNotBeChecked() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
mController.displayPreference(mScreen);
- mPreference.setEnabled(false);
- mController.enablePreference(true);
+ mController.onDeveloperOptionsSwitchDisabled();
- assertThat(mPreference.isEnabled()).isTrue();
+ verify(mPreference).setChecked(false);
}
@Test
- public void resetPreference_shouldUncheck() {
+ public void onPreferenceChanged_settingDisabled_shouldDisableBugReportInPowerSetting() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
mController.displayPreference(mScreen);
- mPreference.setChecked(true);
- mController.resetPreference();
+ mController.onPreferenceChange(mPreference, false /* new value */);
+ int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Global.BUGREPORT_IN_POWER_MENU, -1 /* default */);
- assertThat(mPreference.isChecked()).isFalse();
+ assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
+ verify(mPackageManager).setComponentEnabledSetting(COMPONENT_NAME,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
}
@Test
- public void handlePreferenceTreeClick_shouldUpdateSettings() {
+ public void onPreferenceChanged_settingEnabled_shouldEnableBugReportInPowerSetting() {
+ when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
+ mController.displayPreference(mScreen);
+
+ mController.onPreferenceChange(mPreference, true /* new value */);
+ int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Global.BUGREPORT_IN_POWER_MENU, -1 /* default */);
+
+ assertThat(mode).isEqualTo(SETTING_VALUE_ON);
+ verify(mPackageManager).setComponentEnabledSetting(COMPONENT_NAME,
+ PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0 /* flags */);
+ }
+
+
+ @Test
+ public void updateState_settingsOn_preferenceShouldBeChecked() {
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);
+ Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_ON);
mController.displayPreference(mScreen);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isTrue();
+ verify(mPreference).setChecked(true);
}
@Test
- public void updateState_settingsOff_shouldUncheck() {
+ public void updateState_settingsOff_preferenceShouldNotBeChecked() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, 0);
- mPreference.setChecked(true);
+ Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
mController.displayPreference(mScreen);
mController.updateState(mPreference);
- assertThat(mPreference.isChecked()).isFalse();
+ verify(mPreference).setChecked(false);
}
@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");
+ public void onDeveloperOptionsSwitchDisabled_shouldTurnOffPreference() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
mController.displayPreference(mScreen);
- mController.updateBugreportOptions();
+ mController.onDeveloperOptionsSwitchDisabled();
+ int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Global.BUGREPORT_IN_POWER_MENU, -1 /* default */);
- verify(mPackageManager).setComponentEnabledSetting(eq(componentName), anyInt(), anyInt());
+ assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
+ verify(mPreference).setChecked(false);
+ verify(mPackageManager).setComponentEnabledSetting(COMPONENT_NAME,
+ PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
}
}
diff --git a/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2Test.java
deleted file mode 100644
index 6fa1400..0000000
--- a/tests/robotests/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2Test.java
+++ /dev/null
@@ -1,174 +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.android.settings.development
- .BugReportInPowerPreferenceControllerV2.COMPONENT_NAME;
-import static com.android.settings.development
- .BugReportInPowerPreferenceControllerV2.SETTING_VALUE_OFF;
-import static com.android.settings.development
- .BugReportInPowerPreferenceControllerV2.SETTING_VALUE_ON;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.ContentResolver;
-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 com.android.settingslib.wrapper.PackageManagerWrapper;
-
-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;
-import org.robolectric.util.ReflectionHelpers;
-
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class BugReportInPowerPreferenceControllerV2Test {
-
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private UserManager mUserManager;
- @Mock
- private PackageManagerWrapper mPackageManager;
- @Mock
- private Context mContext;
- @Mock
- private SwitchPreference mPreference;
-
- private ContentResolver mContentResolver;
- private BugReportInPowerPreferenceControllerV2 mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContentResolver = RuntimeEnvironment.application.getContentResolver();
- when(mContext.getContentResolver()).thenReturn(mContentResolver);
- when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- mController = new BugReportInPowerPreferenceControllerV2(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
- }
-
- @Test
- public void isAvailable_hasDebugRestriction_shouldReturnFalse() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_noDebugRestriction_shouldReturnTrue() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void onDeveloperOptionsSwitchDisabled_preferenceShouldNotBeChecked() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- mController.onDeveloperOptionsSwitchDisabled();
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void onPreferenceChanged_settingDisabled_shouldDisableBugReportInPowerSetting() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- mController.onPreferenceChange(mPreference, false /* new value */);
- int mode = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, -1 /* default */);
-
- assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
- verify(mPackageManager).setComponentEnabledSetting(COMPONENT_NAME,
- PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
- }
-
- @Test
- public void onPreferenceChanged_settingEnabled_shouldEnableBugReportInPowerSetting() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- mController.onPreferenceChange(mPreference, true /* new value */);
- int mode = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, -1 /* default */);
-
- assertThat(mode).isEqualTo(SETTING_VALUE_ON);
- verify(mPackageManager).setComponentEnabledSetting(COMPONENT_NAME,
- PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0 /* flags */);
- }
-
-
- @Test
- public void updateState_settingsOn_preferenceShouldBeChecked() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_ON);
- mController.displayPreference(mScreen);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_settingsOff_preferenceShouldNotBeChecked() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- Settings.Secure.putInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, SETTING_VALUE_OFF);
- mController.displayPreference(mScreen);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void onDeveloperOptionsSwitchDisabled_shouldTurnOffPreference() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- mController.onDeveloperOptionsSwitchDisabled();
- int mode = Settings.Secure.getInt(mContext.getContentResolver(),
- Settings.Global.BUGREPORT_IN_POWER_MENU, -1 /* default */);
-
- assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
- verify(mPreference).setChecked(false);
- verify(mPackageManager).setComponentEnabledSetting(COMPONENT_NAME,
- PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0 /* flags */);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java
index dffa461..908c519 100644
--- a/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerTest.java
@@ -17,14 +17,12 @@
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;
@@ -34,75 +32,37 @@
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)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
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() {
+ public void isAvailable_hasDebugRestriction_shouldBeFalse() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isFalse();
+ assertThat(mController.isAvailable()).isFalse();
}
@Test
- public void displayPreference_noDebugRestriction_shouldNotRemovePreference() {
+ public void isAvailable_noDebugRestriction_shouldBeTrue() {
when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
- mController.displayPreference(mScreen);
-
- assertThat(mPreference.isVisible()).isTrue();
+ assertThat(mController.isAvailable()).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/BugReportPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerV2Test.java
deleted file mode 100644
index 9b4cde6..0000000
--- a/tests/robotests/src/com/android/settings/development/BugReportPreferenceControllerV2Test.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 static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.UserManager;
-
-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;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class BugReportPreferenceControllerV2Test {
-
- @Mock
- private Context mContext;
- @Mock
- private UserManager mUserManager;
-
- private BugReportPreferenceControllerV2 mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- mController = new BugReportPreferenceControllerV2(mContext);
- }
-
- @Test
- public void isAvailable_hasDebugRestriction_shouldBeFalse() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(true);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_noDebugRestriction_shouldBeTrue() {
- when(mUserManager.hasUserRestriction(anyString())).thenReturn(false);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
index 4003d9f..1443d16 100644
--- a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerTest.java
@@ -16,12 +16,16 @@
package com.android.settings.development;
+import static com.android.settings.development.CameraLaserSensorPreferenceController.ENG_BUILD;
+import static com.android.settings.development.CameraLaserSensorPreferenceController
+ .USERDEBUG_BUILD;
+import static com.android.settings.development.CameraLaserSensorPreferenceController.USER_BUILD;
+
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;
@@ -30,43 +34,38 @@
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 org.robolectric.RuntimeEnvironment;
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 Context mContext;
private CameraLaserSensorPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
mController = new CameraLaserSensorPreferenceController(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
+ mController.displayPreference(mScreen);
}
@After
@@ -75,17 +74,13 @@
}
@Test
+ @Config(qualifiers = "mcc999")
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);
@@ -94,9 +89,6 @@
@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);
@@ -105,9 +97,6 @@
@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);
@@ -115,64 +104,67 @@
}
@Test
- public void displayPreference_cameraLaserSensorEnabled_shouldCheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
+ public void updateState_cameraLaserSensorEnabled_shouldCheckedPreference() {
SettingsShadowSystemProperties.set(
CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
Integer.toString(CameraLaserSensorPreferenceController.ENABLED));
SettingsShadowSystemProperties.set(
CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
- mController.displayPreference(mScreen);
+ mController.updateState(mScreen);
verify(mPreference).setChecked(true);
}
@Test
- public void displayPreference_cameraLaserSensorEnabled_shouldUncheckedPreference() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
-
+ public void updateState_cameraLaserSensorEnabled_shouldUncheckedPreference() {
SettingsShadowSystemProperties.set(
CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
Integer.toString(CameraLaserSensorPreferenceController.DISABLED));
SettingsShadowSystemProperties.set(
CameraLaserSensorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
- mController.displayPreference(mScreen);
+ mController.updateState(mScreen);
verify(mPreference).setChecked(false);
}
@Test
- public void handlePreferenceTreeClick_preferenceChecked_shouldEnableCameraLaserSensor() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
+ public void onPreferenceChange_preferenceChecked_shouldEnableCameraLaserSensor() {
+ mController.onPreferenceChange(mPreference, true);
- when(mPreference.isChecked()).thenReturn(true);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(Integer.toString(CameraLaserSensorPreferenceController.ENABLED).equals(
- SystemProperties.get(
+ assertThat(Integer.toString(CameraLaserSensorPreferenceController.ENABLED)).isEqualTo(
+ SystemProperties.get(
CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceController.ENABLED)))).isTrue();
+ Integer.toString(CameraLaserSensorPreferenceController.ENABLED)));
}
@Test
- public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableCameraLaserSensor() {
- when(mContext.getResources().getBoolean(R.bool.config_show_camera_laser_sensor))
- .thenReturn(true);
+ public void onPreferenceChange__preferenceUnchecked_shouldDisableCameraLaserSensor() {
+ mController.onPreferenceChange(mPreference, false);
- when(mPreference.isChecked()).thenReturn(false);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(Integer.toString(CameraLaserSensorPreferenceController.DISABLED).equals(
+ assertThat(Integer.toString(CameraLaserSensorPreferenceController.DISABLED)).isEqualTo(
SystemProperties.get(
CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceController.ENABLED)))).isTrue();
+ Integer.toString(CameraLaserSensorPreferenceController.ENABLED)));
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_preferenceShouldBeEnabled() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_preferenceShouldBeEnabled() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mPreference).setEnabled(false);
+ verify(mPreference).setChecked(false);
+ assertThat(Integer.toString(CameraLaserSensorPreferenceController.DISABLED)).isEqualTo(
+ SystemProperties.get(
+ CameraLaserSensorPreferenceController.PROPERTY_CAMERA_LASER_SENSOR,
+ Integer.toString(CameraLaserSensorPreferenceController.ENABLED)));
}
}
diff --git a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2Test.java
deleted file mode 100644
index 87967b9..0000000
--- a/tests/robotests/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2Test.java
+++ /dev/null
@@ -1,173 +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.android.settings.development.CameraLaserSensorPreferenceControllerV2.ENG_BUILD;
-import static com.android.settings.development
- .CameraLaserSensorPreferenceControllerV2.USERDEBUG_BUILD;
-import static com.android.settings.development.CameraLaserSensorPreferenceControllerV2.USER_BUILD;
-
-import android.content.Context;
-import android.content.res.Resources;
-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 org.robolectric.RuntimeEnvironment;
-
-import static com.google.common.truth.Truth.assertThat;
-
-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 = {SettingsShadowSystemProperties.class})
-public class CameraLaserSensorPreferenceControllerV2Test {
-
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private SwitchPreference mPreference;
-
- private Context mContext;
-
- private CameraLaserSensorPreferenceControllerV2 mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mController = new CameraLaserSensorPreferenceControllerV2(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
- mController.displayPreference(mScreen);
- }
-
- @After
- public void tearDown() {
- SettingsShadowSystemProperties.clear();
- }
-
- @Test
- @Config(qualifiers = "mcc999")
- public void isAvailable_withConfigNoShow_shouldReturnFalse() {
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_withUserdebugBuild_shouldReturnTrue() {
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_withEngBuild_shouldReturnTrue() {
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.BUILD_TYPE, ENG_BUILD);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_withUserBuild_shouldReturnFalse() {
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.BUILD_TYPE, USER_BUILD);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void updateState_cameraLaserSensorEnabled_shouldCheckedPreference() {
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceControllerV2.ENABLED));
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.updateState(mScreen);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_cameraLaserSensorEnabled_shouldUncheckedPreference() {
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceControllerV2.DISABLED));
- SettingsShadowSystemProperties.set(
- CameraLaserSensorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.updateState(mScreen);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void onPreferenceChange_preferenceChecked_shouldEnableCameraLaserSensor() {
- mController.onPreferenceChange(mPreference, true);
-
- assertThat(Integer.toString(CameraLaserSensorPreferenceControllerV2.ENABLED)).isEqualTo(
- SystemProperties.get(
- CameraLaserSensorPreferenceControllerV2.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceControllerV2.ENABLED)));
- }
-
- @Test
- public void onPreferenceChange__preferenceUnchecked_shouldDisableCameraLaserSensor() {
- mController.onPreferenceChange(mPreference, false);
-
- assertThat(Integer.toString(CameraLaserSensorPreferenceControllerV2.DISABLED)).isEqualTo(
- SystemProperties.get(
- CameraLaserSensorPreferenceControllerV2.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceControllerV2.ENABLED)));
- }
-
- @Test
- public void onDeveloperOptionsSwitchEnabled_preferenceShouldBeEnabled() {
- mController.onDeveloperOptionsSwitchEnabled();
-
- verify(mPreference).setEnabled(true);
- }
-
- @Test
- public void onDeveloperOptionsSwitchDisabled_preferenceShouldBeEnabled() {
- mController.onDeveloperOptionsSwitchDisabled();
-
- verify(mPreference).setEnabled(false);
- verify(mPreference).setChecked(false);
- assertThat(Integer.toString(CameraLaserSensorPreferenceControllerV2.DISABLED)).isEqualTo(
- SystemProperties.get(
- CameraLaserSensorPreferenceControllerV2.PROPERTY_CAMERA_LASER_SENSOR,
- Integer.toString(CameraLaserSensorPreferenceControllerV2.ENABLED)));
- }
-}
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
index bb9a6ee..5e99ec9 100644
--- a/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerTest.java
@@ -16,214 +16,205 @@
package com.android.settings.development;
+import static com.android.settings.development.ConnectivityMonitorPreferenceController.ENG_BUILD;
+import static com.android.settings.development.ConnectivityMonitorPreferenceController
+ .USERDEBUG_BUILD;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
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.SettingsRobolectricTestRunner;
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.RuntimeEnvironment;
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)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows =
+ SettingsShadowSystemProperties.class)
public class ConnectivityMonitorPreferenceControllerTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
+ private static final String USER_BUILD = "user";
+
@Mock
private PreferenceScreen mScreen;
@Mock
private SwitchPreference mPreference;
+ private Context mContext;
private ConnectivityMonitorPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
SettingsShadowSystemProperties.clear();
+ mContext = RuntimeEnvironment.application;
mController = new ConnectivityMonitorPreferenceController(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
+ mController.displayPreference(mScreen);
}
- @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");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
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");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, ENG_BUILD);
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");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USER_BUILD);
assertThat(mController.isAvailable()).isFalse();
}
- @Config(shadows = {SettingsShadowSystemProperties.class})
@Test
+ @Config(qualifiers = "mcc999")
public void isAvailable_falseShowFlagWithUserdebugBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(false);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
assertThat(mController.isAvailable()).isFalse();
}
- @Config(shadows = {SettingsShadowSystemProperties.class})
@Test
+ @Config(qualifiers = "mcc999")
public void isAvailable_falseShowFlagWithEngBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(false);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "eng");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, ENG_BUILD);
assertThat(mController.isAvailable()).isFalse();
}
- @Config(shadows = {SettingsShadowSystemProperties.class})
@Test
+ @Config(qualifiers = "mcc999")
public void isAvailable_falseShowFlagWithUserBuild_shouldReturnFalse() {
- when(mContext.getResources().getBoolean(R.bool.config_show_connectivity_monitor))
- .thenReturn(false);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "user");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USER_BUILD);
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);
+ public void updateState_connectivityMonitorEnabled_shouldCheckedPreference() {
SettingsShadowSystemProperties.set(
ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
ConnectivityMonitorPreferenceController.ENABLED_STATUS);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
- mController.displayPreference(mScreen);
+ mController.updateState(mPreference);
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);
+ public void updateState_connectivityMonitorUserEnabled_shouldCheckedPreference() {
SettingsShadowSystemProperties.set(
ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
ConnectivityMonitorPreferenceController.USER_ENABLED_STATUS);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
- mController.displayPreference(mScreen);
+ mController.updateState(mPreference);
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);
+ public void updateState_connectivityMonitorDisabled_shouldUncheckedPreference() {
SettingsShadowSystemProperties.set(
ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
ConnectivityMonitorPreferenceController.DISABLED_STATUS);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
- mController.displayPreference(mScreen);
+ mController.updateState(mPreference);
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);
+ public void updateState_connectivityMonitorUserDisabled_shouldUncheckedPreference() {
SettingsShadowSystemProperties.set(
ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS);
SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceController.BUILD_TYPE, "userdebug");
+ ConnectivityMonitorPreferenceController.BUILD_TYPE, USERDEBUG_BUILD);
- mController.displayPreference(mScreen);
+ mController.updateState(mPreference);
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");
+ public void onPreferenceChange_preferenceChecked_shouldEnableConnectivityMonitor() {
+ SystemProperties.set(
+ ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
+ ConnectivityMonitorPreferenceController.USER_ENABLED_STATUS);
mController.handlePreferenceTreeClick(mPreference);
- assertThat(ConnectivityMonitorPreferenceController.USER_ENABLED_STATUS.equals(
+ assertThat(ConnectivityMonitorPreferenceController.USER_ENABLED_STATUS).isEqualTo(
SystemProperties.get(
ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.DISABLED_STATUS))).isTrue();
+ ConnectivityMonitorPreferenceController.DISABLED_STATUS));
}
- @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");
+ public void onPreferenceChange_preferenceUnchecked_shouldDisableConnectivityMonitor() {
+ SystemProperties.set(
+ ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
+ ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS);
mController.handlePreferenceTreeClick(mPreference);
- assertThat(ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS.equals(
+ assertThat(ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS).isEqualTo(
SystemProperties.get(
ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceController.DISABLED_STATUS))).isTrue();
+ ConnectivityMonitorPreferenceController.DISABLED_STATUS));
}
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ String mode = SystemProperties.get(
+ ConnectivityMonitorPreferenceController.PROPERTY_CONNECTIVITY_MONITOR,
+ null /* default */);
+
+ assertThat(mode).isEqualTo(ConnectivityMonitorPreferenceController.USER_DISABLED_STATUS);
+ verify(mPreference).setEnabled(false);
+ verify(mPreference).setChecked(false);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2Test.java
deleted file mode 100644
index 5b4f594..0000000
--- a/tests/robotests/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2Test.java
+++ /dev/null
@@ -1,220 +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.android.settings.development.ConnectivityMonitorPreferenceControllerV2.ENG_BUILD;
-import static com.android.settings.development
- .ConnectivityMonitorPreferenceControllerV2.USERDEBUG_BUILD;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.content.Context;
-import android.os.SystemProperties;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.PreferenceScreen;
-
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
-
-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, shadows =
- SettingsShadowSystemProperties.class)
-public class ConnectivityMonitorPreferenceControllerV2Test {
-
- private static final String USER_BUILD = "user";
-
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private SwitchPreference mPreference;
-
- private Context mContext;
- private ConnectivityMonitorPreferenceControllerV2 mController;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- SettingsShadowSystemProperties.clear();
- mContext = RuntimeEnvironment.application;
- mController = new ConnectivityMonitorPreferenceControllerV2(mContext);
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- mController.displayPreference(mScreen);
- }
-
- @Test
- public void isAvailable_trueShowFlagWithUserdebugBuild_shouldReturnTrue() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_trueShowFlagWithEngBuild_shouldReturnTrue() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, ENG_BUILD);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void isAvailable_trueShowFlagWithUserBuild_shouldReturnFalse() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USER_BUILD);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- @Config(qualifiers = "mcc999")
- public void isAvailable_falseShowFlagWithUserdebugBuild_shouldReturnFalse() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- @Config(qualifiers = "mcc999")
- public void isAvailable_falseShowFlagWithEngBuild_shouldReturnFalse() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, ENG_BUILD);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- @Config(qualifiers = "mcc999")
- public void isAvailable_falseShowFlagWithUserBuild_shouldReturnFalse() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USER_BUILD);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void updateState_connectivityMonitorEnabled_shouldCheckedPreference() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.ENABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_connectivityMonitorUserEnabled_shouldCheckedPreference() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.USER_ENABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_connectivityMonitorDisabled_shouldUncheckedPreference() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.DISABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_connectivityMonitorUserDisabled_shouldUncheckedPreference() {
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.USER_DISABLED_STATUS);
- SettingsShadowSystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void onPreferenceChange_preferenceChecked_shouldEnableConnectivityMonitor() {
- SystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.USER_ENABLED_STATUS);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(ConnectivityMonitorPreferenceControllerV2.USER_ENABLED_STATUS).isEqualTo(
- SystemProperties.get(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.DISABLED_STATUS));
- }
-
- @Test
- public void onPreferenceChange_preferenceUnchecked_shouldDisableConnectivityMonitor() {
- SystemProperties.set(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.USER_DISABLED_STATUS);
-
- mController.handlePreferenceTreeClick(mPreference);
-
- assertThat(ConnectivityMonitorPreferenceControllerV2.USER_DISABLED_STATUS).isEqualTo(
- SystemProperties.get(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- ConnectivityMonitorPreferenceControllerV2.DISABLED_STATUS));
- }
-
- @Test
- public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
- mController.onDeveloperOptionsSwitchEnabled();
-
- verify(mPreference).setEnabled(true);
- }
-
- @Test
- public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
- mController.onDeveloperOptionsSwitchDisabled();
-
- String mode = SystemProperties.get(
- ConnectivityMonitorPreferenceControllerV2.PROPERTY_CONNECTIVITY_MONITOR,
- null /* default */);
-
- assertThat(mode).isEqualTo(ConnectivityMonitorPreferenceControllerV2.USER_DISABLED_STATUS);
- verify(mPreference).setEnabled(false);
- verify(mPreference).setChecked(false);
- }
-}
diff --git a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
index 5449353..881ee84 100644
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
@@ -223,10 +223,10 @@
@Test
public void onDisableLogPersistDialogConfirmed_shouldCallControllerDialogConfirmed() {
- final LogPersistPreferenceControllerV2 controller = mock(
- LogPersistPreferenceControllerV2.class);
+ final LogPersistPreferenceController controller = mock(
+ LogPersistPreferenceController.class);
doReturn(controller).when(mDashboard).getDevelopmentOptionsController(
- LogPersistPreferenceControllerV2.class);
+ LogPersistPreferenceController.class);
mDashboard.onDisableLogPersistDialogConfirmed();
verify(controller).onDisableLogPersistDialogConfirmed();
@@ -234,10 +234,10 @@
@Test
public void onDisableLogPersistDialogRejected_shouldCallControllerDialogRejected() {
- final LogPersistPreferenceControllerV2 controller = mock(
- LogPersistPreferenceControllerV2.class);
+ final LogPersistPreferenceController controller = mock(
+ LogPersistPreferenceController.class);
doReturn(controller).when(mDashboard).getDevelopmentOptionsController(
- LogPersistPreferenceControllerV2.class);
+ LogPersistPreferenceController.class);
mDashboard.onDisableLogPersistDialogRejected();
verify(controller).onDisableLogPersistDialogRejected();
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/EnableGpuDebugLayersPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/EnableGpuDebugLayersPreferenceControllerTest.java
new file mode 100644
index 0000000..4f4d4af
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/EnableGpuDebugLayersPreferenceControllerTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.android.settings.development.EnableGpuDebugLayersPreferenceController
+ .SETTING_VALUE_OFF;
+import static com.android.settings.development.EnableGpuDebugLayersPreferenceController
+ .SETTING_VALUE_ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+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.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+public class EnableGpuDebugLayersPreferenceControllerTest {
+
+ @Mock
+ private SwitchPreference mPreference;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+
+ private Context mContext;
+ private EnableGpuDebugLayersPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = new EnableGpuDebugLayersPreferenceController(mContext);
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
+ mPreference);
+ mController.displayPreference(mPreferenceScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_settingEnabled_enableGpuDebugLayersShouldBeOn() {
+ mController.onPreferenceChange(mPreference, true /* new value */);
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, -1 /* default */);
+
+ assertThat(mode).isEqualTo(SETTING_VALUE_ON);
+ }
+
+ @Test
+ public void onPreferenceChange_settingDisabled_enableGpuDebugLayersShouldBeOff() {
+ mController.onPreferenceChange(mPreference, false /* new value */);
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, -1 /* default */);
+
+ assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
+ }
+
+ @Test
+ public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, SETTING_VALUE_OFF);
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(false);
+ }
+
+ @Test
+ public void updateState_settingEnabled_preferenceShouldBeChecked() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, SETTING_VALUE_ON);
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(true);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.ENABLE_GPU_DEBUG_LAYERS, -1 /* default */);
+
+ assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
+ verify(mPreference).setChecked(false);
+ verify(mPreference).setEnabled(false);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerTest.java
similarity index 92%
rename from tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerV2Test.java
rename to tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerTest.java
index ddc0da5..1dc1255 100644
--- a/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerTest.java
@@ -42,7 +42,7 @@
@Config(manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION,
shadows = {SettingsShadowSystemProperties.class})
-public class LogPersistPreferenceControllerV2Test {
+public class LogPersistPreferenceControllerTest {
@Mock
private ListPreference mPreference;
@@ -52,7 +52,7 @@
private DevelopmentSettingsDashboardFragment mFragment;
private Context mContext;
- private LogPersistPreferenceControllerV2 mController;
+ private LogPersistPreferenceController mController;
private Lifecycle mLifecycle;
@Before
@@ -60,7 +60,7 @@
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
mLifecycle = new Lifecycle(() -> mLifecycle);
- mController = new LogPersistPreferenceControllerV2(mContext, mFragment, mLifecycle);
+ mController = new LogPersistPreferenceController(mContext, mFragment, mLifecycle);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
SystemProperties.set("ro.debuggable", "1");
mController.displayPreference(mScreen);
diff --git a/tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerV2Test.java
rename to tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerTest.java
index 71766c3..f7be653 100644
--- a/tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerTest.java
@@ -41,7 +41,7 @@
@Config(manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION,
shadows = {SettingsShadowSystemProperties.class})
-public class LogdSizePreferenceControllerV2Test {
+public class LogdSizePreferenceControllerTest {
@Mock
private PreferenceScreen mScreen;
@@ -61,7 +61,7 @@
private String[] mListValues;
private String[] mListSummaries;
private Context mContext;
- private LogdSizePreferenceControllerV2 mController;
+ private LogdSizePreferenceController mController;
@Before
public void setup() {
@@ -69,7 +69,7 @@
mContext = RuntimeEnvironment.application;
mListValues = mContext.getResources().getStringArray(R.array.select_logd_size_values);
mListSummaries = mContext.getResources().getStringArray(R.array.select_logd_size_summaries);
- mController = new LogdSizePreferenceControllerV2(mContext);
+ mController = new LogdSizePreferenceController(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
mController.displayPreference(mScreen);
}
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
index 3208810..e396ebe 100644
--- a/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerTest.java
@@ -15,6 +15,8 @@
*/
package com.android.settings.development;
+import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
@@ -25,8 +27,8 @@
import android.content.Context;
import android.content.Intent;
-import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.provider.Settings;
import android.provider.Settings.Global;
import android.support.v7.preference.PreferenceScreen;
@@ -34,29 +36,26 @@
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.RestrictedSwitchPreference;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
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;
-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;
+ private PackageManagerWrapper mPackageManager;
@Mock
private PreferenceScreen mScreen;
@Mock
@@ -82,13 +81,13 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- final ShadowApplication shadowContext = ShadowApplication.getInstance();
- mContext = spy(shadowContext.getApplicationContext());
+ mContext = RuntimeEnvironment.application;
when(mScreen.findPreference(anyString())).thenReturn(mPreference);
- when(mContext.getPackageManager()).thenReturn(mPackageManager);
mController = new VerifyAppsOverUsbPreferenceController(mContext);
ReflectionHelpers.setField(
mController, "mRestrictedLockUtils", mRestrictedLockUtilsDelegate);
+ ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
+ mController.displayPreference(mScreen);
}
private void setupVerifyBroadcastReceivers(boolean nonEmpty) {
@@ -105,80 +104,108 @@
}
@Test
- public void updateState_preferenceCheckedWhenSettingIsOn() {
+ public void updateState_settingEnabled_preferenceShouldBeChecked() {
setupVerifyBroadcastReceivers(true);
setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1).set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
+ mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
+ .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
+ mController.updateState(mPreference);
verify(mPreference).setChecked(true);
}
@Test
- public void updateState_preferenceUncheckedWhenSettingIsOff() {
+ public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
setupVerifyBroadcastReceivers(true);
setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1).set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0);
- mController.displayPreference(mScreen);
- mController.updatePreference();
+ mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
+ .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0 /* setting disabled */);
+ mController.updateState(mPreference);
verify(mPreference).setChecked(false);
}
@Test
- public void updateState_preferenceUncheckedWhenNoAdb() {
+ public void updateState_adbDisabled_preferenceShouldNotBeChecked() {
setupVerifyBroadcastReceivers(true);
setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 0).set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
+ mGlobals.set(Global.ADB_ENABLED, 0 /* setting disabled */)
+ .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
+ mController.updateState(mPreference);
verify(mPreference).setChecked(false);
}
@Test
- public void updateState_preferenceUncheckedWhenVerifierIsOff() {
+ public void updateState_verifierOff_preferenceShouldNotBeChecked() {
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();
+ mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
+ .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */)
+ .set(Global.PACKAGE_VERIFIER_ENABLE, 0 /* setting disabled */);
+ mController.updateState(mPreference);
verify(mPreference).setChecked(false);
}
@Test
- public void updateState_preferenceUncheckedWhenNoVerifyBroadcastReceivers() {
+ public void updateState_noBroadcastReceivers_preferenceShouldNotBeChecked() {
setupVerifyBroadcastReceivers(false);
setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1);
- mController.displayPreference(mScreen);
- mController.updatePreference();
+ mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
+ .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
+ mController.updateState(mPreference);
verify(mPreference).setChecked(false);
}
@Test
- public void updateState_preferenceDisabledWhenRestrictedByAdmin() {
+ public void updateState_restrictedByAdmin_preferenceShouldBeDisabled() {
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();
+ mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
+ .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
+ mController.updateState(mPreference);
verify(mPreference).setDisabledByAdmin(admin);
}
@Test
- public void updateState_preferenceRemovedWhenVerifierSettingsVisibleIsOff() {
+ public void isAvailable_verifierNotVisible_shouldReturnFalse() {
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);
+ mGlobals.set(Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 0 /* setting disabled */);
- mController.displayPreference(mScreen);
+ assertThat(mController.isAvailable()).isFalse();
+ }
- verify(mPreference).setVisible(false);
+ @Test
+ public void isAvailable_verifierVisible_shouldReturnTrue() {
+ setupVerifyBroadcastReceivers(true);
+ mGlobals.set(Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1 /* setting enabled */);
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void onPreferenceChange_settingEnabled_shouldEnableUsbVerify() {
+ mController.onPreferenceChange(mPreference, true /* new value */);
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, -1 /* default */);
+
+ assertThat(mode).isEqualTo(VerifyAppsOverUsbPreferenceController.SETTING_VALUE_ON);
+ }
+
+ @Test
+ public void onPreferenceChange_settingDisabled_shouldDisableUsbVerify() {
+ mController.onPreferenceChange(mPreference, false /* new value */);
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, -1 /* default */);
+
+ assertThat(mode).isEqualTo(VerifyAppsOverUsbPreferenceController.SETTING_VALUE_OFF);
+ }
+
+ @Test
+ public void onDeveloperOptionsEnabled_shouldUpdateState() {
+ mController = spy(mController);
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mController).updateState(mPreference);
}
}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2Test.java
deleted file mode 100644
index 9e60295..0000000
--- a/tests/robotests/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2Test.java
+++ /dev/null
@@ -1,211 +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 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.ResolveInfo;
-import android.provider.Settings;
-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 com.android.settingslib.wrapper.PackageManagerWrapper;
-
-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;
-import org.robolectric.util.ReflectionHelpers;
-
-import java.util.Collections;
-import java.util.List;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class VerifyAppsOverUsbPreferenceControllerV2Test {
-
- @Mock
- private PackageManagerWrapper mPackageManager;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private RestrictedSwitchPreference mPreference;
-
- @Mock
- private VerifyAppsOverUsbPreferenceControllerV2.RestrictedLockUtilsDelegate
- mRestrictedLockUtilsDelegate;
-
- private Context mContext;
- private VerifyAppsOverUsbPreferenceControllerV2 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);
- mContext = RuntimeEnvironment.application;
- when(mScreen.findPreference(anyString())).thenReturn(mPreference);
- mController = new VerifyAppsOverUsbPreferenceControllerV2(mContext);
- ReflectionHelpers.setField(
- mController, "mRestrictedLockUtils", mRestrictedLockUtilsDelegate);
- ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
- mController.displayPreference(mScreen);
- }
-
- 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_settingEnabled_preferenceShouldBeChecked() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
- mController.updateState(mPreference);
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 0 /* setting disabled */);
- mController.updateState(mPreference);
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_adbDisabled_preferenceShouldNotBeChecked() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 0 /* setting disabled */)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
- mController.updateState(mPreference);
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_verifierOff_preferenceShouldNotBeChecked() {
- setupVerifyBroadcastReceivers(true);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */)
- .set(Global.PACKAGE_VERIFIER_ENABLE, 0 /* setting disabled */);
- mController.updateState(mPreference);
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_noBroadcastReceivers_preferenceShouldNotBeChecked() {
- setupVerifyBroadcastReceivers(false);
- setupEnforcedAdmin(null);
- mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
- mController.updateState(mPreference);
- verify(mPreference).setChecked(false);
- }
-
- @Test
- public void updateState_restrictedByAdmin_preferenceShouldBeDisabled() {
- setupVerifyBroadcastReceivers(true);
- final EnforcedAdmin admin = new EnforcedAdmin();
- setupEnforcedAdmin(admin);
- mGlobals.set(Global.ADB_ENABLED, 1 /* setting enabled */)
- .set(Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1 /* setting enabled */);
- mController.updateState(mPreference);
- verify(mPreference).setDisabledByAdmin(admin);
- }
-
- @Test
- public void isAvailable_verifierNotVisible_shouldReturnFalse() {
- setupVerifyBroadcastReceivers(true);
- mGlobals.set(Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 0 /* setting disabled */);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_verifierVisible_shouldReturnTrue() {
- setupVerifyBroadcastReceivers(true);
- mGlobals.set(Global.PACKAGE_VERIFIER_SETTING_VISIBLE, 1 /* setting enabled */);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void onPreferenceChange_settingEnabled_shouldEnableUsbVerify() {
- mController.onPreferenceChange(mPreference, true /* new value */);
-
- final int mode = Settings.Global.getInt(mContext.getContentResolver(),
- android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, -1 /* default */);
-
- assertThat(mode).isEqualTo(VerifyAppsOverUsbPreferenceControllerV2.SETTING_VALUE_ON);
- }
-
- @Test
- public void onPreferenceChange_settingDisabled_shouldDisableUsbVerify() {
- mController.onPreferenceChange(mPreference, false /* new value */);
-
- final int mode = Settings.Global.getInt(mContext.getContentResolver(),
- android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, -1 /* default */);
-
- assertThat(mode).isEqualTo(VerifyAppsOverUsbPreferenceControllerV2.SETTING_VALUE_OFF);
- }
-
- @Test
- public void onDeveloperOptionsEnabled_shouldUpdateState() {
- mController = spy(mController);
- mController.onDeveloperOptionsSwitchEnabled();
-
- verify(mController).updateState(mPreference);
- }
-}
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java
similarity index 94%
rename from tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java
rename to tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java
index 4f9540f..59f6e35 100644
--- a/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerTest.java
@@ -43,7 +43,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class WebViewAppPreferenceControllerV2Test {
+public class WebViewAppPreferenceControllerTest {
@Mock
private PreferenceScreen mPreferenceScreen;
@@ -57,13 +57,13 @@
private DefaultAppInfo mAppInfo;
private Context mContext;
- private WebViewAppPreferenceControllerV2 mController;
+ private WebViewAppPreferenceController mController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
- mController = spy(new WebViewAppPreferenceControllerV2(mContext));
+ mController = spy(new WebViewAppPreferenceController(mContext));
ReflectionHelpers.setField(mController, "mPackageManager", mPackageManager);
ReflectionHelpers.setField(mController, "mWebViewUpdateServiceWrapper",
mWebViewUpdateServiceWrapper);
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/network/PrivateDnsModeDialogFragmentTest.java b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogFragmentTest.java
index 3468702..f1d7a73 100644
--- a/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/network/PrivateDnsModeDialogFragmentTest.java
@@ -27,6 +27,7 @@
import android.content.Context;
import android.provider.Settings;
+import android.widget.Button;
import com.android.settings.R;
import com.android.settings.TestConfig;
@@ -43,9 +44,11 @@
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class PrivateDnsModeDialogFragmentTest {
private static final String HOST_NAME = "192.168.1.1";
+ private static final String INVALID_HOST_NAME = "...,";
private Context mContext;
private PrivateDnsModeDialogFragment mFragment;
+ private Button mSaveButton;
@Before
@@ -53,9 +56,12 @@
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
+ mSaveButton = new Button(mContext);
+
mFragment = spy(new PrivateDnsModeDialogFragment());
doReturn(mContext).when(mFragment).getContext();
mFragment.onCreateDialog(null);
+ mFragment.mSaveButton = mSaveButton;
}
@Test
@@ -96,4 +102,19 @@
R.id.private_dns_mode_opportunistic);
}
+ @Test
+ public void testOnCheckedChanged_switchMode_saveButtonHasCorrectState() {
+ // Set invalid hostname
+ mFragment.mEditText.setText(INVALID_HOST_NAME);
+
+ mFragment.onCheckedChanged(null, R.id.private_dns_mode_opportunistic);
+ assertThat(mSaveButton.isEnabled()).isTrue();
+
+ mFragment.onCheckedChanged(null, R.id.private_dns_mode_provider);
+ assertThat(mSaveButton.isEnabled()).isFalse();
+
+ mFragment.onCheckedChanged(null, R.id.private_dns_mode_off);
+ assertThat(mSaveButton.isEnabled()).isTrue();
+ }
+
}
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/search/SiteMapManagerTest.java b/tests/robotests/src/com/android/settings/search/SiteMapManagerTest.java
deleted file mode 100644
index b441b66..0000000
--- a/tests/robotests/src/com/android/settings/search/SiteMapManagerTest.java
+++ /dev/null
@@ -1,145 +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.search;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.sqlite.SQLiteDatabase;
-import android.os.Bundle;
-
-import com.android.settings.SettingsActivity;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.dashboard.SiteMapManager;
-import com.android.settings.search.IndexDatabaseHelper.SiteMapColumns;
-import com.android.settings.system.SystemDashboardFragment;
-import com.android.settings.testutils.DatabaseTestUtils;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settingslib.drawer.CategoryKey;
-import com.android.settingslib.drawer.DashboardCategory;
-import com.android.settingslib.drawer.Tile;
-
-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.RuntimeEnvironment;
-import org.robolectric.annotation.Config;
-
-import java.util.Arrays;
-import java.util.List;
-
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.when;
-
-@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
-public class SiteMapManagerTest {
-
- private static final int STATIC_DB_DEPTH = 4;
- private static final String CLASS_PREFIX = "class_";
- private static final String TITLE_PREFIX = "title_";
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mMockContext;
- private Context mContext;
- private SQLiteDatabase mDb;
- private SiteMapManager mSiteMapManager;
- private FakeFeatureFactory mFeatureFactory;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- FakeFeatureFactory.setupForTest(mMockContext);
- mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mMockContext);
-
- mContext = RuntimeEnvironment.application;
- mDb = IndexDatabaseHelper.getInstance(mContext).getWritableDatabase();
- buildDb();
- mSiteMapManager = new SiteMapManager();
- }
-
- @After
- public void cleanUp() {
- DatabaseTestUtils.clearDb(mContext);
- }
-
- @Test
- public void buildBreadCrumb_onlyFromSiteMapDb_breadcrumbShouldLinkUp() {
- List<String> breadcrumb = mSiteMapManager.buildBreadCrumb(mContext,
- CLASS_PREFIX + 0, TITLE_PREFIX + 0);
- assertThat(breadcrumb.size()).isEqualTo(STATIC_DB_DEPTH + 1);
- for (int i = 0; i < STATIC_DB_DEPTH; i++) {
- assertThat(breadcrumb.get(i)).isEqualTo(TITLE_PREFIX + (STATIC_DB_DEPTH - i));
- }
- }
-
- @Test
- public void buildBreadCrumb_fromSiteMapDbAndDashboardProvider_breadcrumbShouldLinkUp() {
- final String iaClass = SystemDashboardFragment.class.getName();
- final String iaTitle = "ia_title";
-
- ContentValues index = new ContentValues();
- index.put(IndexDatabaseHelper.IndexColumns.CLASS_NAME, iaClass);
- index.put(IndexDatabaseHelper.IndexColumns.SCREEN_TITLE, iaTitle);
- mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_PREFS_INDEX, null, index);
-
- final DashboardCategory category = new DashboardCategory();
- category.key = CategoryKey.CATEGORY_SYSTEM;
- category.tiles.add(new Tile());
- category.tiles.get(0).title = TITLE_PREFIX + STATIC_DB_DEPTH;
- category.tiles.get(0).metaData = new Bundle();
- category.tiles.get(0).metaData.putString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS,
- CLASS_PREFIX + STATIC_DB_DEPTH);
- when(mFeatureFactory.dashboardFeatureProvider.getAllCategories())
- .thenReturn(Arrays.asList(category));
-
- final List<String> breadcrumb = mSiteMapManager.buildBreadCrumb(mContext,
- CLASS_PREFIX + 0, TITLE_PREFIX + 0);
-
- assertThat(breadcrumb.size()).isEqualTo(STATIC_DB_DEPTH + 2);
- assertThat(breadcrumb.get(0))
- .isEqualTo(iaTitle);
- }
-
- @Test
- public void buildBreadCrumb_classNotIndexed_shouldNotHaveBreadCrumb() {
- final String title = "wrong_title";
-
- final List<String> breadcrumb = mSiteMapManager.buildBreadCrumb(mContext,
- "wrong_class", title);
-
- assertThat(breadcrumb.size()).isEqualTo(1);
- assertThat(breadcrumb.get(0)).isEqualTo(title);
- }
-
- private void buildDb() {
- for (int i = 0; i < STATIC_DB_DEPTH; i++) {
- final ContentValues siteMapPair = new ContentValues();
- siteMapPair.put(SiteMapColumns.DOCID, i);
- siteMapPair.put(SiteMapColumns.PARENT_CLASS, CLASS_PREFIX + (i + 1));
- siteMapPair.put(SiteMapColumns.PARENT_TITLE, TITLE_PREFIX + (i + 1));
- siteMapPair.put(SiteMapColumns.CHILD_CLASS, CLASS_PREFIX + i);
- siteMapPair.put(SiteMapColumns.CHILD_TITLE, TITLE_PREFIX + i);
- mDb.replaceOrThrow(IndexDatabaseHelper.Tables.TABLE_SITE_MAP, null, siteMapPair);
- }
- }
-}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
index 183f5ad..b0cd484 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java
@@ -101,6 +101,13 @@
return directlyOn(realResources, Resources.class).getColorStateList(id, theme);
}
+ /**
+ * Deprecated because SDK 24+ uses
+ * {@link SettingsShadowResourcesImpl#loadDrawable(Resources, TypedValue, int, int, Theme)}
+ *
+ * TODO: Delete when all tests have been migrated to sdk 26
+ */
+ @Deprecated
@Implementation
public Drawable loadDrawable(TypedValue value, int id, Theme theme)
throws NotFoundException {
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResourcesImpl.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResourcesImpl.java
new file mode 100644
index 0000000..42b02f3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResourcesImpl.java
@@ -0,0 +1,57 @@
+/*
+ * 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.res.Resources;
+import android.content.res.ResourcesImpl;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.util.TypedValue;
+
+import com.android.settings.R;
+
+import org.robolectric.annotation.Implementation;
+import org.robolectric.annotation.Implements;
+import org.robolectric.shadows.ShadowResourcesImpl;
+
+@Implements(
+ value = ResourcesImpl.class,
+ isInAndroidSdk = false,
+ minSdk = 26
+)
+public class SettingsShadowResourcesImpl extends ShadowResourcesImpl {
+
+ @Implementation
+ public Drawable loadDrawable(Resources wrapper, TypedValue value, int id, int density,
+ Resources.Theme theme) {
+ // The drawable item in switchbar_background.xml refers to a very recent color attribute
+ // that Robolectric isn't yet aware of.
+ // TODO: Remove this once Robolectric is updated.
+ if (id == R.drawable.switchbar_background) {
+ return new ColorDrawable();
+ } else if (id == R.drawable.ic_launcher_settings) {
+ // ic_launcher_settings uses adaptive-icon, which is not supported by robolectric,
+ // change it to a normal drawable.
+ id = R.drawable.ic_settings_wireless;
+ } else if (id == R.drawable.app_filter_spinner_background) {
+ id = R.drawable.ic_expand_more_inverse;
+ } else if (id == R.drawable.selectable_card_grey) {
+ id = R.drawable.ic_expand_more_inverse;
+ }
+ return super.loadDrawable(wrapper, value, id, density, theme);
+ }
+}
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/webview/WebViewAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPreferenceControllerTest.java
index 08ecc9b..9404e53 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPreferenceControllerTest.java
@@ -31,7 +31,7 @@
import org.robolectric.annotation.Config;
/**
- * Deprecated in favor of {@link com.android.settings.development.WebViewAppPreferenceControllerV2}
+ * Deprecated in favor of {@link com.android.settings.development.WebViewAppPreferenceController}
*/
@Deprecated
@RunWith(SettingsRobolectricTestRunner.class)
diff --git a/tests/robotests/src/com/android/settings/widget/ActionBarShadowControllerTest.java b/tests/robotests/src/com/android/settings/widget/ActionBarShadowControllerTest.java
index 0f3eb31..f69012e 100644
--- a/tests/robotests/src/com/android/settings/widget/ActionBarShadowControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/ActionBarShadowControllerTest.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 ActionBarShadowControllerTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/widget/ActionButtonPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/ActionButtonPreferenceTest.java
index a080bc6..a215967 100644
--- a/tests/robotests/src/com/android/settings/widget/ActionButtonPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/ActionButtonPreferenceTest.java
@@ -40,7 +40,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 ActionButtonPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java
index d489094..6481f8a 100644
--- a/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/AppPreferenceTest.java
@@ -33,7 +33,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 AppPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java
index a7c8d7c..81537a8 100644
--- a/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/AppSwitchPreferenceTest.java
@@ -33,7 +33,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 AppSwitchPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java b/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java
index dd6138c..4a19258 100644
--- a/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java
+++ b/tests/robotests/src/com/android/settings/widget/AspectRatioFrameLayoutTest.java
@@ -32,7 +32,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 AspectRatioFrameLayoutTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/DefaultIndicatorSeekBarTest.java b/tests/robotests/src/com/android/settings/widget/DefaultIndicatorSeekBarTest.java
index 7fcf328..47a9aa6 100644
--- a/tests/robotests/src/com/android/settings/widget/DefaultIndicatorSeekBarTest.java
+++ b/tests/robotests/src/com/android/settings/widget/DefaultIndicatorSeekBarTest.java
@@ -29,7 +29,7 @@
import static junit.framework.Assert.assertEquals;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class DefaultIndicatorSeekBarTest {
private DefaultIndicatorSeekBar mDefaultIndicatorSeekBar;
diff --git a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
index 9c6ee45..af30e4f 100644
--- a/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/EntityHeaderControllerTest.java
@@ -58,7 +58,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class EntityHeaderControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/widget/FixedLineSummaryPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/FixedLineSummaryPreferenceTest.java
index 0d9a77b..5022ceb 100644
--- a/tests/robotests/src/com/android/settings/widget/FixedLineSummaryPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/FixedLineSummaryPreferenceTest.java
@@ -38,7 +38,7 @@
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class FixedLineSummaryPreferenceTest {
@Mock
diff --git a/tests/robotests/src/com/android/settings/widget/LoadingViewControllerTest.java b/tests/robotests/src/com/android/settings/widget/LoadingViewControllerTest.java
index 09b52c8..6ab2b17 100644
--- a/tests/robotests/src/com/android/settings/widget/LoadingViewControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/LoadingViewControllerTest.java
@@ -37,7 +37,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 LoadingViewControllerTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
index 1c449cc..c80c7b4 100644
--- a/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/MasterSwitchPreferenceTest.java
@@ -40,7 +40,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 MasterSwitchPreferenceTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/PreferenceCategoryControllerTest.java b/tests/robotests/src/com/android/settings/widget/PreferenceCategoryControllerTest.java
index 23aa378..d8661bf 100644
--- a/tests/robotests/src/com/android/settings/widget/PreferenceCategoryControllerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/PreferenceCategoryControllerTest.java
@@ -36,7 +36,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 PreferenceCategoryControllerTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java b/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java
index 8ca68ae..9fc5b2e 100644
--- a/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/widget/RadioButtonPickerFragmentTest.java
@@ -45,7 +45,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 RadioButtonPickerFragmentTest {
diff --git a/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java b/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java
index a1a2f24..0226c22 100644
--- a/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java
+++ b/tests/robotests/src/com/android/settings/widget/RingProgressBarTest.java
@@ -31,7 +31,7 @@
import static junit.framework.Assert.assertEquals;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class RingProgressBarTest {
private Context mContext = RuntimeEnvironment.application;
diff --git a/tests/robotests/src/com/android/settings/widget/RtlCompatibleViewPagerTest.java b/tests/robotests/src/com/android/settings/widget/RtlCompatibleViewPagerTest.java
index 78afc43..1072152 100644
--- a/tests/robotests/src/com/android/settings/widget/RtlCompatibleViewPagerTest.java
+++ b/tests/robotests/src/com/android/settings/widget/RtlCompatibleViewPagerTest.java
@@ -36,7 +36,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
manifest = TestConfig.MANIFEST_PATH,
- sdk = TestConfig.SDK_VERSION,
+ sdk = TestConfig.SDK_VERSION_O,
shadows = {ShadowTextUtils.class}
)
public class RtlCompatibleViewPagerTest {
diff --git a/tests/robotests/src/com/android/settings/widget/ScrollToParentEditTextTest.java b/tests/robotests/src/com/android/settings/widget/ScrollToParentEditTextTest.java
index 5755015..8e91259 100644
--- a/tests/robotests/src/com/android/settings/widget/ScrollToParentEditTextTest.java
+++ b/tests/robotests/src/com/android/settings/widget/ScrollToParentEditTextTest.java
@@ -41,7 +41,7 @@
import org.robolectric.shadows.ShadowView;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class ScrollToParentEditTextTest {
private static final int EDIT_TEXT_SIZE = 20;
diff --git a/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java b/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java
index 2f42550..8dbe552 100644
--- a/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java
+++ b/tests/robotests/src/com/android/settings/widget/SummaryUpdaterTest.java
@@ -34,7 +34,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 SummaryUpdaterTest {
private Context mContext;
diff --git a/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java
index 59be160..ff2332c 100644
--- a/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java
@@ -42,7 +42,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 ValidatedEditTextPreferenceTest {
@Mock
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/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
index 6832ca8..bb33f93 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherApBandPreferenceControllerTest.java
@@ -42,7 +42,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 WifiTetherApBandPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
index a6d536d..044efad 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPasswordPreferenceControllerTest.java
@@ -43,7 +43,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
public class WifiTetherPasswordPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java
index 9d24e78..44c70f6 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherPreferenceControllerTest.java
@@ -63,7 +63,7 @@
import java.util.ArrayList;
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O,
shadows = {
WifiTetherPreferenceControllerTest.ShadowWifiTetherSettings.class,
WifiTetherPreferenceControllerTest.ShadowWifiTetherSwitchBarController.class,
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
index 1cba30e..e058eed 100644
--- a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSSIDPreferenceControllerTest.java
@@ -42,7 +42,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 WifiTetherSSIDPreferenceControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
diff --git a/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
new file mode 100644
index 0000000..76a8e23
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/wifi/tether/WifiTetherSettingsTest.java
@@ -0,0 +1,41 @@
+/*
+ * 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.wifi.tether;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.net.wifi.WifiConfiguration;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O)
+public class WifiTetherSettingsTest {
+
+ @Test
+ public void ensureWifiConfigHasPassword_shouldGeneratePassword() {
+ WifiConfiguration config = new WifiConfiguration();
+ WifiTetherSettings.ensureWifiConfigHasPassword(config);
+
+ assertThat(config.preSharedKey).isNotEmpty();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/core/UniquePreferenceTest.java b/tests/unit/src/com/android/settings/core/UniquePreferenceTest.java
index 5f3e512..ce3fe01 100644
--- a/tests/unit/src/com/android/settings/core/UniquePreferenceTest.java
+++ b/tests/unit/src/com/android/settings/core/UniquePreferenceTest.java
@@ -33,6 +33,7 @@
import com.android.settings.search.DatabaseIndexingUtils;
import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
import com.android.settings.search.SearchIndexableResources;
import com.android.settings.search.XmlParserUtils;
@@ -64,7 +65,7 @@
"dashboard_tile_placeholder" // This is the placeholder pref for injecting dynamic
// tiles.
- );
+ );
private Context mContext;
@@ -91,13 +92,13 @@
final Set<String> nullKeyClasses = new HashSet<>();
final Set<String> duplicatedKeys = new HashSet<>();
for (Class<?> clazz : SearchIndexableResources.providerValues()) {
- verifyPreferenceIdInXml(uniqueKeys, duplicatedKeys, nullKeyClasses, clazz);
+ verifyPreferenceKeys(uniqueKeys, duplicatedKeys, nullKeyClasses, clazz);
}
if (!nullKeyClasses.isEmpty()) {
final StringBuilder nullKeyErrors = new StringBuilder()
- .append("Each preference must have a key, ")
- .append("the following classes have pref without keys:\n");
+ .append("Each preference/SearchIndexableData must have a key, ")
+ .append("the following classes have null keys:\n");
for (String c : nullKeyClasses) {
nullKeyErrors.append(c).append("\n");
}
@@ -114,7 +115,7 @@
}
}
- private void verifyPreferenceIdInXml(Set<String> uniqueKeys, Set<String> duplicatedKeys,
+ private void verifyPreferenceKeys(Set<String> uniqueKeys, Set<String> duplicatedKeys,
Set<String> nullKeyClasses, Class<?> clazz)
throws IOException, XmlPullParserException, Resources.NotFoundException {
if (clazz == null) {
@@ -123,8 +124,16 @@
final String className = clazz.getName();
final Indexable.SearchIndexProvider provider =
DatabaseIndexingUtils.getSearchIndexProvider(clazz);
+ final List<SearchIndexableRaw> rawsToIndex = provider.getRawDataToIndex(mContext, true);
final List<SearchIndexableResource> resourcesToIndex =
provider.getXmlResourcesToIndex(mContext, true);
+ verifyResources(className, resourcesToIndex, uniqueKeys, duplicatedKeys, nullKeyClasses);
+ verifyRaws(className, rawsToIndex, uniqueKeys, duplicatedKeys, nullKeyClasses);
+ }
+
+ private void verifyResources(String className, List<SearchIndexableResource> resourcesToIndex,
+ Set<String> uniqueKeys, Set<String> duplicatedKeys, Set<String> nullKeyClasses)
+ throws IOException, XmlPullParserException, Resources.NotFoundException {
if (resourcesToIndex == null) {
Log.d(TAG, className + "is not providing SearchIndexableResource, skipping");
return;
@@ -172,4 +181,25 @@
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth));
}
}
+
+ private void verifyRaws(String className, List<SearchIndexableRaw> rawsToIndex,
+ Set<String> uniqueKeys, Set<String> duplicatedKeys, Set<String> nullKeyClasses) {
+ if (rawsToIndex == null) {
+ Log.d(TAG, className + "is not providing SearchIndexableRaw, skipping");
+ return;
+ }
+ for (SearchIndexableRaw raw : rawsToIndex) {
+ if (TextUtils.isEmpty(raw.key)) {
+ Log.e(TAG, "Every SearchIndexableRaw must have an key; found null key"
+ + " in " + className);
+ nullKeyClasses.add(className);
+ continue;
+ }
+ if (uniqueKeys.contains(raw.key) && !WHITELISTED_DUPLICATE_KEYS.contains(raw.key)) {
+ Log.e(TAG, "Every SearchIndexableRaw key must unique; found " + raw.key
+ + " in " + className);
+ duplicatedKeys.add(raw.key);
+ }
+ }
+ }
}
diff --git a/tests/unit/src/com/android/settings/core/UserRestrictionTest.java b/tests/unit/src/com/android/settings/core/UserRestrictionTest.java
new file mode 100644
index 0000000..ad00bd7
--- /dev/null
+++ b/tests/unit/src/com/android/settings/core/UserRestrictionTest.java
@@ -0,0 +1,151 @@
+/*
+ * 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.core;
+
+import static junit.framework.Assert.fail;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.os.UserManager;
+import android.platform.test.annotations.Presubmit;
+import android.provider.SearchIndexableResource;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+
+import com.android.settings.search.DatabaseIndexingUtils;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableResources;
+
+import com.google.android.collect.Sets;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class UserRestrictionTest {
+
+ private static final String TAG = "UserRestrictionTest";
+
+ private Context mContext;
+
+ private static final Set<String> USER_RESTRICTIONS = Sets.newHashSet(
+ UserManager.DISALLOW_CONFIG_DATE_TIME,
+ UserManager.DISALLOW_CONFIG_CREDENTIALS,
+ UserManager.DISALLOW_NETWORK_RESET,
+ UserManager.DISALLOW_FACTORY_RESET,
+ UserManager.DISALLOW_CONFIG_TETHERING,
+ UserManager.DISALLOW_CONFIG_VPN,
+ UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS
+ );
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getTargetContext();
+ }
+
+ /**
+ * Verity that userRestriction attributes are entered and parsed successfully.
+ */
+ @Test
+ public void userRestrictionAttributeShouldBeValid()
+ throws IOException, XmlPullParserException, Resources.NotFoundException {
+ for (Class<?> clazz : SearchIndexableResources.providerValues()) {
+ verifyUserRestriction(clazz);
+ }
+ }
+
+ private void verifyUserRestriction(Class<?> clazz)
+ throws IOException, XmlPullParserException, Resources.NotFoundException {
+ if (clazz == null) {
+ return;
+ }
+ final String className = clazz.getName();
+ final Indexable.SearchIndexProvider provider =
+ DatabaseIndexingUtils.getSearchIndexProvider(clazz);
+ final List<SearchIndexableResource> resourcesToIndex =
+ provider.getXmlResourcesToIndex(mContext, true);
+
+ if (resourcesToIndex == null) {
+ Log.d(TAG, className + "is not providing SearchIndexableResource, skipping");
+ return;
+ }
+
+ for (SearchIndexableResource sir : resourcesToIndex) {
+ if (sir.xmlResId <= 0) {
+ Log.d(TAG, className + " doesn't have a valid xml to index.");
+ continue;
+ }
+ final XmlResourceParser parser = mContext.getResources().getXml(sir.xmlResId);
+
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && type != XmlPullParser.START_TAG) {
+ // Parse next until start tag is found
+ }
+ final int outerDepth = parser.getDepth();
+
+ do {
+ if (type != XmlPullParser.START_TAG) {
+ continue;
+ }
+ final String nodeName = parser.getName();
+ if (!nodeName.endsWith("Preference")) {
+ continue;
+ }
+ final AttributeSet attrs = Xml.asAttributeSet(parser);
+ final String userRestriction = getDataUserRestrictions(mContext, attrs);
+ if (userRestriction != null) {
+ if(!isValidRestriction(userRestriction)) {
+ fail("userRestriction in " + className + " not valid.");
+ }
+ }
+ } while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth));
+ }
+ }
+
+ boolean isValidRestriction(String userRestriction) {
+ return USER_RESTRICTIONS.contains(userRestriction);
+ }
+
+ private String getDataUserRestrictions(Context context, AttributeSet attrs) {
+ return getData(context, attrs,
+ com.android.settingslib.R.styleable.RestrictedPreference,
+ com.android.settingslib.R.styleable.RestrictedPreference_userRestriction);
+ }
+
+ private String getData(Context context, AttributeSet set, int[] attrs, int resId) {
+ final TypedArray ta = context.obtainStyledAttributes(set, attrs);
+ String data = ta.getString(resId);
+ ta.recycle();
+ return data;
+ }
+}
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
diff --git a/tests/unit/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java b/tests/unit/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
new file mode 100644
index 0000000..aed94a0
--- /dev/null
+++ b/tests/unit/src/com/android/settings/search/SettingsSearchIndexablesProviderTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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.search;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.SearchIndexablesContract;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@RunWith(AndroidJUnit4.class)
+@SmallTest
+public class SettingsSearchIndexablesProviderTest {
+
+ private Context mContext;
+
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getTargetContext();
+ }
+
+ @Test
+ public void testSiteMapPairsFetched() {
+ final Uri uri = Uri.parse("content://" + mContext.getPackageName() + "/" +
+ SearchIndexablesContract.SITE_MAP_PAIRS_PATH);
+ final Cursor cursor = mContext.getContentResolver().query(uri, null, null, null, null);
+
+ final int size = cursor.getCount();
+ assertThat(size).isGreaterThan(0);
+ while (cursor.moveToNext()) {
+ assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
+ SearchIndexablesContract.SiteMapColumns.PARENT_CLASS)))
+ .isNotEmpty();
+ assertThat(cursor.getString(cursor.getColumnIndexOrThrow(
+ SearchIndexablesContract.SiteMapColumns.CHILD_CLASS)))
+ .isNotEmpty();
+ }
+ }
+}