Merge "Revert "Delete unused classes""
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8411d31..bc63d14 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -219,6 +219,12 @@
android:theme="@style/Theme.Settings.NoActionBar">
</activity>
+ <activity android:name=".search.SearchResultTrampoline"
+ android:theme="@android:style/Theme.NoDisplay"
+ android:excludeFromRecents="true"
+ android:exported="true">
+ </activity>
+
<!-- Top-level settings -->
<activity android:name="Settings$WifiSettingsActivity"
@@ -754,17 +760,17 @@
android:value="true" />
</activity>
- <activity android:name="Settings$ZenModePrioritySettingsActivity"
- android:label="@string/zen_mode_priority_settings_title"
+ <activity android:name="Settings$ZenModeBehaviorSettingsActivity"
+ android:label="@string/zen_mode_behavior_settings_title"
android:icon="@drawable/ic_settings_notifications"
android:exported="true"
android:taskAffinity="">
<intent-filter android:priority="1">
- <action android:name="android.settings.ZEN_MODE_PRIORITY_SETTINGS" />
+ <action android:name="android.settings.ZEN_MODE_BEHAVIOR_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.notification.ZenModePrioritySettings" />
+ android:value="com.android.settings.notification.ZenModeBehaviorSettings" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -987,6 +993,7 @@
<intent-filter android:priority="1">
<action android:name="android.settings.APPLICATION_SETTINGS" />
<action android:name="android.settings.MANAGE_APPLICATIONS_SETTINGS" />
+ <action android:name="android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
@@ -996,7 +1003,7 @@
<category android:name="com.android.settings.SHORTCUT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -1024,10 +1031,6 @@
<intent-filter android:priority="3">
<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.development" />
- <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.applications.ProcessStatsSummary" />
</activity>
@@ -1043,19 +1046,6 @@
android:value="com.android.settings.applications.ProcessStatsUi" />
</activity>
- <activity android:name="Settings$AllApplicationsActivity"
- android:label="@string/applications_settings"
- android:taskAffinity="">
- <intent-filter>
- <action android:name="android.settings.MANAGE_ALL_APPLICATIONS_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
- <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
- </activity>
-
<activity android:name="Settings$HighPowerApplicationsActivity"
android:label="@string/high_power_apps"
android:taskAffinity="">
@@ -1064,7 +1054,7 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -1096,14 +1086,7 @@
android:exported="true"
android:targetActivity="Settings$ManageApplicationsActivity">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
- </activity-alias>
-
- <!-- Keep compatibility with old shortcuts. Pre-gingerbread. -->
- <activity-alias android:name=".ManageApplications"
- android:label="@string/manageapplications_settings_title"
- android:exported="true"
- android:targetActivity="Settings$ManageApplicationsActivity">
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity-alias>
<!-- Provide direct entry into manage apps showing running services.
@@ -1113,7 +1096,7 @@
android:exported="true"
android:targetActivity="Settings$ManageApplicationsActivity">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity-alias>
<!-- Provide direct entry into manage apps showing storage usage for apps.
@@ -1123,7 +1106,7 @@
android:exported="true"
android:targetActivity="Settings$ManageApplicationsActivity">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity-alias>
<!-- Still need a top-level activity for showing app details. Aliasing
@@ -1160,7 +1143,7 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -1181,7 +1164,7 @@
<category android:name="android.intent.category.VOICE_LAUNCH" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
@@ -1344,6 +1327,7 @@
</activity>
<activity android:name="SetFullBackupPassword"
+ android:label="@string/local_backup_password_title"
android:exported="false">
</activity>
@@ -1403,7 +1387,7 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity>
<activity-alias android:name="SetProfileOwner"
@@ -1611,7 +1595,14 @@
<activity android:name=".fingerprint.FingerprintEnrollFindSensor" android:exported="false"/>
<activity android:name=".fingerprint.FingerprintEnrollEnrolling" android:exported="false"/>
<activity android:name=".fingerprint.FingerprintEnrollFinish" android:exported="false"/>
- <activity android:name=".fingerprint.FingerprintEnrollIntroduction" android:exported="false" />
+ <activity android:name=".fingerprint.FingerprintEnrollIntroduction"
+ android:exported="true"
+ android:theme="@style/GlifTheme.Light">
+ <intent-filter>
+ <action android:name="android.settings.FINGERPRINT_ENROLL" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
<activity android:name=".fingerprint.SetupFingerprintEnrollFindSensor" android:exported="false"/>
<activity android:name=".fingerprint.SetupFingerprintEnrollEnrolling" android:exported="false"/>
@@ -1915,11 +1906,13 @@
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>
@@ -1938,14 +1931,11 @@
android:icon="@drawable/ic_settings_development"
android:taskAffinity="com.android.settings"
android:parentActivityName="Settings">
-
- <!-- Enable when deleting DevelopmentSettingsActivity
<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>
@@ -2013,9 +2003,9 @@
<activity-alias android:name="DevelopmentSettings"
android:exported="true"
android:label="@string/development_settings_title"
- android:targetActivity="Settings$DevelopmentSettingsActivity">
+ android:targetActivity="Settings$DevelopmentSettingsDashboardActivity">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.development.DevelopmentSettings" />
+ android:value="com.android.settings.development.DevelopmentSettingsDashboardFragment" />
</activity-alias>
<activity android:name=".development.AppPicker"
@@ -2030,7 +2020,7 @@
<activity-alias android:name="UsbSettings"
android:exported="true"
android:label="@string/storage_title_usb"
- android:targetActivity="Settings$DevelopmentSettingsActivity">
+ android:targetActivity="Settings$DevelopmentSettingsDashboardActivity">
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.deviceinfo.UsbSettings" />
</activity-alias>
@@ -2953,7 +2943,7 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity>
<activity android:name="Settings$AppDrawOverlaySettingsActivity"
@@ -2976,7 +2966,7 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity>
@@ -3000,7 +2990,7 @@
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
- android:value="com.android.settings.applications.ManageApplications" />
+ android:value="com.android.settings.applications.manageapplications.ManageApplications" />
</activity>
<activity android:name="Settings$ManageAppExternalSourcesActivity"
@@ -3181,7 +3171,7 @@
<!-- Quick Settings tiles for Developer Options -->
<service
- android:name=".qstile.DevelopmentTiles$ShowLayout"
+ android:name=".development.qstile.DevelopmentTiles$ShowLayout"
android:label="@string/debug_layout"
android:icon="@drawable/tile_icon_show_layout"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
@@ -3191,7 +3181,7 @@
</intent-filter>
</service>
<service
- android:name=".qstile.DevelopmentTiles$GPUProfiling"
+ android:name=".development.qstile.DevelopmentTiles$GPUProfiling"
android:label="@string/track_frame_time"
android:icon="@drawable/tile_icon_graphics"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
@@ -3201,7 +3191,7 @@
</intent-filter>
</service>
<service
- android:name=".qstile.DevelopmentTiles$ForceRTL"
+ android:name=".development.qstile.DevelopmentTiles$ForceRTL"
android:label="@string/force_rtl_layout_all_locales"
android:icon="@drawable/tile_icon_force_rtl"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
@@ -3211,7 +3201,7 @@
</intent-filter>
</service>
<service
- android:name=".qstile.DevelopmentTiles$AnimationSpeed"
+ android:name=".development.qstile.DevelopmentTiles$AnimationSpeed"
android:label="@string/window_animation_scale_title"
android:icon="@drawable/tile_icon_animation_speed"
android:permission="android.permission.BIND_QUICK_SETTINGS_TILE"
@@ -3220,11 +3210,6 @@
<action android:name="android.service.quicksettings.action.QS_TILE" />
</intent-filter>
</service>
- <activity
- android:name=".qstile.DevelopmentTileConfigActivity"
- android:excludeFromRecents="true"
- android:launchMode="singleInstance"
- android:label="@string/quick_settings_developer_tiles" />
<activity android:name=".HelpTrampoline"
android:exported="true"
diff --git a/OWNERS b/OWNERS
index e19e56f..d2bc1ff 100644
--- a/OWNERS
+++ b/OWNERS
@@ -13,3 +13,6 @@
# Emergency approvers in case the above are not available
miket@google.com
+
+# Exempt resource files (because they are in a flat directory and too hard to manage via OWNERS)
+per-file *.xml=*
\ No newline at end of file
diff --git a/res/drawable/line.xml b/res/drawable/line.xml
new file mode 100644
index 0000000..786ed1c
--- /dev/null
+++ b/res/drawable/line.xml
@@ -0,0 +1,27 @@
+<?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.
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+
+ <solid android:color="@android:color/transparent" />
+
+ <padding
+ android:top="10dp"
+ android:left="10dp"
+ android:right="10dp"
+ android:bottom="10dp"/>
+</shape>
\ No newline at end of file
diff --git a/res/drawable/line_drawable.xml b/res/drawable/line_drawable.xml
new file mode 100644
index 0000000..a524c61
--- /dev/null
+++ b/res/drawable/line_drawable.xml
@@ -0,0 +1,25 @@
+<?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.
+ -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/line" />
+
+ <item
+ android:drawable="@drawable/line" />
+</selector>
\ No newline at end of file
diff --git a/res/drawable/thumb.xml b/res/drawable/thumb.xml
new file mode 100644
index 0000000..42fbd8c
--- /dev/null
+++ b/res/drawable/thumb.xml
@@ -0,0 +1,32 @@
+<?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.
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle">
+
+ <corners
+ android:topLeftRadius="8dp"
+ android:topRightRadius="8dp"
+ android:bottomLeftRadius="8dp"
+ android:bottomRightRadius="8dp"/>
+
+ <padding
+ android:paddingLeft="8dp"
+ android:paddingRight="8dp" />
+
+ <solid android:color="?android:attr/colorControlNormal" />
+
+</shape>
\ No newline at end of file
diff --git a/res/drawable/thumb_drawable.xml b/res/drawable/thumb_drawable.xml
new file mode 100644
index 0000000..b99536d
--- /dev/null
+++ b/res/drawable/thumb_drawable.xml
@@ -0,0 +1,24 @@
+<?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.
+ -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item
+ android:state_pressed="true"
+ android:drawable="@drawable/thumb"/>
+
+ <item
+ android:drawable="@drawable/thumb"/>
+</selector>
\ No newline at end of file
diff --git a/res/layout-land/fingerprint_enroll_enrolling.xml b/res/layout-land/fingerprint_enroll_enrolling.xml
index 9890e68..fb6c78b 100644
--- a/res/layout-land/fingerprint_enroll_enrolling.xml
+++ b/res/layout-land/fingerprint_enroll_enrolling.xml
@@ -109,8 +109,8 @@
android:orientation="vertical">
<com.android.setupwizardlib.view.FillContentLayout
- android:layout_width="@dimen/fingerprint_progress_bar_max_size"
- android:layout_height="@dimen/fingerprint_progress_bar_max_size"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
android:paddingTop="0dp"
android:paddingBottom="0dp"
android:layout_marginVertical="24dp">
diff --git a/res/layout-land/fingerprint_enroll_find_sensor.xml b/res/layout-land/fingerprint_enroll_find_sensor.xml
index 7877d98..8712ad7 100644
--- a/res/layout-land/fingerprint_enroll_find_sensor.xml
+++ b/res/layout-land/fingerprint_enroll_find_sensor.xml
@@ -40,51 +40,60 @@
android:clipToPadding="false"
android:orientation="vertical">
- <LinearLayout
+ <ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
android:clipChildren="false"
- android:clipToPadding="false">
+ android:clipToPadding="false"
+ android:fillViewport="true">
- <ImageView
- android:id="@+id/suw_layout_icon"
- style="@style/SuwGlifIcon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="?attr/suwGlifHeaderGravity"
- android:layout_marginStart="0dp"
- android:layout_marginEnd="0dp"
- android:src="@drawable/ic_fingerprint_header" />
-
- <TextView
- android:id="@+id/suw_layout_title"
- style="@style/SuwGlifHeaderTitle"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginStart="0dp"
- android:layout_marginEnd="0dp" />
+ android:orientation="vertical"
+ android:clipChildren="false"
+ android:clipToPadding="false">
- <TextView
- style="@style/SuwDescription.Glif"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/security_settings_fingerprint_enroll_find_sensor_message"/>
+ <ImageView
+ android:id="@+id/suw_layout_icon"
+ style="@style/SuwGlifIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="?attr/suwGlifHeaderGravity"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp"
+ android:src="@drawable/ic_fingerprint_header" />
- <Space
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1" />
+ <TextView
+ android:id="@+id/suw_layout_title"
+ style="@style/SuwGlifHeaderTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="0dp"
+ android:layout_marginEnd="0dp" />
- <Button
- style="@style/SetupWizardButton.Negative"
- android:id="@+id/skip_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp"
- android:text="@string/skip_label" />
+ <TextView
+ style="@style/SuwDescription.Glif"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/security_settings_fingerprint_enroll_find_sensor_message"/>
- </LinearLayout>
+ <Space
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ <Button
+ style="@style/SetupWizardButton.Negative"
+ android:id="@+id/skip_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:text="@string/skip_label" />
+
+ </LinearLayout>
+
+ </ScrollView>
</LinearLayout>
diff --git a/res/layout-land/fingerprint_enroll_finish.xml b/res/layout-land/fingerprint_enroll_finish.xml
index 0b673b8..981fe65 100644
--- a/res/layout-land/fingerprint_enroll_finish.xml
+++ b/res/layout-land/fingerprint_enroll_finish.xml
@@ -75,13 +75,13 @@
android:layout_height="0dp"
android:layout_weight="1" />
- <LinearLayout
+ <com.android.setupwizardlib.view.ButtonBarLayout
+ style="@style/SuwGlifButtonBar.Stackable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:clipChildren="false"
- android:clipToPadding="false"
- android:orientation="horizontal">
+ android:clipToPadding="false">
<Button
style="@style/SetupWizardButton.Negative"
@@ -103,7 +103,7 @@
android:layout_height="wrap_content"
android:text="@string/security_settings_fingerprint_enroll_done" />
- </LinearLayout>
+ </com.android.setupwizardlib.view.ButtonBarLayout>
</LinearLayout>
diff --git a/res/layout/android_beam.xml b/res/layout/android_beam.xml
index 5683840..7780b31 100644
--- a/res/layout/android_beam.xml
+++ b/res/layout/android_beam.xml
@@ -31,14 +31,15 @@
android:layout_height="wrap_content"
android:orientation="vertical">
- <TextView android:id="@+id/android_beam_explained"
+ <TextView
+ android:id="@+id/android_beam_explained"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:gravity="top"
+ android:paddingStart="@dimen/preference_no_icon_padding_start"
android:text="@string/android_beam_explained"
- android:textAppearance="?android:attr/textAppearanceMedium"
- />
+ android:textAppearance="?android:attr/textAppearanceMedium" />
<ImageView android:id="@+id/android_beam_image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/res/layout/dialog_hardware_info.xml b/res/layout/dialog_hardware_info.xml
index f9d52b8..9431961 100644
--- a/res/layout/dialog_hardware_info.xml
+++ b/res/layout/dialog_hardware_info.xml
@@ -40,6 +40,20 @@
android:textAppearance="@android:style/TextAppearance.Material.Body2" />
<TextView
+ android:id="@+id/serial_number_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:textAppearance="@android:style/TextAppearance.Material.Body1"
+ android:textColor="?android:attr/textColorSecondary"
+ android:text="@string/status_serial_number" />
+ <TextView
+ android:id="@+id/serial_number_value"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingBottom="24dp"
+ android:textAppearance="@android:style/TextAppearance.Material.Body2" />
+
+ <TextView
android:id="@+id/hardware_rev_label"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/res/layout/manage_applications_apps.xml b/res/layout/manage_applications_apps.xml
index e4ec871..d362528 100644
--- a/res/layout/manage_applications_apps.xml
+++ b/res/layout/manage_applications_apps.xml
@@ -14,44 +14,53 @@
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
<FrameLayout
- android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1">
- <LinearLayout android:id="@+id/list_container"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:visibility="gone">
+ <LinearLayout
+ android:id="@+id/list_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:visibility="gone">
<FrameLayout
android:id="@+id/pinned_header"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
- <FrameLayout android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1">
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="0px"
+ android:layout_weight="1">
- <ListView android:id="@android:id/list"
- android:drawSelectorOnTop="false"
+ <android.support.v7.widget.RecyclerView
+ android:id="@+id/apps_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:clipToPadding="false"
- android:scrollbarStyle="@integer/preference_scrollbar_style" />
+ settings:fastScrollEnabled="true"
+ settings:fastScrollHorizontalThumbDrawable="@drawable/thumb_drawable"
+ settings:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
+ settings:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
+ settings:fastScrollVerticalTrackDrawable="@drawable/line_drawable"/>
- <TextView android:id="@android:id/empty"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gravity="center"
- android:text="@string/no_applications"
- android:textAppearance="?android:attr/textAppearanceLarge" />
+ <TextView
+ android:id="@android:id/empty"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:text="@string/no_applications"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:visibility="invisible" />
</FrameLayout>
diff --git a/res/layout/master_clear.xml b/res/layout/master_clear.xml
index ec2aaea..779e504 100644
--- a/res/layout/master_clear.xml
+++ b/res/layout/master_clear.xml
@@ -4,9 +4,9 @@
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.
@@ -14,24 +14,24 @@
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:orientation="vertical"
- >
+ android:orientation="vertical">
<ScrollView
android:id="@+id/master_clear_scrollview"
android:layout_width="match_parent"
android:layout_height="0dip"
- android:layout_marginStart="12dp"
+ android:layout_marginStart="@dimen/preference_no_icon_padding_start"
android:layout_marginEnd="12dp"
android:layout_marginTop="12dp"
android:layout_weight="1">
- <LinearLayout android:id="@+id/master_clear_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
+ <LinearLayout
+ android:id="@+id/master_clear_container"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/res/layout/reset_network.xml b/res/layout/reset_network.xml
index 82769db..be966dd 100644
--- a/res/layout/reset_network.xml
+++ b/res/layout/reset_network.xml
@@ -22,7 +22,7 @@
<ScrollView
android:layout_width="match_parent"
android:layout_height="0dip"
- android:layout_marginStart="12dp"
+ android:layout_marginStart="@dimen/preference_no_icon_padding_start"
android:layout_marginEnd="12dp"
android:layout_marginTop="12dp"
android:layout_weight="1">
diff --git a/res/layout/search_panel.xml b/res/layout/search_panel.xml
index 48a1d4c..42fbefb 100644
--- a/res/layout/search_panel.xml
+++ b/res/layout/search_panel.xml
@@ -76,7 +76,7 @@
android:id="@+id/no_results_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="96dp"
+ android:paddingTop="35dp"
android:orientation="vertical"
android:visibility="gone">
diff --git a/res/layout/suggestion_condition_footer.xml b/res/layout/suggestion_condition_footer.xml
index 3eea6a5..5de9d55 100644
--- a/res/layout/suggestion_condition_footer.xml
+++ b/res/layout/suggestion_condition_footer.xml
@@ -20,15 +20,16 @@
style="@style/SuggestionConditionStyle"
android:layout_width="match_parent"
android:layout_height="44dp"
- android:paddingTop="10dp"
- android:paddingEnd="10dp"
+ android:contentDescription="@string/dashboard_suggestion_condition_footer_content_description"
+ android:gravity="end"
android:orientation="horizontal"
- android:gravity="end">
+ android:paddingTop="10dp"
+ android:paddingEnd="10dp">
<ImageView
android:id="@+id/collapse_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:src="@drawable/ic_expand_less"/>
+ android:src="@drawable/ic_expand_less" />
</LinearLayout>
diff --git a/res/layout/suggestion_tile_with_button.xml b/res/layout/suggestion_tile_with_button.xml
index 0439770..085f88c 100644
--- a/res/layout/suggestion_tile_with_button.xml
+++ b/res/layout/suggestion_tile_with_button.xml
@@ -31,8 +31,7 @@
<ImageView
android:id="@android:id/icon"
android:layout_width="@dimen/dashboard_tile_image_size"
- android:layout_height="@dimen/dashboard_tile_image_size"
- android:contentDescription="@null" />
+ android:layout_height="@dimen/dashboard_tile_image_size" />
<LinearLayout
android:layout_width="match_parent"
@@ -45,11 +44,11 @@
android:orientation="vertical">
<TextView
- style="@style/TextAppearance.SuggestionTitle"
android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginStart="6dp" />
+ android:layout_marginStart="6dp"
+ android:textAppearance="@style/TextAppearance.TileTitle" />
<TextView
android:id="@android:id/summary"
diff --git a/res/layout/wifi_calling_settings_preferences.xml b/res/layout/wifi_calling_settings_preferences.xml
new file mode 100644
index 0000000..4e64f40
--- /dev/null
+++ b/res/layout/wifi_calling_settings_preferences.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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:id="@+id/tabs_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <com.android.settings.widget.SwitchBar
+ android:id="@+id/switch_bar"
+ android:layout_height="?android:attr/actionBarSize"
+ android:layout_width="match_parent"
+ android:background="@drawable/switchbar_background"
+ android:theme="?attr/switchBarTheme" />
+
+ <FrameLayout
+ android:id="@android:id/tabcontent"
+ android:layout_width="0dip"
+ android:layout_height="0dip" />
+
+ <FrameLayout
+ android:id="@+id/prefs_container"
+ android:layout_width="match_parent"
+ android:layout_height="0dip"
+ android:layout_weight="1"
+ android:clipChildren="false"
+ android:clipToPadding="false"
+ android:smoothScrollbar="false" />
+
+</LinearLayout>
diff --git a/res/layout/wifi_calling_settings_tabs.xml b/res/layout/wifi_calling_settings_tabs.xml
new file mode 100644
index 0000000..1e27b47
--- /dev/null
+++ b/res/layout/wifi_calling_settings_tabs.xml
@@ -0,0 +1,36 @@
+<?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:id="@+id/tabs_container"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <com.android.settings.widget.SlidingTabLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/sliding_tabs"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:scrollbars="none"
+ android:fillViewport="true"/>
+
+ <com.android.settings.widget.RtlCompatibleViewPager
+ android:id="@+id/view_pager"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+
+</LinearLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 39b14a3..3d760d2 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi-MAC-adres"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-adres"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Reeksnommer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Onbeskikbaar"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tyd aanlyn"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Wakkertyd"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interne berging"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Kan nie handmatig sinkroniseer nie"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sinkronisering vir hierdie item is tans gedeaktiveer. Om hierdie instelling te verander, skakel agtergronddata en outomatiese sinkronisering tydelik aan."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G-Mac-adres"</string>
<string name="enter_password" msgid="8035706727471334122">"Voer jou wagwoord in om Android te begin"</string>
<string name="enter_pin" msgid="5305333588093263790">"Voer jou PIN in om Android te begin"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Teken jou patroon om Android te begin"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Wanneer skerm af is"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Wanneer skerm aan of af is"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Kennisgewingsinstellings"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Stuur terugvoer oor hierdie toestel"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Voer admin-PIN in"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Aan"</string>
@@ -3306,7 +3304,8 @@
<string name="write_settings_title" msgid="4232152481902542284">"Kan stelselinstellings verander"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Verander stelselinstellings"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Programtoestemming om stelselinstellings te verander"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Mag stelselinstellings verander"</string>
+ <!-- no translation found for permit_write_settings (658555006453212691) -->
+ <skip />
<string name="write_settings_description" msgid="6868293938839954623">"Hierdie toestemming laat \'n program toe om stelselinstellings te verander."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ja"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nee"</string>
@@ -3727,7 +3726,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Kry \'n kykie van jou nuwe tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Kry \'n kykie van jou nuwe toestel"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Hierdie kenmerk is nie op hierdie toestel beskikbaar nie"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-registrasiestaat"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Geregistreer"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nie geregistreer nie"</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 6e192c6..4743a53 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"የWi-Fi ማክ አድራሻ"</string>
<string name="status_bt_address" msgid="4195174192087439720">"የብሉቱዝ አድራሻ"</string>
<string name="status_serial_number" msgid="2257111183374628137">"መለያ ቁጥር"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"አይገኝም"</string>
<string name="status_up_time" msgid="7294859476816760399">"የቆየበት ሰዓት"</string>
<string name="status_awake_time" msgid="2393949909051183652">"ነቅቶ የቆየበት ሰዓት"</string>
<string name="internal_memory" msgid="9129595691484260784">"የውስጥ ማከማቻ"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"በእጅ ማመሳሰል አልተቻለም"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"አመሳስል ለእዚህ ንጥል በአሁን ጊዜ ቦዝኗል።ምርጫህን ለመለወጥ፣ ለጊዜው የዳራ ውሂብ እና ራስ ሰር ማመሳሰያ አብራ።"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"የ4G MAC አድራሻ"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidን ለመጀመር የይለፍ ቃልዎን ያስገቡ"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidን ለመጀመር ፒንዎን ያስገቡ"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidን ለመጀመር ስርዓተ-ጥለትዎን ይሳሉ"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"ማያ ገጹ ሲጠፋ"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"ማያ ገጹ ሲበራ ወይም ሲጠፋ"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"የአስተዳዳሪ ፒን ያስገቡ"</string>
<string name="switch_on_text" msgid="1124106706920572386">"በርቷል"</string>
@@ -3306,7 +3304,8 @@
<string name="write_settings_title" msgid="4232152481902542284">"የስርዓት ቅንብሮችን ያዘምናል"</string>
<string name="write_system_settings" msgid="3482913590601096763">"የስርዓት ቅንብሮችን ይቀይራል"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"መተግበሪያ የስርዓት ቅንብሮች ፈቃድን ይቀይራል"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"የስርዓት ቅንብሮችን ለማዘመን ያስችላል"</string>
+ <!-- no translation found for permit_write_settings (658555006453212691) -->
+ <skip />
<string name="write_settings_description" msgid="6868293938839954623">"ይህ ፈቃድ መተግበሪያው የስርዓት ቅንብሮችን ለመቀየር ያስችለዋል።"</string>
<string name="write_settings_on" msgid="8230580416068832239">"አዎ"</string>
<string name="write_settings_off" msgid="5156104383386336233">"አይ"</string>
@@ -3727,7 +3726,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"በአዲሱ ጡባዊዎ ላይ ጉብኝት ያድርጉ"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"በአዲሱ መሣሪያዎ ላይ ጉብኝት ያድርጉ"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ይህ ባህሪ በዚህ መሣሪያ ላይ አይገኝም"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"የIMS ምዝገባ ቀን"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"የተመዘገበ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"አልተመዘገበም"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index ffa30fd..937c9fc 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -1211,7 +1211,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"عنوان Mac لشبكة Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"عنوان البلوتوث"</string>
<string name="status_serial_number" msgid="2257111183374628137">"الرقم المسلسل"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"غير متاح"</string>
<string name="status_up_time" msgid="7294859476816760399">"وقت التشغيل"</string>
<string name="status_awake_time" msgid="2393949909051183652">"وقت الوضع النشط"</string>
<string name="internal_memory" msgid="9129595691484260784">"وحدة التخزين الداخلية"</string>
@@ -2433,8 +2432,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"لا يمكن المزامنة يدويًا"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"مزامنة هذا العنصر معطّلة في الوقت الحالي. لتغيير هذا الإعداد، شغّل بشكل مؤقت بيانات الخلفية والمزامنة التلقائية."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"الجيل الرابع"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"عنوان 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"لبدء تشغيل Android، أدخل كلمة المرور"</string>
<string name="enter_pin" msgid="5305333588093263790">"لبدء تشغيل Android، أدخل رقم التعريف الشخصي"</string>
<string name="enter_pattern" msgid="4187435713036808566">"لبدء تشغيل Android، ارسم النقش"</string>
@@ -2845,6 +2842,7 @@
<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_summary_mobile" msgid="3851083934739500429">"الجوّال"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"استخدام البيانات"</string>
@@ -2951,8 +2949,14 @@
<item quantity="other">تم تشغيل <xliff:g id="ON_COUNT">%d</xliff:g> قاعدة تلقائية</item>
<item quantity="one">تم تشغيل قاعدة تلقائية واحدة</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"تفضيلات وضع \"عدم الإزعاج\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"السماح بالأولويّات فقط"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"الرجاء عدم الإزعاج"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"السُلوك"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"السماح بالأصوات والاهتزازات من"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"تعيين قواعد عدم الإزعاج"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"تقييد الأصوات والاهتزازات في أوقات معينة"</string>
@@ -3144,13 +3148,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"المنبهات لها أولوية دائمًا وتصدِر تنبيهًا صوتيًا"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"المتصلون المحدّدون"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"المتصلون المتكرّرون"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"السماح فقط في حال اتصال الشخص نفسه للمرة الثانية في غضون <xliff:g id="MINUTES">%d</xliff:g> من الدقائق"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"في حال اتصال الشخص نفسه للمرة الثانية في غضون <xliff:g id="MINUTES">%d</xliff:g> دقيقة"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"تشغيل تلقائي"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"مطلقًا"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"كل ليلة"</string>
@@ -3187,6 +3192,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"عندما تكون الشاشة في وضع الإيقاف"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"عندما تكون الشاشة في وضع التشغيل أو الإيقاف"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"إدخال رقم التعريف الشخصي للمشرف"</string>
<string name="switch_on_text" msgid="1124106706920572386">"تشغيل"</string>
@@ -3466,7 +3472,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"إمكانية تعديل إعدادات النظام"</string>
<string name="write_system_settings" msgid="3482913590601096763">"تعديل إعدادات النظام"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"إذن تعديل التطبيق لإعدادات النظام"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"السماح بتعديل إعدادات النظام"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"السماح بتعديل إعدادات النظام"</string>
<string name="write_settings_description" msgid="6868293938839954623">"يتيح هذا الإذن للتطبيق إمكانية تعديل إعدادات النظام."</string>
<string name="write_settings_on" msgid="8230580416068832239">"نعم"</string>
<string name="write_settings_off" msgid="5156104383386336233">"لا"</string>
@@ -3951,7 +3957,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"الحصول على جولة في جهازك اللوحي الجديد"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"الحصول على جولة في جهازك الجديد"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"لا تتوفر هذه الميزة على هذا الجهاز"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"حالة تسجيل IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"مُسجَّل"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"غير مُسجَّل"</string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 1b3ace9..2eed345 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC ünvanı"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth ünvanı"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Seriya nömrəsi"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Əlçatmazdır"</string>
<string name="status_up_time" msgid="7294859476816760399">"Müddəti"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Oyaq vaxtı"</string>
<string name="internal_memory" msgid="9129595691484260784">"Daxili yaddaş"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Əl vasitəsi ilə sinxronizasiya alınmır"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Bu element üçün sinxronlaşma hazırda deaktiv edilibş Bu ayarı dəyişmək üçün müvəqqəti olaraq fon datasını və avtomatik sinxronlaşmanı aktivləşdirin."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC ünvanı"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidə başlamaq üçün parolu daxil edin"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidə başlamaq üçün PIN-i daxil edin"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidə başlamaq üçün modeli çəkin"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Ekran qapalı olduğu zaman"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Ekran açıq və ya qapalı olduğu zaman"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Bildiriş ayarları"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Bu cihaz haqqında fikrinizi bildirin"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Admin PIN kodunu daxil edin"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Aktiv"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Sistem ayarlarını dəyişdirə bilər"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Sistem ayarlarında dəyişiklik edin"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Tətbiqin sistem ayarlarını dəyişdirmə icazəsi"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Sistem ayarlarını dəyişdirməyə imkan verin"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Sistem ayarlarının redaktəsinə icazə verin"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Bu icazə tətbiqə sistem ayarlarını dəyişdirməyə imkan verir."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Bəli"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Xeyr"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Yeni planşetiniz ilə tanış olun"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Yeni cihazınız ilə tanış olun"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Bu funksiya artıq bu cihazda əlçatan deyil"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS qeydiyyat statusu"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Qeydiyyatlı"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Qeydiyyatsız"</string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 0040ca9..2ce4c2a 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -1172,7 +1172,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC adresa"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serijski broj"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nedostupno"</string>
<string name="status_up_time" msgid="7294859476816760399">"Vreme rada"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Vreme buđenja"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interno skladište"</string>
@@ -2015,8 +2014,8 @@
<!-- no translation found for battery_stats_last_duration (1535831453827905957) -->
<skip />
<string name="awake" msgid="387122265874485088">"Vreme buđenja uređaja"</string>
- <string name="wifi_on_time" msgid="3208518458663637035">"Wi-Fi na vreme"</string>
- <string name="bluetooth_on_time" msgid="3056108148042308690">"Wi-Fi na vreme"</string>
+ <string name="wifi_on_time" msgid="3208518458663637035">"Vreme od uključivanja Wi-Fi mreže"</string>
+ <string name="bluetooth_on_time" msgid="3056108148042308690">"Vreme od uključivanja Wi-Fi mreže"</string>
<string name="advanced_battery_title" msgid="2068039111517508622">"Napredna potrošnja baterije"</string>
<string name="history_details_title" msgid="3608240585315506067">"Detalji istorije"</string>
<string name="battery_details_title" msgid="6101394441569858580">"Potrošnja baterije"</string>
@@ -2370,8 +2369,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ručno sinhronizovanje nije moguće"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sinhronizacija za ovu stavku je trenutno onemogućena. Da biste promenili ovo podešavanje, privremeno uključite pozadinske podatke i automatsku sinhronizaciju."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC adresa"</string>
<string name="enter_password" msgid="8035706727471334122">"Da biste pokrenuli Android, unesite lozinku"</string>
<string name="enter_pin" msgid="5305333588093263790">"Da biste pokrenuli Android, unesite PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Da biste pokrenuli Android, nacrtajte šablon"</string>
@@ -2767,6 +2764,7 @@
<item quantity="few">Prikaži %d skrivene stavke</item>
<item quantity="other">Prikaži %d skrivenih stavki</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Skupi"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Mreža i internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilna mreža"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"potrošnja podataka"</string>
@@ -2870,8 +2868,14 @@
<item quantity="few"><xliff:g id="ON_COUNT">%d</xliff:g> automatska pravila su uključena</item>
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automatskih pravila je uključeno</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Podešavanja za Ne uznemiravaj"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Dozvoljeni su samo prioriteti"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne uznemiravaj"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Ponašanje"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Dozvoli zvuke i vibracije od:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Bez zvuka"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Bez zvuka (potpuna tišina)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Bez zvuka osim za: <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">"Automatska pravila"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Podesite pravila za režim „Ne uznemiravaj“"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ograniči zvukove i vibracije u određenim intervalima"</string>
@@ -3051,13 +3055,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Samo od kontakata sa zvezdicom"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ni od koga"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmi"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmi su uvek prioritet i emituje se zvuk"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Podsetnici"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Događaji"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Svi pozivaoci"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Izabrani pozivaoci"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Ponovni pozivaoci"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Ako ista osoba pozove po drugi put u roku od <xliff:g id="MINUTES">%d</xliff:g> min, dozvoli poziv"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ako ista osoba pozove po drugi put u periodu od <xliff:g id="MINUTES">%d</xliff:g> min"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Automatski uključi"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nikad"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Svake večeri"</string>
@@ -3088,6 +3093,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kada je ekran isključen"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kada je ekran uključen ili isključen"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Podešavanja obaveštenja"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Potvrdi"</string>
<string name="device_feedback" msgid="3238056036766293294">"Šalji povratne informacije o uređaju"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Unesite PIN administratora"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Uključeno"</string>
@@ -3346,7 +3352,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Mogu da menjaju podešavanja sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Menjanje podešavanja sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Dozvola za menjanje podešavanja sistema za aplikaciju"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Dozvoli menjanje podešavanja sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Dozvoli menjanje podešavanja sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Ova dozvola dozvoljava aplikaciji da menja podešavanja sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Da"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ne"</string>
@@ -3783,7 +3789,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Upoznajte novi tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Upoznajte novi uređaj"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ova funkcija nije dostupna na ovom uređaju."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Status IMS registracije"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrovan je"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nije registrovan"</string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 5658004..7becc9f 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -1186,7 +1186,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-адрас Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Адрас Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Парадкавы нумар"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Адсутнічае"</string>
<string name="status_up_time" msgid="7294859476816760399">"Час працы пасля апошняй загрузкі"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Час пераходу ў актыўны рэжым"</string>
<string name="internal_memory" msgid="9129595691484260784">"Унутраная памяць"</string>
@@ -1497,10 +1496,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Каб карыст. адбіткам пальца, задайце пароль"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Каб карыст. адбіткам пальца, задайце ўзор"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Для большай бяспекі задайце PIN-код"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Каб карыст. адбіт. пал., задайце PIN-код"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Для большай бяспекі задайце ўзор"</string>
@@ -2394,8 +2391,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Немагчыма сінхранізаваць уручную"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Сінхранізацыя для гэтага элемента зараз адключаная. Каб змяніць налады, часова дазвольце абмен дадзенымі ў фонавым рэжыме і аўтаматычную сінхранізацыю."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-адрас"</string>
<string name="enter_password" msgid="8035706727471334122">"Каб запусціць Android, увядзіце пароль"</string>
<string name="enter_pin" msgid="5305333588093263790">"Каб запусціць Android, увядзіце PIN-код"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Каб запусціць Android, увядзіце графічны ключ"</string>
@@ -2796,6 +2791,7 @@
<item quantity="many">Паказаць %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_summary_mobile" msgid="3851083934739500429">"мабільная сетка"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"выкарыстанне трафіка"</string>
@@ -2900,8 +2896,14 @@
<item quantity="many">Уключаны <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="842308776768942600">"Параметры рэжыму \"Не турбаваць\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Дазволены толькі прыярытэтныя"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Не турбаваць"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Паводзіны"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Дазволіць гукі і вібрацыю ад:"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Правілы рэжыму \"Не турбаваць\""</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Абмяжоўваць гукі і вібрацыю ў пэўныя часы"</string>
@@ -3085,13 +3087,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Будзільнік заўсёды важны і падае гукавы сігнал"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Выбраныя выклікі"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Паўторныя выклікі"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Калі адзін і той жа чалавек тэлефануе вам другі раз за <xliff:g id="MINUTES">%d</xliff:g> хвілін, дазволіць гэты выклік"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Калі адзін і той жа чалавек тэлефануе другі раз за наступную колькасць хвілін: <xliff:g id="MINUTES">%d</xliff:g>"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Уключыць аўтаматычна"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Ніколі"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Кожную ноч"</string>
@@ -3124,6 +3127,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Калі экран выключаны"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Калі экран уключаны або выключаны"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Увядзіце PIN-код адміністратара"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Уключана"</string>
@@ -3390,7 +3394,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Якія могуць змяняць сістэмныя налады"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Змена сістэмных налад"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Дазвол змены сістэмных налад для дадатку"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Дазволіць змяняць сістэмныя налады"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Дазволіць змяняць налады сістэмы"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Гэта дазваляе дадатку змяняць сістэмныя налады."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Так"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Не"</string>
@@ -3843,7 +3847,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Аглядны тур па новаму планшэту"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Аглядны тур па новай прыладзе"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Гэта функцыя недаступная на гэтай прыладзе"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Стан рэгістрацыі IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Зарэгістраваны"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не зарэгістраваны"</string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 9f90046..37181e2 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC адрес за Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Адрес на Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Сериен номер"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Няма данни"</string>
<string name="status_up_time" msgid="7294859476816760399">"Време на активност"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Време на активност"</string>
<string name="internal_memory" msgid="9129595691484260784">"Вътрешно хранилище"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Не може да се синхронизира ръчно"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Синхронизирането за този елемент понастоящем е деактивирано. За да промените настройката, временно включете данните на заден план и автоматичното синхронизиране."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"MAC адрес за 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"За да стартирате Android, въведете паролата си"</string>
<string name="enter_pin" msgid="5305333588093263790">"За да стартирате Android, въведете ПИН кода си"</string>
<string name="enter_pattern" msgid="4187435713036808566">"За да стартирате Android, начертайте фигурата си"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"мобилна мрежа"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"пренос на данни"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"Режим „Не безпокойте“"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Само приоритетни прекъсвания"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Не безпокойте"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Поведение"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Разреш. на звуци и вибрир. от"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Правила за „Не безпокойте“"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Без звуци и вибриране в дадени моменти"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Будилниците са винаги с приоритет и издават звук"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Избрани обаждащи се"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Повторно обаждащи се"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Ако един и същ човек се обади втори път в рамките на период от <xliff:g id="MINUTES">%d</xliff:g> мин, това да се разреши"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ако един и същ човек се обади втори път в рамките на период от <xliff:g id="MINUTES">%d</xliff:g> мин"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Авт. включване"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Никога"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Всяка вечер"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"При изключен екран"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"При включен или изключен екран"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Въведете администраторския ПИН код"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Включено"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Възможност за промяна на системните настройки"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Промяна на сист. настройки"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Промяна на системните настройки от приложения"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Разрешаване на промяна на сист. настройки"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Разрешаване на промяна на сист. настройки"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Това разрешение позволява на дадено приложение да променя системните настройки."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Да"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Не"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Запознайте се с новия си таблет"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Запознайте се с новото си устройство"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Тази функция не е налице на устройството"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Състояние на регистрацията за незабавни съобщения"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Регистрирано"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не е регистрирано"</string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index f104b37..f056cd2 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"ওয়াই-ফাই MAC ঠিকানা"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ব্লুটুথ ঠিকানা"</string>
<string name="status_serial_number" msgid="2257111183374628137">"ক্রমিক সংখ্যা"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"অনুপলব্ধ"</string>
<string name="status_up_time" msgid="7294859476816760399">"আপ টাইম"</string>
<string name="status_awake_time" msgid="2393949909051183652">"জাগ্রত সময়"</string>
<string name="internal_memory" msgid="9129595691484260784">"ইন্টারনাল স্টোরেজ"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"আঙ্গুলের ছাপ ব্যবহার করতে পাসওয়ার্ড সেট করুন"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"আঙ্গুলের ছাপ ব্যবহার করতে প্যাটার্ন সেট করুন"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"নিরাপত্তার জন্য একটি পিন সেট করুন"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"আঙ্গুলের ছাপ ব্যবহার করতে পিন সেট করুন"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"নিরাপত্তার জন্য একটি প্যাটার্ন সেট করুন"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"ম্যানুয়ালি সমন্বয় করা যাবে না"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"এই আইটেমটির জন্য সিঙ্ক বর্তমানে অক্ষম। এই সেটিং পরিবর্তন করতে, অস্থায়ীভাবে ব্যাকগ্রাউন্ড ডেটা এবং স্বয়ংক্রিয় সিঙ্ক চালু করুন।"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC ঠিকানা"</string>
<string name="enter_password" msgid="8035706727471334122">"Android শুরু করার জন্য, আপনার পাসওয়ার্ড লিখুন"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android শুরু করার জন্য, আপনার পিন লিখুন"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android শুরু করার জন্য, আপনার প্যাটার্ন আঁকুন"</string>
@@ -2641,9 +2636,9 @@
<string name="nfc_payment_use_default" msgid="3234730182120288495">"ডিফল্ট ব্যবহার করুন"</string>
<string name="nfc_payment_favor_default" msgid="5743781166099608372">"সবসময়"</string>
<string name="nfc_payment_favor_open" msgid="1923314062109977944">"অন্য কোনো অর্থপ্রদান অ্যাপ্লিকেশান খুলে থাকার সময় ব্যতিত"</string>
- <string name="nfc_payment_pay_with" msgid="7524904024378144072">"ট্যাপ করে অর্থপ্রদান করুন টার্মিন্যালে, এর মাধ্যমে অর্থ প্রদান করুন:"</string>
- <string name="nfc_how_it_works_title" msgid="1984068457698797207">"টার্মিনালে অর্থপ্রদানের পদ্ধতি"</string>
- <string name="nfc_how_it_works_content" msgid="4749007806393224934">"একটি অর্থপ্রদানের অ্যাপ্লিকেশান সেট আপ করুন৷ তারপরে যোগাযোগহীন চিহ্ন সহ কোনো টার্মিনালের উপর শুধু আপনার ফোনের পিছনের দিকটি ধরুন৷"</string>
+ <string name="nfc_payment_pay_with" msgid="7524904024378144072">"ট্যাপ করে অর্থপ্রদান করুন টার্মিন্যালে, এর মাধ্যমে পেমেন্ট করুন:"</string>
+ <string name="nfc_how_it_works_title" msgid="1984068457698797207">"টার্মিনালে পেমেন্টের পদ্ধতি"</string>
+ <string name="nfc_how_it_works_content" msgid="4749007806393224934">"একটি পেমেন্টের অ্যাপ্লিকেশান সেট আপ করুন৷ তারপরে যোগাযোগহীন চিহ্ন সহ কোনো টার্মিনালের উপর শুধু আপনার ফোনের পিছনের দিকটি ধরুন৷"</string>
<string name="nfc_how_it_works_got_it" msgid="259653300203217402">"বুঝেছি"</string>
<string name="nfc_more_title" msgid="815910943655133280">"আরো..."</string>
<string name="nfc_payment_set_default_label" msgid="7315817259485674542">"আপনার পছন্দ হিসেবে সেট করুন?"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"মোবাইল"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ডেটার ব্যবহার"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"\'বিরক্ত করবেন না\' বিকল্পগুলি"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"অগ্রাধিকার অনুমতিগুলি"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"বিরক্ত করবেন না"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"আচরণ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"এগুলির সাউন্ড ও ভাইব্রেশন হবে"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"\'বিরক্ত করবেন না\' সেট আপ করুন"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"নির্দিষ্ট সময়ের ক্ষেত্রে শব্দ এবং কম্পন সীমিত করুন"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"অ্যালার্ম সর্বদা অগ্রাধিকার পায় এবং সেগুলি থেকে আওয়াজ হয়"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"নির্বাচিত কলারগুলি"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"কলারগুলির পুনরাবৃত্তি করুন"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"যদি একই ব্যক্তি <xliff:g id="MINUTES">%d</xliff:g> মিনিটের মধ্যে দ্বিতীয়বার কল করেন, তবে এটি অনুমোদন করুন"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"একই ব্যক্তি দ্বিতীয়বার কল করলে <xliff:g id="MINUTES">%d</xliff:g>"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"স্বয়ংক্রিয়ভাবে চালু"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"কখনও নয়"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"প্রতিদিন রাতে"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"যখন স্ক্রীন বন্ধ থাকে"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"যখন স্ক্রীন চালু বা বন্ধ থাকে"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"প্রশাসকের পিন লিখুন"</string>
<string name="switch_on_text" msgid="1124106706920572386">"চালু করুন"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"সিস্টেম সেটিংস সংশোধন করতে পারে"</string>
<string name="write_system_settings" msgid="3482913590601096763">"সিস্টেম সেটিংস সংশোধন করুন"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"অ্যাপ্লিকেশানটি সিস্টেম সেটিংসের অনুমতি সংশোধন করে"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"সিস্টেম সেটিংস সংশোধন করার অনুমতি দিন"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"সিস্টেম সেটিংস পরিবর্তনের অনুমতি দিন"</string>
<string name="write_settings_description" msgid="6868293938839954623">"এই অনুমতিটি কোনো অ্যাপ্লিকেশানকে সিস্টেম সেটিংস সংশোধন করার অনুমতি দেয়৷"</string>
<string name="write_settings_on" msgid="8230580416068832239">"হ্যাঁ"</string>
<string name="write_settings_off" msgid="5156104383386336233">"না"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"আপনার নতুন ট্যাবলেট চালিয়ে দেখুন"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"আপনার নতুন ডিভাইস চালিয়ে দেখুন"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"এই বৈশিষ্ট্যটি এই ডিভাইসে উপলব্ধ নেই"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS রেজিস্ট্রেশনের স্থিতি"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"রেজিস্টার করা"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"রেজিস্টার করা নয়"</string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 30ccc9e..8e1bf17 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -370,9 +370,9 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="1507739327565151923"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="3201556857492526098">"Otključavanje otiskom prsta"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7066417934622827305">"Koristite otisak prsta"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="3508870672887336095">"Samo dodirnite senzor za otisak prsta da otključate telefon, odobrite kupovinu ili da se prijavite u aplikaciju. Pazite čije otiske prsta dodajete. Samo jedan dodani otisak može izvršiti sve navedeno.\n\nNapomena: Vaš otisak prsta može biti manje siguran od jakog uzorka ili PIN kôda."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="3508870672887336095">"Samo dodirnite senzor za otisak prsta da otključate telefon, odobrite kupovinu ili da se prijavite u aplikaciju. Pazite čije otiske prsta dodajete. Samo jedan dodani otisak može izvršiti sve navedeno.\n\nNapomena: Vaš otisak prsta može biti manje siguran od jakog uzorka ili PIN-a."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1550756694054944874">"Pomoću otiska prsta otključavajte telefon ili odobravajte kupovinu.\n\nNapomena: otisak prsta ne možete koristiti za otključavanje ovog uređaja. Za više informacija, obratite se administratoru svoje organizacije"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6817326798834882531">"Pomoću otiska prsta otključavajte telefon ili odobravajte kupovinu.\n\nNapomena: otisak vašeg prsta može biti manje siguran od jakog uzorka ili PIN koda."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6817326798834882531">"Pomoću otiska prsta otključavajte telefon ili odobravajte kupovinu.\n\nNapomena: otisak vašeg prsta može biti manje siguran od jakog uzorka ili PIN-a."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="3199351118385606526">"Otkaži"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="7472492858148162530">"Nastavi"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="5021369420474432665">"Preskoči"</string>
@@ -511,7 +511,7 @@
</xliff:g>Vaši sačuvani otisci prstiju također će se ukloniti iz ovog uređaja i nećete ih moći koristiti za otključavanje telefona, odobravanje kupovine ili prijavljivanje u aplikacije."</string>
<string name="unlock_disable_frp_warning_content_pin" msgid="586996206210265131">"Funkcija zaštite uređaja neće raditi bez PIN-a."</string>
- <string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="3370462835533123695">"Funkcije za zaštitu uređaja neće raditi bez PIN koda.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="3370462835533123695">"Funkcije za zaštitu uređaja neće raditi bez PIN-a.<xliff:g id="EMPTY_LINE">
</xliff:g>Vaši sačuvani otisci prstiju također će se ukloniti iz ovog uređaja i nećete ih moći koristiti za otključavanje telefona, odobravanje kupovine ili prijavljivanje u aplikacije."</string>
<string name="unlock_disable_frp_warning_content_password" msgid="5420612686852555537">"Funkcija zaštite uređaja neće raditi bez lozinke."</string>
@@ -527,7 +527,7 @@
</xliff:g>Vaši sačuvani otisci prstiju također će se ukloniti iz ovog profila i nećete ih moći koristiti za otključavanje profila, odobravanje kupovine ili prijavljivanje u aplikacije."</string>
<string name="unlock_disable_frp_warning_content_pin_profile" msgid="7790688070593867767">"Funkcije za zaštitu profila neće funkcionirati bez PIN-a."</string>
- <string name="unlock_disable_frp_warning_content_pin_fingerprint_profile" msgid="4209564603132870532">"Funkcije za zaštitu profila neće raditi bez PIN koda.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_pin_fingerprint_profile" msgid="4209564603132870532">"Funkcije za zaštitu profila neće raditi bez PIN-a.<xliff:g id="EMPTY_LINE">
</xliff:g>Vaši sačuvani otisci prstiju također će se ukloniti iz ovog profila i nećete ih moći koristiti za otključavanje profila, odobravanje kupovine ili prijavljivanje u aplikacije."</string>
<string name="unlock_disable_frp_warning_content_password_profile" msgid="7569285520567674461">"Funkcije za zaštitu profila neće funkcionirati bez lozinke."</string>
@@ -545,13 +545,13 @@
<string name="lock_failed_attempts_before_wipe" msgid="2219711062197089783">"Pokušajte ponovo. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. od <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g> pokušaja."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="4277765862798876826">"Vaši podaci će se izbrisati"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="1688030823464420974">"Ako u sljedećem pokušaju unesete neispravan obrazac, podaci ovog uređaja će se izbrisati"</string>
- <string name="lock_last_pin_attempt_before_wipe_device" msgid="5350785938296254352">"Ako u sljedećem pokušaju unesete neispravan PIN kôd, podaci ovog uređaja će se izbrisati"</string>
+ <string name="lock_last_pin_attempt_before_wipe_device" msgid="5350785938296254352">"Ako u sljedećem pokušaju unesete neispravan PIN, podaci ovog uređaja će se izbrisati"</string>
<string name="lock_last_password_attempt_before_wipe_device" msgid="6208035114731421034">"Ako u sljedećem pokušaju unesete neispravnu lozinku, podaci ovog uređaja će se izbrisati"</string>
<string name="lock_last_pattern_attempt_before_wipe_user" msgid="7851504071368235547">"Ako u sljedećem pokušaju unesete neispravan obrazac, ovaj korisnik će se izbrisati"</string>
- <string name="lock_last_pin_attempt_before_wipe_user" msgid="4049024921333961715">"Ako u sljedećem pokušaju unesete neispravan PIN kôd, ovaj korisnik će se izbrisati"</string>
+ <string name="lock_last_pin_attempt_before_wipe_user" msgid="4049024921333961715">"Ako u sljedećem pokušaju unesete neispravan PIN, ovaj korisnik će se izbrisati"</string>
<string name="lock_last_password_attempt_before_wipe_user" msgid="4660886542496781672">"Ako u sljedećem pokušaju unesete neispravnu lozinku, ovaj korisnik će se izbrisati"</string>
<string name="lock_last_pattern_attempt_before_wipe_profile" msgid="2437716252059050291">"Ako u sljedećem pokušaju unesete neispravan obrazac, vaš radni profil i njegovi podaci će se izbrisati"</string>
- <string name="lock_last_pin_attempt_before_wipe_profile" msgid="5799931839127476913">"Ako u sljedećem pokušaju unesete neispravan PIN kôd, vaš radni profil i njegovi podaci će se izbrisati"</string>
+ <string name="lock_last_pin_attempt_before_wipe_profile" msgid="5799931839127476913">"Ako u sljedećem pokušaju unesete neispravan PIN, vaš radni profil i njegovi podaci će se izbrisati"</string>
<string name="lock_last_password_attempt_before_wipe_profile" msgid="6786586046975042158">"Ako u sljedećem pokušaju unesete neispravnu lozinku, vaš radni profil i njegovi podaci će se izbrisati"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="5047439819181833824">"Previše je neispravnih pokušaja. Podaci ovog uređaja će se izbrisati."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="6188180643494518001">"Previše je neispravnih pokušaja. Ovaj korisnik će se izbrisati."</string>
@@ -563,7 +563,7 @@
<string name="lockpassword_password_too_long" msgid="4591720174765403476">"Ukupan broj znakova mora biti manji od <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="lockpassword_pin_too_long" msgid="2079396149560490458">"Ukupan broj cifara mora biti manji od <xliff:g id="NUMBER">%d</xliff:g>"</string>
<string name="lockpassword_pin_contains_non_digits" msgid="7284664023164191198">"Mora sadržavati isključivo cifre 0-9."</string>
- <string name="lockpassword_pin_recently_used" msgid="1401569207976460727">"Administrator uređaja ne dozvoljava korištenje nedavnog PIN koda"</string>
+ <string name="lockpassword_pin_recently_used" msgid="1401569207976460727">"Administrator uređaja ne dozvoljava korištenje nedavnog PIN-a"</string>
<string name="lockpassword_illegal_character" msgid="8049611046639943217">"Ne može sadržavati nevažeći znak"</string>
<string name="lockpassword_password_requires_alpha" msgid="3036589522150097731">"Mora sadržavati najmanje jedno slovo"</string>
<string name="lockpassword_password_requires_digit" msgid="5140062925787058765">"Mora sadržavati najmanje jednu cifru"</string>
@@ -946,7 +946,7 @@
<item msgid="3194458950573886239">"0"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_without_wifi_only">
- <item msgid="5782108782860004851">"Prednost ima Wi-Fi"</item>
+ <item msgid="5782108782860004851">"Preferira se Wi-Fi"</item>
<item msgid="5074515506087318555">"Preferira se mobilna mreža"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
@@ -1113,7 +1113,7 @@
<string name="sim_reenter_new" msgid="6523819386793546888">"Ponovo unesite novi PIN"</string>
<string name="sim_change_pin" msgid="7328607264898359112">"PIN za SIM"</string>
<string name="sim_bad_pin" msgid="2345230873496357977">"Pogrešan PIN"</string>
- <string name="sim_pins_dont_match" msgid="1695021563878890574">"PIN kodovi se ne podudaraju"</string>
+ <string name="sim_pins_dont_match" msgid="1695021563878890574">"PIN-ovi se ne podudaraju"</string>
<string name="sim_change_failed" msgid="3602072380172511475">"Nije moguće promijeniti PIN.\nMožda je PIN neispravan."</string>
<string name="sim_change_succeeded" msgid="8556135413096489627">"PIN za SIM uspješno promijenjen"</string>
<string name="sim_lock_failed" msgid="2489611099235575984">"Ne možete otključati SIM.\nPIN je možda pogrešan."</string>
@@ -1125,11 +1125,11 @@
<string name="sim_change_data_message" msgid="5854582807996717811">"Želite li za prijenos mobilnih podataka koristiti SIM karticu <xliff:g id="NEW_SIM">%1$s</xliff:g> umjesto SIM kartice <xliff:g id="OLD_SIM">%2$s</xliff:g>?"</string>
<string name="sim_preferred_title" msgid="5567909634636045268">"Ažurirati željenu SIM karticu?"</string>
<string name="sim_preferred_message" msgid="8466930554330635780">"SIM kartica <xliff:g id="NEW_SIM">%1$s</xliff:g> jedina je SIM kartica u vašem uređaju. Želite li tu SIM karticu koristiti za prijenos mobilnih podataka, pozive i SMS poruke?"</string>
- <string name="wrong_pin_code_pukked" msgid="4003655226832658066">"PIN kôd za SIM je netačan. Za otključavanje uređaja sada morate kontaktirati svog operatera."</string>
+ <string name="wrong_pin_code_pukked" msgid="4003655226832658066">"PIN za SIM je netačan. Za otključavanje uređaja sada morate kontaktirati svog operatera."</string>
<plurals name="wrong_pin_code" formatted="false" msgid="1582398808893048097">
- <item quantity="one">PIN kôd za SIM je netačan. Preostao vam je još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
- <item quantity="few">PIN kôd za SIM je netačan. Preostala su vam još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
- <item quantity="other">PIN kôd za SIM je netačan. Preostalo vam je još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
+ <item quantity="one">PIN za SIM je netačan. Preostao vam je još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaj.</item>
+ <item quantity="few">PIN za SIM je netačan. Preostala su vam još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
+ <item quantity="other">PIN za SIM je netačan. Preostalo vam je još <xliff:g id="NUMBER_1">%d</xliff:g> pokušaja.</item>
</plurals>
<string name="pin_failed" msgid="1848423634948587645">"Operacija PIN-a za SIM nije uspjela!"</string>
<string name="device_info_settings" product="tablet" msgid="1119755927536987178">"Status tableta"</string>
@@ -1172,7 +1172,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC adresa Wi-Fi mreže"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serijski broj"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nije dostupno"</string>
<string name="status_up_time" msgid="7294859476816760399">"Vrijeme aktivnosti"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Vrijeme aktivnosti"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interna pohrana"</string>
@@ -1385,7 +1384,7 @@
<string name="master_clear_progress_text" msgid="6559096229480527510">"Pričekajte..."</string>
<string name="call_settings_title" msgid="5188713413939232801">"Postavke poziva"</string>
<string name="call_settings_summary" msgid="7291195704801002886">"Postavite govornu poštu, prosljeđivanje poziva, poziv na čekanju, ID pozivaoca"</string>
- <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB dijeljenje veze"</string>
+ <string name="tether_settings_title_usb" msgid="6688416425801386511">"Povezivanje mobitela USB-om"</string>
<string name="tether_settings_title_wifi" msgid="3277144155960302049">"Prijenosna pristupna tačka"</string>
<string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Dijeljenje Bluetooth veze"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Dijeljenje veze"</string>
@@ -1485,12 +1484,12 @@
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"Postavite lozinku radi sigurnosti"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Da koristite otisak prsta, postavite lozinku"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Da koristite otisak prsta, postavite uzorak"</string>
- <string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Postavite PIN kôd radi sigurnosti"</string>
- <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Da koristite otisak prsta, postavite PIN kôd"</string>
+ <string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Postavite PIN radi sigurnosti"</string>
+ <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Da koristite otisak prsta, postavite PIN"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Postavite uzorak radi sigurnosti"</string>
<string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Ponovo unesite lozinku"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"Potvrdite uzorak"</string>
- <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"Ponovo unesite PIN kôd"</string>
+ <string name="lockpassword_confirm_your_pin_header" msgid="7744513791910572550">"Ponovo unesite PIN"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="5140892109439191415">"Lozinke se ne podudaraju"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="7226244811505606217">"PIN-ovi se ne podudaraju"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="3811438094903786145">"Vrste otključavanja"</string>
@@ -1504,16 +1503,16 @@
<string name="lockpassword_confirm_your_pin_generic_profile" msgid="3730141667547002246">"Za nastavak, unesite radni PIN."</string>
<string name="lockpassword_confirm_your_password_generic_profile" msgid="4250642723467019894">"Za nastavak, unesite radnu lozinku."</string>
<string name="lockpassword_strong_auth_required_device_pattern" msgid="530802132223800623">"Za dodatnu sigurnost, unesite uzorak uređaja"</string>
- <string name="lockpassword_strong_auth_required_device_pin" msgid="7829294830078036417">"Za dodatnu sigurnost, unesite PIN kôd uređaja"</string>
+ <string name="lockpassword_strong_auth_required_device_pin" msgid="7829294830078036417">"Za dodatnu sigurnost, unesite PIN uređaja"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="3552644641574796973">"Za dodatnu sigurnost, unesite lozinku uređaja"</string>
<string name="lockpassword_strong_auth_required_work_pattern" msgid="3003781907040522053">"Za dodatnu sigurnost, unesite radni uzorak"</string>
- <string name="lockpassword_strong_auth_required_work_pin" msgid="3367491332598821552">"Za dodatnu sigurnost, unesite radni PIN kôd"</string>
+ <string name="lockpassword_strong_auth_required_work_pin" msgid="3367491332598821552">"Za dodatnu sigurnost, unesite radni PIN"</string>
<string name="lockpassword_strong_auth_required_work_password" msgid="8159775129968582940">"Za dodatnu sigurnost, unesite radnu lozinku"</string>
<string name="lockpassword_confirm_your_pattern_details_frp" msgid="6757336656791723193">"Vaš telefon je vraćen na fabričke postavke. Da koristite telefon, unesite prethodni obrazac."</string>
- <string name="lockpassword_confirm_your_pin_details_frp" msgid="826520613445990470">"Vaš telefon je vraćen na fabričke postavke. Da koristite telefon, unesite prethodni PIN kôd."</string>
+ <string name="lockpassword_confirm_your_pin_details_frp" msgid="826520613445990470">"Vaš telefon je vraćen na fabričke postavke. Da koristite telefon, unesite prethodni PIN."</string>
<string name="lockpassword_confirm_your_password_details_frp" msgid="8944081074615739040">"Vaš telefon je vraćen na fabričke postavke. Da koristite telefon, unesite prethodnu lozinku."</string>
<string name="lockpassword_confirm_your_pattern_header_frp" msgid="2898036091609128286">"Potvrdite obrazac"</string>
- <string name="lockpassword_confirm_your_pin_header_frp" msgid="4141601774778898803">"Potvrdite PIN kôd"</string>
+ <string name="lockpassword_confirm_your_pin_header_frp" msgid="4141601774778898803">"Potvrdite PIN"</string>
<string name="lockpassword_confirm_your_password_header_frp" msgid="3762615419295360480">"Potvrdite lozinku"</string>
<string name="lockpassword_invalid_pin" msgid="15588049067548470">"Pogrešan PIN"</string>
<string name="lockpassword_invalid_password" msgid="4038507398784975200">"Pogrešna lozinka"</string>
@@ -2370,8 +2369,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nije moguće ručno sinhronizovati"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sinhroniziranje za ovu stavku trenutno nije moguće. Da biste promijenili ovu postavku, privremeno uključite podatke u pozadini i automatsko sinhroniziranje."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC adresa"</string>
<string name="enter_password" msgid="8035706727471334122">"Da biste pokrenuli Android, unesite lozinku"</string>
<string name="enter_pin" msgid="5305333588093263790">"Da biste pokrenuli Android, unesite PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Da biste pokrenuli Android, nacrtajte svoj obrazac"</string>
@@ -2767,6 +2764,7 @@
<item quantity="few">Prikaži %d skrivene stavke</item>
<item quantity="other">Prikaži %d skrivenih stavki</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Suzite"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Mreža i internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilna mreža"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"prijenos podataka"</string>
@@ -2870,8 +2868,14 @@
<item quantity="few">Uključena su <xliff:g id="ON_COUNT">%d</xliff:g> automatska pravila</item>
<item quantity="other">Uključeno je <xliff:g id="ON_COUNT">%d</xliff:g> automatskih pravila</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Postavke funkcije Ne ometaj"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioritetni način dopušta samo sljedeće"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne ometaj"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Ponašanje"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Omogući zvuke i vibracije od"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Bez zvuka"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Bez zvuka (Potpuno utišano)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Bez zvuka osim <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">"Automatska pravila"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Postavite pravila za funkciju Ne ometaj"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ograničite zvuk i vibracije u određenim vremenskim periodima"</string>
@@ -3051,13 +3055,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Samo od kontakata označenih zvjezdicom"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ništa"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmi"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmi uvijek imaju prioritet i oglašavaju se zvukom"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Podsjetnici"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Događaji"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Svi pozivi"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Odabrani pozivaoci"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Ponovni pozivaoci"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Dopuštanje poziva ako ista osoba zove drugi put u roku od <xliff:g id="MINUTES">%d</xliff:g> min."</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ukoliko ista osoba pozove ponovo u roku od <xliff:g id="MINUTES">%d</xliff:g> min"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Automatski upaliti"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nikad"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Svaku noć"</string>
@@ -3088,8 +3093,9 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kada je ekran isključen"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kada je ekran isključen ili uključen"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Postavke za obavještenja"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Uredu"</string>
<string name="device_feedback" msgid="3238056036766293294">"Slanje informacija o uređaju"</string>
- <string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Upišite PIN kôd administratora"</string>
+ <string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Upišite PIN administratora"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Uključeno"</string>
<string name="switch_off_text" msgid="1139356348100829659">"Isključeno"</string>
<string name="screen_pinning_title" msgid="2292573232264116542">"Kačenje ekrana"</string>
@@ -3103,7 +3109,7 @@
<string name="experimental_preference" msgid="7083015446690681376">"(Eksperimentalno)"</string>
<string name="encryption_interstitial_header" msgid="468015813904595613">"Sigurno pokretanje"</string>
<string name="encryption_continue_button" msgid="1121880322636992402">"Nastavi"</string>
- <string name="encryption_interstitial_message_pin" msgid="2317181134653424679">"Uređaj možete dodatno zaštiti tako što ćete tražiti PIN kôd prije nego što se pokrene. Dok se uređaj ne pokrene, ne može primati pozive, poruke ili obavještenja, uključujući alarme. \n\nOvim se štite podaci na izgubljenim ili ukradenim uređajima. Želite li da se za pokretanje uređaja traži PIN kôd?"</string>
+ <string name="encryption_interstitial_message_pin" msgid="2317181134653424679">"Uređaj možete dodatno zaštiti tako što ćete tražiti PIN prije nego što se pokrene. Dok se uređaj ne pokrene, ne može primati pozive, poruke ili obavještenja, uključujući alarme. \n\nOvim se štite podaci na izgubljenim ili ukradenim uređajima. Želite li da se za pokretanje uređaja traži PIN?"</string>
<string name="encryption_interstitial_message_pattern" msgid="7081249914068568570">"Uređaj možete dodatno zaštiti tako što ćete tražiti unošenje uzorka prije nego što se pokrene. Dok se uređaj ne pokrene, ne može primati pozive, poruke ili obavještenja, uključujući alarme. \n\nOvim se štite podaci na izgubljenim ili ukradenim uređajima. Želite li da se za pokretanje uređaja traži unošenje uzorka?"</string>
<string name="encryption_interstitial_message_password" msgid="7796567133897436443">"Uređaj možete dodatno zaštiti tako što ćete tražiti lozinku prije nego što se pokrene. Dok se uređaj ne pokrene, ne može primati pozive, poruke ili obavještenja, uključujući alarme. \n\nOvim se štite podaci na izgubljenim ili ukradenim uređajima. Želite li da se za pokretanje uređaja traži lozinka?"</string>
<string name="encryption_interstitial_message_pin_for_fingerprint" msgid="4550632760119547492">"Osim korištenja otiska prsta za otključavanje, uređaj možete dodatno zaštiti zahtijevanjem unošenja PIN-a prije nego što se pokrene. Dok se uređaj ne pokrene, ne može primati pozive, poruke ili obavještenja, uključujući alarme. \n\nOvim se štite podaci na izgubljenim ili ukradenim uređajima. Želite li da se za pokretanje uređaja zahtijeva PIN?"</string>
@@ -3242,7 +3248,7 @@
<item quantity="other">Aplikacije prazne bateriju</item>
</plurals>
<string name="high_power_filter_on" msgid="3222265297576680099">"Bez optimizacije"</string>
- <string name="high_power_on" msgid="6216293998227583810">"Nije optimiziran"</string>
+ <string name="high_power_on" msgid="6216293998227583810">"Nije optimizirano"</string>
<string name="high_power_off" msgid="3393904131961263278">"Optimizacija potrošnje baterije"</string>
<string name="high_power_system" msgid="7362862974428225301">"Optimizacija baterije je nedostupna"</string>
<string name="high_power_desc" msgid="6283926163708585760">"Ne primjenjuje se optimizacija baterije. Tako se baterija može brže isprazniti."</string>
@@ -3346,7 +3352,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Mogu mijenjati postavke sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Izmjeni postavke sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Dozvola za izmjenu postavki sistema aplikacije"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Dozvoli izmijenu postavki sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Dozvoli izmjenu postavki sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Ovo odobrenje omogućava aplikaciji da izmijeni postavke sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Da"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ne"</string>
@@ -3783,7 +3789,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Upoznajte se s novim tabletom"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Upoznajte se s novim uređajem"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ova funkcija nije dostupna na ovom uređaju"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stanje IMS registracije"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrirano"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nije registrirano"</string>
</resources>
diff --git a/res/values-ca/arrays.xml b/res/values-ca/arrays.xml
index 5cf72a3..bc9e015 100644
--- a/res/values-ca/arrays.xml
+++ b/res/values-ca/arrays.xml
@@ -149,7 +149,7 @@
</string-array>
<string-array name="usage_stats_display_order_types">
<item msgid="2100172576767439288">"Temps d\'ús"</item>
- <item msgid="4796160515314745154">"Darrera vegada que es va fer servir"</item>
+ <item msgid="4796160515314745154">"Darrer ús"</item>
<item msgid="2502754479975776899">"Nom de l\'aplicació"</item>
</string-array>
<string-array name="wifi_eap_entries">
@@ -316,15 +316,15 @@
<item msgid="2154671955760380322">"Notificació de la publicació"</item>
<item msgid="4282477730595931828">"Ubicació"</item>
<item msgid="4891423912898525905">"Trucada"</item>
- <item msgid="2623604824935968113">"Llegeix l\'SMS/MMS"</item>
- <item msgid="4420177125221176306">"Escriu un SMS/MMS"</item>
+ <item msgid="2623604824935968113">"Llegeix SMS/MMS"</item>
+ <item msgid="4420177125221176306">"Escriu SMS/MMS"</item>
<item msgid="3986142739951490025">"Rep SMS/MMS"</item>
<item msgid="3984213795861739778">"Rep SMS/MMS"</item>
<item msgid="3656243523752472788">"Rep SMS/MMS"</item>
<item msgid="8105802370238551510">"Rep SMS/MMS"</item>
<item msgid="1407766984645388488">"Envia SMS/MMS"</item>
- <item msgid="3527273606643794973">"Llegeix l\'SMS/MMS"</item>
- <item msgid="4370895547001583812">"Escriu un SMS/MMS"</item>
+ <item msgid="3527273606643794973">"Llegeix SMS/MMS"</item>
+ <item msgid="4370895547001583812">"Escriu SMS/MMS"</item>
<item msgid="4218544235221631789">"Modifica la configuració"</item>
<item msgid="736541391767350377">"Dibuixa a sobre"</item>
<item msgid="5530815681721654194">"Accedeix a les notificacions"</item>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 09b1877..b19deba 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -919,7 +919,7 @@
<skip />
<string name="wifi_calling_roaming_mode_dialog_title" msgid="7800926602662078576">"Preferència en itinerància"</string>
<string-array name="wifi_calling_mode_choices">
- <item msgid="2124257075906188844">"Preferència per la Wi-Fi"</item>
+ <item msgid="2124257075906188844">"Preferència per a la Wi-Fi"</item>
<item msgid="1335127656328817518">"Preferència per a dades mòbils"</item>
<item msgid="3132912693346866895">"Només Wi-Fi"</item>
</string-array>
@@ -934,7 +934,7 @@
<item msgid="3194458950573886239">"0"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_without_wifi_only">
- <item msgid="5782108782860004851">"Preferència per la Wi-Fi"</item>
+ <item msgid="5782108782860004851">"Preferència per a la Wi-Fi"</item>
<item msgid="5074515506087318555">"Preferència per a dades mòbils"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
@@ -1007,9 +1007,9 @@
<string name="accelerometer_title" msgid="7854608399547349157">"Gira pantalla automàticament"</string>
<string name="color_mode_title" msgid="3159275920408338215">"Colors vius"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="429982132339828942">"Canvia l\'orientació automàticament en girar la tauleta"</string>
- <string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"Canvia d\'orientació automàticament en girar el telèfon"</string>
+ <string name="accelerometer_summary_on" product="default" msgid="1133737282813048021">"Canvia l\'orientació automàticament en girar el telèfon"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="4781734213242521682">"Canvia l\'orientació automàticament en girar la tauleta"</string>
- <string name="accelerometer_summary_off" product="default" msgid="5485489363715740761">"Canvia d\'orientació automàticament en girar el telèfon"</string>
+ <string name="accelerometer_summary_off" product="default" msgid="5485489363715740761">"Canvia l\'orientació automàticament en girar el telèfon"</string>
<string name="brightness" msgid="8480105032417444275">"Nivell de brillantor"</string>
<string name="brightness_title" msgid="5746272622112982836">"Brillantor"</string>
<string name="brightness_summary" msgid="838917350127550703">"Ajusta la brillantor de la pantalla"</string>
@@ -1088,9 +1088,9 @@
<string name="sim_lock_settings_summary_on" msgid="39103355956342985">"Bloquejada"</string>
<string name="sim_lock_settings_title" msgid="9018585580955414596">"Bloqueig de targeta SIM"</string>
<string name="sim_pin_toggle" msgid="1742123478029451888">"Bloqueja la targeta SIM"</string>
- <string name="sim_lock_on" product="tablet" msgid="5058355081270397764">"Necessites el PIN per utilitzar la tauleta"</string>
+ <string name="sim_lock_on" product="tablet" msgid="5058355081270397764">"Sol·licita el PIN per utilitzar la tauleta"</string>
<string name="sim_lock_on" product="default" msgid="2503536505568814324">"Sol·licita el PIN per utilitzar el telèfon"</string>
- <string name="sim_lock_off" product="tablet" msgid="2813800553917012356">"Exigeix el PIN per utilitzar la tauleta"</string>
+ <string name="sim_lock_off" product="tablet" msgid="2813800553917012356">"Sol·licita el PIN per utilitzar la tauleta"</string>
<string name="sim_lock_off" product="default" msgid="258981978215428916">"Sol·licita el PIN per utilitzar el telèfon"</string>
<string name="sim_pin_change" msgid="6311414184279932368">"Canvia el PIN de la SIM"</string>
<string name="sim_enter_pin" msgid="6608715137008508432">"PIN de la SIM"</string>
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adreça MAC de Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adreça de Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de sèrie"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"No disponible"</string>
<string name="status_up_time" msgid="7294859476816760399">"Temps actiu"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Temps d\'activació"</string>
<string name="internal_memory" msgid="9129595691484260784">"Emmagatzematge intern"</string>
@@ -1699,7 +1698,7 @@
<string name="running_processes_header_footer" msgid="723908176275428442">"RAM utilitzada per aplicacions"</string>
<string name="running_processes_header_system_prefix" msgid="6104153299581682047">"Sistema"</string>
<string name="running_processes_header_apps_prefix" msgid="5787594452716832727">"Aplicacions"</string>
- <string name="running_processes_header_free_prefix" msgid="4620613031737078415">"Disponible"</string>
+ <string name="running_processes_header_free_prefix" msgid="4620613031737078415">"Lliure"</string>
<string name="running_processes_header_used_prefix" msgid="5924288703085123978">"En ús"</string>
<string name="running_processes_header_cached_prefix" msgid="7950853188089434987">"A la memòria cau"</string>
<string name="running_processes_header_ram" msgid="996092388884426817">"<xliff:g id="RAM_0">%1$s</xliff:g> de RAM"</string>
@@ -1807,7 +1806,7 @@
<string name="testing_usage_stats" msgid="7823048598893937339">"Estadístiques d\'ús"</string>
<string name="display_order_text" msgid="8592776965827565271">"Ordena per:"</string>
<string name="app_name_label" msgid="5440362857006046193">"Aplicació"</string>
- <string name="last_time_used_label" msgid="8459441968795479307">"Darrera vegada que es va fer servir"</string>
+ <string name="last_time_used_label" msgid="8459441968795479307">"Darrer ús"</string>
<string name="usage_time_label" msgid="295954901452833058">"Temps d\'ús"</string>
<string name="accessibility_settings" msgid="3975902491934816215">"Accessibilitat"</string>
<string name="accessibility_settings_title" msgid="2130492524656204459">"Configuració d\'accessibilitat"</string>
@@ -1853,7 +1852,7 @@
<string name="accessibility_autoclick_delay_preference_title" msgid="3962261178385106006">"Retard abans del clic"</string>
<string name="accessibility_summary_state_enabled" msgid="8359913912320966304">"ACTIVAT"</string>
<string name="accessibility_summary_state_disabled" msgid="2241315620132005595">"DESACTIVADA"</string>
- <string name="enable_quick_setting" msgid="2366999897816894536">"Mostra a Configuració ràpida"</string>
+ <string name="enable_quick_setting" msgid="2366999897816894536">"Mostra a configuració ràpida"</string>
<string name="daltonizer_type" msgid="1124178250809091080">"Mode de correcció"</string>
<plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="7340347830562315800">
<item quantity="other">Retard molt breu (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
@@ -2130,7 +2129,7 @@
<string name="process_stats_type_cached" msgid="6314925846944806511">"Memòria"</string>
<string name="process_stats_os_label" msgid="4813434110442733392">"SO Android"</string>
<string name="process_stats_os_native" msgid="5322428494231768472">"Nadiu"</string>
- <string name="process_stats_os_kernel" msgid="1938523592369780924">"Nucli"</string>
+ <string name="process_stats_os_kernel" msgid="1938523592369780924">"Kernel"</string>
<string name="process_stats_os_zram" msgid="677138324651671575">"Z-Ram"</string>
<string name="process_stats_os_cache" msgid="6432533624875078233">"Memòries cau"</string>
<string name="process_stats_ram_use" msgid="976912589127397307">"Ús de memòria RAM"</string>
@@ -2142,11 +2141,11 @@
<string name="mem_details_title" msgid="6548392825497290498">"Detalls de la memòria"</string>
<string name="mem_state_subtitle" msgid="2407238869781011933">"Estats de la memòria"</string>
<string name="mem_use_subtitle" msgid="7319468770222422412">"Ús de la memòria"</string>
- <string name="mem_use_kernel_type" msgid="8698327165935012484">"Nucli"</string>
+ <string name="mem_use_kernel_type" msgid="8698327165935012484">"Kernel"</string>
<string name="mem_use_native_type" msgid="5976704902328347400">"Nadiu"</string>
<string name="mem_use_kernel_cache_type" msgid="6411475064463957513">"Memòries cau del nucli"</string>
<string name="mem_use_zram_type" msgid="9087217476795358232">"Espai compartit ZRam"</string>
- <string name="mem_use_free_type" msgid="717708548454880840">"Disponible"</string>
+ <string name="mem_use_free_type" msgid="717708548454880840">"Lliure"</string>
<string name="mem_use_total" msgid="6308786055749777934">"Total"</string>
<string name="menu_duration_3h" msgid="4714866438374738385">"3 hores"</string>
<string name="menu_duration_6h" msgid="1940846763432184132">"6 hores"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"No es pot sincronitzar manualment"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"En aquest moment, la sincronització d\'aquest element no està disponible. Per canviar la preferència, activa temporalment les dades en segon pla i la sincronització automàtica."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"adreça MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Per iniciar Android, introdueix la contrasenya."</string>
<string name="enter_pin" msgid="5305333588093263790">"Per iniciar Android, introdueix el PIN."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Per iniciar Android, dibuixa el patró."</string>
@@ -2387,7 +2384,7 @@
<string name="data_usage_menu_sim_cards" msgid="6410498422797244073">"Targetes SIM"</string>
<string name="data_usage_menu_cellular_networks" msgid="8339835014751511300">"Xarxes mòbils"</string>
<string name="data_usage_cellular_data_summary" msgid="8413357481361268285">"En pausa al límit"</string>
- <string name="account_settings_menu_auto_sync" msgid="6243013719753700377">"Sincronitza dades automàt."</string>
+ <string name="account_settings_menu_auto_sync" msgid="6243013719753700377">"Sincronització automàtica de dades"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="785541379617346438">"Sincr. dades personals autom."</string>
<string name="account_settings_menu_auto_sync_work" msgid="329565580969147026">"Sincron. dades feina automàt."</string>
<string name="data_usage_change_cycle" msgid="7776556448920114866">"Canvia el cicle..."</string>
@@ -2734,13 +2731,14 @@
<string name="sim_notification_title" msgid="6272913297433198340">"S\'han canviat les targetes SIM"</string>
<string name="sim_notification_summary" msgid="8858043655706669772">"Toca per configurar"</string>
<string name="sim_pref_divider" msgid="6778907671867621874">"SIM preferida per a"</string>
- <string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"Demana-m\'ho cada vegada"</string>
+ <string name="sim_calls_ask_first_prefs_title" msgid="7941299533514115976">"Pregunta sempre"</string>
<string name="sim_selection_required_pref" msgid="3446721423206414652">"Has de seleccionar una preferència."</string>
<string name="dashboard_title" msgid="5453710313046681820">"Configuració"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="5597356221942118048">
<item quantity="other">Mostra %d elements amagats</item>
<item quantity="one">Mostra %d element amagat</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Replega"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Xarxa i Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"xarxa mòbil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ús de dades"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> regles automàtiques activades</item>
<item quantity="one">1 regla automàtica activada</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferències per a No molestis"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioritat només permet"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"No molestis"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportament"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Permet sons i vibracions de:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Sense so"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Sense so (Silenci total)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Sense so excepte <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">"Regles automàtiques"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Defineix regles de No molestis"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limita sons i vibracions en hores concretes"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Només dels contactes destacats"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Cap"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmes"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Les alarmes sempre tenen prioritat i sonen"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Recordatoris"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Esdeveniments"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Totes les trucades"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Contactes seleccionats"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Trucades repetides"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Si una mateixa persona truca dues vegades en un període de <xliff:g id="MINUTES">%d</xliff:g> minuts, permet la segona trucada"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Si una mateixa persona truca dues vegades en menys de <xliff:g id="MINUTES">%d</xliff:g> minuts"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Activa automàticam."</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Mai"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Cada nit"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Quan la pantalla està desactivada"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Quan la pantalla està activada o desactivada"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Configuració de les notificacions"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"D\'acord"</string>
<string name="device_feedback" msgid="3238056036766293294">"Envia suggeriments sobre el dispositiu"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Introdueix el PIN d\'administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activat"</string>
@@ -3155,7 +3161,7 @@
<item quantity="one">1 aplicació que permet obrir enllaços compatibles</item>
</plurals>
<string name="app_link_open_always" msgid="2474058700623948148">"Obre en aquesta aplicació"</string>
- <string name="app_link_open_ask" msgid="7800878430190575991">"Demana-m\'ho cada vegada"</string>
+ <string name="app_link_open_ask" msgid="7800878430190575991">"Pregunta sempre"</string>
<string name="app_link_open_never" msgid="3407647600352398543">"No obris en aquesta aplicació"</string>
<string name="fingerprint_not_recognized" msgid="1739529686957438119">"No s\'ha reconegut"</string>
<string name="default_apps_title" msgid="1660450272764331490">"Predeterminada"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Pot modificar la configuració del sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modificar configuració sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permís aplicació per modificar configuració sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permet modificar la configuració del sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permet modificar la configuració del sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Aquest permís permet que una aplicació modifiqui la configuració del sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sí"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3513,7 +3519,7 @@
<string name="bluetooth_connected_summary" msgid="7672528674593152862">"Connectat a <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="9173661896296663932">"Connectat a diversos dispositius"</string>
<string name="demo_mode" msgid="2798762752209330277">"Mode de demostració de la IU del sistema"</string>
- <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Camps de configuració ràpida per a desenvolupadors"</string>
+ <string name="quick_settings_developer_tiles" msgid="5947788063262762448">"Mosaics de configuració ràpida per a desenvolupadors"</string>
<string name="support_escalation_title" msgid="4111071371281023145">"Som aquí per ajudar-te"</string>
<string name="support_escalation_24_7_title" msgid="8118369197749832074">"Estem a la teva disposició les 24 hores del dia"</string>
<string name="support_escalation_24_7_content_description" msgid="3772776213036994533">"Estem a la teva disposició les 24 hores del dia"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Dona una ullada a la teva tauleta nova"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Dona una ullada al teu dispositiu nou"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Aquesta funció no està disponible en aquest dispositiu"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estat del registre d\'IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrat"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Sense registrar"</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 1e1b36e..d408663 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adresa MAC sítě Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adresa Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Sériové číslo"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Není k dispozici"</string>
<string name="status_up_time" msgid="7294859476816760399">"Doba provozu"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Doba provozu"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interní úložiště"</string>
@@ -2220,7 +2219,7 @@
<string name="tts_spoken_language" msgid="5542499183472504027">"Mluvený jazyk"</string>
<string name="tts_install_voices_title" msgid="8808823756936022641">"Instalace hlasů"</string>
<string name="tts_install_voices_text" msgid="5292606786380069134">"Pokračujte do aplikace <xliff:g id="TTS_APP_NAME">%s</xliff:g> a nainstalujte hlasy"</string>
- <string name="tts_install_voices_open" msgid="667467793360277465">"Otevřít aplikaci"</string>
+ <string name="tts_install_voices_open" msgid="667467793360277465">"Do aplikace"</string>
<string name="tts_install_voices_cancel" msgid="4711492804851107459">"Zrušit"</string>
<string name="tts_reset" msgid="2661752909256313270">"Obnovit"</string>
<string name="tts_play" msgid="2628469503798633884">"Přehrát"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nelze ručně synchronizovat"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synchronizace této položky je aktuálně deaktivována. Chcete-li nastavení změnit, dočasně zapněte přenos dat na pozadí a automatickou synchronizaci."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adresa MAC sítě 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Chcete-li spustit Android, zadejte heslo"</string>
<string name="enter_pin" msgid="5305333588093263790">"Chcete-li spustit Android, zadejte PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Chcete-li spustit Android, nakreslete gesto"</string>
@@ -2793,6 +2790,7 @@
<item quantity="other">Zobrazit %d skrytých položek</item>
<item quantity="one">Zobrazit %d skrytou položku</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Sbalit"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Síť a internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilní síť"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"využití dat"</string>
@@ -2897,8 +2895,14 @@
<item quantity="other">Je zapnuto <xliff:g id="ON_COUNT">%d</xliff:g> automatických pravidel</item>
<item quantity="one">Je zapnuto 1 automatické pravidlo</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Nastavení režimu Nerušit"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Pouze prioritní"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Nerušit"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Chování"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Povolit zvuky a vibrace pro"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Žádné zvuky"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Žádné zvuky (úplné ticho)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Žádné zvuky. Výjimka: <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">"Automatická pravidla"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Nast. pravidel režimu Nerušit"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Omezit zvuky a vibrace v určitou dobu"</string>
@@ -3082,13 +3086,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Pouze od oblíbených kontaktů"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Žádné"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Budíky"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Budíky jsou vždy prioritní a budou slyšet"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Připomenutí"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Události"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Všichni volající"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Vybraní volající"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Volající, kteří volají opakovaně"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Pokud stejná osoba zavolá podruhé během <xliff:g id="MINUTES">%d</xliff:g> min, bude povolena"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Pokud stejná osoba zavolá podruhé během <xliff:g id="MINUTES">%d</xliff:g> min"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Automaticky zapnout"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nikdy"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Každou noc"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Při vypnuté obrazovce"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Při zapnuté i vypnuté obrazovce"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Nastavení oznámení"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Odeslat zpětnou vazbu o tomto zařízení"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Zadejte PIN administrátora"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Zapnuto"</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Smí měnit nastavení systému"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Změny nastavení systému"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Oprávnění aplikace ke změnám nastavení systému"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Povolit provádění změn nastavení systému"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Povolit úpravy nastavení systému"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Toto oprávnění umožňuje aplikaci měnit nastavení systému."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ano"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ne"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Prohlédněte si svůj nový tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Prohlédněte si své nové zařízení"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Funkce v tomto zařízení není k dispozici"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stav registrace IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrováno"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neregistrováno"</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index fe02c0d..d57cae7 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -1072,7 +1072,7 @@
<string name="screensaver_settings_button" msgid="7292214707625717013">"Indstillinger"</string>
<string name="automatic_brightness" msgid="5014143533884135461">"Automatisk lysstyrke"</string>
<string name="lift_to_wake_title" msgid="4555378006856277635">"Løft enheden for at vække den"</string>
- <string name="ambient_display_screen_title" msgid="4252755516328775766">"Inaktiv skærm"</string>
+ <string name="ambient_display_screen_title" msgid="4252755516328775766">"Aktiv låseskærm"</string>
<string name="ambient_display_screen_summary_always_on" msgid="7337555569694794132">"Altid aktiveret/øget batteriforbrug"</string>
<string name="ambient_display_screen_summary_notifications" msgid="1449570742600868654">"Nye underretninger"</string>
<string name="ambient_display_category_triggers" msgid="4359289754456268573">"Hvornår skal den vises"</string>
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-adresse for Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-adresse"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serienummer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Utilgængelig"</string>
<string name="status_up_time" msgid="7294859476816760399">"Oppetid"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Aktivtid"</string>
<string name="internal_memory" msgid="9129595691484260784">"Intern lagerplads"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Der kan ikke synkroniseres manuelt"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synkronisering af dette element er deaktiveret lige nu. Hvis du vil ændre indstillingen, skal du aktivere baggrundsdata og automatisk synkronisering midlertidigt."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-adresse"</string>
<string name="enter_password" msgid="8035706727471334122">"Start Android ved at indtaste din adgangskode"</string>
<string name="enter_pin" msgid="5305333588093263790">"Start Android ved at indtaste din pinkode"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Start Android ved at tegne dit mønster"</string>
@@ -2741,6 +2738,7 @@
<item quantity="one">Vis %d skjult element</item>
<item quantity="other">Vis %d skjulte elementer</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Skjul"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Netværk og internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilnetværk"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"dataforbrug"</string>
@@ -2775,7 +2773,7 @@
<string name="keywords_text_to_speech_output" msgid="5150660047085754699">"hastighed, sprog, standard, tale, indtaling, tts, hjælpefunktion, skærmlæser, blind"</string>
<string name="keywords_date_and_time" msgid="758325881602648204">"ur, militærtid"</string>
<string name="keywords_network_reset" msgid="6024276007080940820">"nulstil, gendan, fabriksdata"</string>
- <string name="keywords_factory_data_reset" msgid="5894970373671252165">"slet, slet, gendan, ryd, fjern"</string>
+ <string name="keywords_factory_data_reset" msgid="5894970373671252165">"ryd, slet, gendan, rens, fjern"</string>
<string name="keywords_printing" msgid="1701778563617114846">"printer"</string>
<string name="keywords_sounds" msgid="7146245090127541167">"højttalerbip"</string>
<string name="keywords_sounds_and_notifications_interruptions" msgid="5426093074031208917">"forstyr ikke, afbryd, afbrydelse, pause"</string>
@@ -2843,8 +2841,14 @@
<item quantity="one"><xliff:g id="ON_COUNT">%d</xliff:g> automatisk regel er slået til</item>
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automatiske regler er slået til</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Præferencer for Forstyr ikke"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Kun prioritet tillader"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Forstyr ikke"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Adfærd"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Tillad lyde og vibrationer fra"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ingen lyd"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ingen lyd (total stilhed)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ingen lyd undtagen fra <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">"Automatiske regler"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Angiv regler for Forstyr ikke"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Begræns lyde og vibrationer på bestemte tidspunkter"</string>
@@ -2915,7 +2919,7 @@
</plurals>
<string name="no_notification_listeners" msgid="3487091564454192821">"Ingen installerede apps har anmodet om adgang til underretninger."</string>
<string name="notification_listener_security_warning_title" msgid="5522924135145843279">"Tillad adgang til underretninger for <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
- <string name="notification_listener_security_warning_summary" msgid="119203147791040151">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> kan læse alle underretninger, herunder personlige oplysninger såsom navne på kontaktpersoner og teksten i de meddelelser, du modtager. Underretningslytteren kan også afvise underretninger eller udløse handlingsknapper, de indeholder. \n\nDette gør det også muligt for appen at slå Forstyr ikke til eller fra og ændre relaterede indstillinger."</string>
+ <string name="notification_listener_security_warning_summary" msgid="119203147791040151">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> kan læse alle underretninger, herunder personlige oplysninger såsom navne på kontaktpersoner og teksten i de meddelelser, du modtager. Underretningslytteren kan også afvise underretninger eller aktivere handlingsknapper, de indeholder. \n\nDette gør det også muligt for appen at slå Forstyr ikke til eller fra og ændre relaterede indstillinger."</string>
<string name="notification_listener_disable_warning_summary" msgid="6738915379642948000">"Hvis du slår adgang til underretninger fra for <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, slås adgangen til Forstyr ikke muligvis også fra."</string>
<string name="notification_listener_disable_warning_confirm" msgid="8333442186428083057">"Slå fra"</string>
<string name="notification_listener_disable_warning_cancel" msgid="8586417377104211584">"Annuller"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Kun fra stjernemarkerede kontaktpersoner"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ingen"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmer"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmer prioriteres altid og afgiver lyde"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Påmindelser"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Begivenheder"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Alle opkaldere"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Udvalgte opkald"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Gentagne opkald"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Tillad, hvis den samme person ringer to gange inden for <xliff:g id="MINUTES">%d</xliff:g> minutter"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Hvis den samme person ringer for anden gang inden for <xliff:g id="MINUTES">%d</xliff:g> minutter"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Aktivér automatisk"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Aldrig"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Hver nat"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Når skærmen er slukket"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Når skærmen er tændt eller slukket"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Indstillinger for underretninger"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send feedback om denne enhed"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Indtast administratorpinkoden"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Til"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Apps, som kan ændre systemindstillinger"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Rediger systemindstillinger"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Apptilladelse til at ændre systemindstillinger"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Tillad ændring af systemindstillinger"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Tillad ændring af systemindstillinger"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Denne tilladelse giver en app lov til at ændre systemindstillinger."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ja"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nej"</string>
@@ -3721,13 +3727,10 @@
<string name="automatic_storage_manager_deactivation_warning" msgid="5605210730828410482">"Slå lagerstyring fra?"</string>
<string name="storage_movies_tv" msgid="5498394447562086890">"Film- og tv-apps"</string>
<string name="carrier_provisioning" msgid="4398683675591893169">"Oplysninger om mobilselskab"</string>
- <string name="trigger_carrier_provisioning" msgid="3434865918009286187">"Udløs mobilselskab"</string>
+ <string name="trigger_carrier_provisioning" msgid="3434865918009286187">"Aktivér mobilselskab"</string>
<string name="new_device_suggestion_title" msgid="698847081680980774">"Hvad er nyt og spændende?"</string>
<string name="new_device_suggestion_summary" product="default" msgid="206396571522515855">"Få en rundvisning på din nye telefon"</string>
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Få en rundvisning på din nye tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Få en rundvisning på din nye enhed"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Denne funktion er ikke tilgængelig på denne enhed"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Status for IMS-registrering"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registreret"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ikke registreret"</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 510dda5..9cf6818 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"WLAN-MAC-Adresse"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-Adresse"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Seriennummer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nicht verfügbar"</string>
<string name="status_up_time" msgid="7294859476816760399">"Betriebszeit"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Aktivzeit"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interner Speicher"</string>
@@ -1473,7 +1472,7 @@
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Alternative für Fingerabdruck einrichten"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Alternative für Fingerabdruck einrichten"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Richte aus Sicherheitsgründen eine PIN ein"</string>
- <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"PIN festlegen, um Fingerabdruck zu verwenden"</string>
+ <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"PIN vergeben, um Fingerabdruck zu nutzen"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Richte aus Sicherheitsgründen ein Muster ein"</string>
<string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Passwort noch einmal eingeben"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"Muster bestätigen"</string>
@@ -1719,7 +1718,7 @@
<string name="runningservicedetails_stop_dlg_title" msgid="4253292537154337233">"Systemdienst beenden?"</string>
<string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="3371302398335665793">"Wenn du diesen Dienst beendest, funktionieren möglicherweise einige Funktionen deines Tablets nicht mehr richtig, bis du es aus- und wieder einschaltest."</string>
<string name="runningservicedetails_stop_dlg_text" product="default" msgid="3920243762189484756">"Wenn du diesen Dienst beendest, funktionieren möglicherweise einige Funktionen deines Telefons nicht mehr richtig, bis du es aus- und wieder einschaltest."</string>
- <string name="language_input_gesture_title" msgid="8749227808244881255">"Sprachen, Eingabe & Gesten"</string>
+ <string name="language_input_gesture_title" msgid="8749227808244881255">"Sprachen, Eingabe & Bewegungen"</string>
<string name="language_input_gesture_summary_on_with_assist" msgid="7219895055450633449"></string>
<string name="language_input_gesture_summary_on_non_assist" msgid="756147879200943161"></string>
<string name="language_input_gesture_summary_off" msgid="4617198819416948217"></string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Manuelle Synchronisierung nicht möglich"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Die Synchronisierung hierfür ist deaktiviert. Zur Änderung dieser Einstellung aktiviere vorübergehend die Hintergrunddaten und die automatische Synchronisierung."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G-MAC-Adresse"</string>
<string name="enter_password" msgid="8035706727471334122">"Gib dein Passwort ein, um Android zu starten."</string>
<string name="enter_pin" msgid="5305333588093263790">"Gib deine PIN ein, um Android zu starten."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Zeichne dein Muster, um Android zu starten."</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">%d ausgeblendete Elemente anzeigen</item>
<item quantity="one">%d ausgeblendetes Element anzeigen</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Minimieren"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Netzwerk & Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"Mobilfunknetz"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"Datennutzung"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automatische Regeln aktiviert</item>
<item quantity="one">1 automatische Regel aktiviert</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Einstellungen für \"Nicht stören\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Nur wichtige Unterbrechungen zulassen"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Bitte nicht stören"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Verhalten"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Töne & Vibration zulassen von"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Kein Ton"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Kein Ton (Lautlos)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Kein Ton außer durch <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">"Automatische Regeln"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"\"Nicht stören\"-Regeln einrichten"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Töne & Vibrationen zu bestimmten Zeiten einschränken"</string>
@@ -2989,7 +2993,7 @@
<string name="zen_mode_configure_rule" msgid="8865785428056490305">"Regel konfigurieren"</string>
<string name="zen_schedule_rule_type_name" msgid="142936744435271449">"Zeitregel"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="3379499360390382259">"Automatische Regel zur Aktivierung des Status \"Nicht stören\" zu bestimmten Zeiten eingestellt"</string>
- <string name="zen_event_rule_type_name" msgid="2645981990973086797">"Ereignisregel"</string>
+ <string name="zen_event_rule_type_name" msgid="2645981990973086797">"Terminregel"</string>
<string name="zen_event_rule_enabled_toast" msgid="6910577623330811480">"Automatische Regel zur Aktivierung des Status \"Nicht stören\" während bestimmter Ereignisse eingestellt"</string>
<string name="zen_mode_event_rule_calendar" msgid="8787906563769067418">"Während Terminen für"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="5135844750232403975">"Während Terminen für <xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Nur von markierten Kontakten"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Keine"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Wecker"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarme haben Priorität und ein Ton wird ausgegeben"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Erinnerungen"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Termine"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Alle Anrufer"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ausgewählte Anrufer"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Wiederholte Anrufer"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Zulassen, falls dieselbe Person innerhalb von <xliff:g id="MINUTES">%d</xliff:g> Minuten erneut anruft"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Wenn dieselbe Person innerhalb von <xliff:g id="MINUTES">%d</xliff:g> Minuten noch einmal anruft"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Autom. aktivieren"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nie"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Jede Nacht"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Bei deaktiviertem Display"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Bei aktiviertem oder deaktiviertem Display"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Benachrichtigungseinstellungen"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Feedback zu diesem Gerät senden"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Administrator-PIN eingeben"</string>
<string name="switch_on_text" msgid="1124106706920572386">"An"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Kann Systemeinstellungen ändern"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Systemeinstellungen ändern"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Änderungsberechtigung für Systemeinstellungen"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Änderung von Systemeinstellungen zulassen"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Änderung von Systemeinstellungen zulassen"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Diese Berechtigung ermöglicht einer App das Ändern von Systemeinstellungen."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ja"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nein"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Lass dir zeigen, was dein neues Tablet alles kann"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Lass dir zeigen, was dein neues Gerät alles kann"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Diese Funktion ist auf diesem Gerät nicht verfügbar"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-Registrierungsstatus"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registriert"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nicht registriert"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index dcd7122..7603968 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Διεύθυνση MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Διεύθυνση Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Σειριακός αριθμός"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Μη διαθέσιμο"</string>
<string name="status_up_time" msgid="7294859476816760399">"Χρόνος από την τελευταία εκκίνηση"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Χρόνος αφύπνισης"</string>
<string name="internal_memory" msgid="9129595691484260784">"Εσωτερικός αποθηκευτικός χώρος"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Δεν είναι δυνατός ο μη αυτόματος συγχρονισμός"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Ο συγχρονισμός για αυτό το στοιχείο είναι προς το παρόν απενεργοποιημένος. Για να αλλάξετε τη ρύθμισή σας, ενεργοποιήστε προσωρινά τα δεδομένα παρασκηνίου και τον αυτόματο συγχρονισμό."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Διεύθυνση 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"Για να ξεκινήσετε το Android, εισαγάγετε τον κωδικό σας"</string>
<string name="enter_pin" msgid="5305333588093263790">"Για να ξεκινήσετε το Android, εισαγάγετε το PIN σας"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Για να ξεκινήσετε το Android, σχεδιάστε το μοτίβο σας"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"δίκτυο κινητής τηλεφωνίας"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"χρήση δεδομένων"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"Προτ/σεις \"Μην ενοχλείτε\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Μόνο προτεραιότητας"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Μην ενοχλείτε"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Συμπεριφορά"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Να επιτρέπονται ήχοι και δονήσεις από"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Ρύθμ. κανόνων \"Μην ενοχλείτε\""</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Περιορίστε τους ήχους και τις δονήσεις για συγκεκριμένες ώρες"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Τα ξυπνητήρια έχουν πάντα προτεραιότητα και ήχο"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Επιλεγμένοι καλούντες"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Καλούντες κατ\' επανάληψη"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Εάν το ίδιο άτομο καλέσει δεύτερη φορά εντός διαστήματος <xliff:g id="MINUTES">%d</xliff:g> λεπτών, να επιτρέπεται"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Εάν το ίδιο άτομο καλέσει δεύτερη φορά εντός διαστήματος <xliff:g id="MINUTES">%d</xliff:g> λεπτών"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Αυτόματη ενεργοπ."</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Ποτέ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Κάθε βράδυ"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Όταν η οθόνη είναι απενεργοποιημένη"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Όταν η οθόνη είναι ενεργοποιημένη ή απενεργοποιημένη"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Εισαγωγή PIN διαχειριστή"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Ενεργό"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Δυνατότητα τροποποίησης ρυθμίσεων συστήματος"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Τροποποίηση ρυθμ. συστήματος"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Άδεια εφαρμογής τροποποίησης ρυθμίσεων συστήματος"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Να επιτρέπεται η τροποποίηση ρυθμ. συστήματος"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Να επιτρέπεται η τροποπ. των ρυθμ. συστήματος"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Αυτή η άδεια επιτρέπει σε μια εφαρμογή την τροποποίηση των ρυθμίσεων συστήματος."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ναι"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Όχι"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Περιηγηθείτε στο νέο σας tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Περιηγηθείτε στη νέα συσκευή σας"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Αυτή η λειτουργία δεν είναι διαθέσιμη σε αυτήν τη συσκευή"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Κατάσταση εγγραφής υπηρεσίας IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Εγγεγραμμένη"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Μη εγγεγραμμένη"</string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index e0aba19..052d078 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC address"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth address"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serial number"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
<string name="status_up_time" msgid="7294859476816760399">"Uptime"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Awake time"</string>
<string name="internal_memory" msgid="9129595691484260784">"Internal storage"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Cannot sync manually"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sync for this item is currently disabled. To change your preference, temporarily turn on background data and automatic sync."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"To start Android, enter your password"</string>
<string name="enter_pin" msgid="5305333588093263790">"To start Android, enter your PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"To start Android, draw your pattern"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"When screen is off"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"When screen is on or off"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Notification settings"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send feedback about this device"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Enter admin PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"On"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Can modify system settings"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modify system settings"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"App modify system settings permission"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Allow modify system settings"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Allow modifying system settings"</string>
<string name="write_settings_description" msgid="6868293938839954623">"This permission allows an app to modify system settings."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yes"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Take a tour of your new tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Take a tour of your new device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"This feature is not available on this device"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index e00c748..c2b5fc3 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC address"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth address"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serial number"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
<string name="status_up_time" msgid="7294859476816760399">"Uptime"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Awake time"</string>
<string name="internal_memory" msgid="9129595691484260784">"Internal storage"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Cannot sync manually"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sync for this item is currently disabled. To change your preference, temporarily turn on background data and automatic sync."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"To start Android, enter your password"</string>
<string name="enter_pin" msgid="5305333588093263790">"To start Android, enter your PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"To start Android, draw your pattern"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"When screen is off"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"When screen is on or off"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Notification settings"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send feedback about this device"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Enter admin PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"On"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Can modify system settings"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modify system settings"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"App modify system settings permission"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Allow modify system settings"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Allow modifying system settings"</string>
<string name="write_settings_description" msgid="6868293938839954623">"This permission allows an app to modify system settings."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yes"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Take a tour of your new tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Take a tour of your new device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"This feature is not available on this device"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e0aba19..052d078 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC address"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth address"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serial number"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
<string name="status_up_time" msgid="7294859476816760399">"Uptime"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Awake time"</string>
<string name="internal_memory" msgid="9129595691484260784">"Internal storage"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Cannot sync manually"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sync for this item is currently disabled. To change your preference, temporarily turn on background data and automatic sync."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"To start Android, enter your password"</string>
<string name="enter_pin" msgid="5305333588093263790">"To start Android, enter your PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"To start Android, draw your pattern"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"When screen is off"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"When screen is on or off"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Notification settings"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send feedback about this device"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Enter admin PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"On"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Can modify system settings"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modify system settings"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"App modify system settings permission"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Allow modify system settings"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Allow modifying system settings"</string>
<string name="write_settings_description" msgid="6868293938839954623">"This permission allows an app to modify system settings."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yes"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Take a tour of your new tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Take a tour of your new device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"This feature is not available on this device"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index e0aba19..052d078 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC address"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth address"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serial number"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
<string name="status_up_time" msgid="7294859476816760399">"Uptime"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Awake time"</string>
<string name="internal_memory" msgid="9129595691484260784">"Internal storage"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Cannot sync manually"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sync for this item is currently disabled. To change your preference, temporarily turn on background data and automatic sync."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"To start Android, enter your password"</string>
<string name="enter_pin" msgid="5305333588093263790">"To start Android, enter your PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"To start Android, draw your pattern"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"When screen is off"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"When screen is on or off"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Notification settings"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send feedback about this device"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Enter admin PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"On"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Can modify system settings"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modify system settings"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"App modify system settings permission"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Allow modify system settings"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Allow modifying system settings"</string>
<string name="write_settings_description" msgid="6868293938839954623">"This permission allows an app to modify system settings."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yes"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Take a tour of your new tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Take a tour of your new device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"This feature is not available on this device"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index dc06c8b..0ce3e48 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -1158,7 +1158,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC address"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth address"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serial number"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string>
<string name="status_up_time" msgid="7294859476816760399">"Up time"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Awake time"</string>
<string name="internal_memory" msgid="9129595691484260784">"Internal storage"</string>
@@ -2348,8 +2347,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Can’t manually sync"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sync for this item is currently disabled. To change this setting, temporarily turn on background data and automatic sync."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"To start Android, enter your password"</string>
<string name="enter_pin" msgid="5305333588093263790">"To start Android, enter your PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"To start Android, draw your pattern"</string>
@@ -3054,6 +3051,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"When screen is off"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"When screen is on or off"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Notification settings"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send feedback about this device"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Enter admin PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"On"</string>
@@ -3305,7 +3303,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Can modify system settings"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modify system settings"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"App modify system settings permission"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Allow modify system settings"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Allow modifying system settings"</string>
<string name="write_settings_description" msgid="6868293938839954623">"This permission allows an app to modify system settings."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yes"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3726,7 +3724,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Take a tour of your new tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Take a tour of your new device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"This feature is not available on this device"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 1333285..58d5539 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -905,7 +905,7 @@
<string name="wifi_tether_stopping" msgid="4835852171686388107">"Desactivando zona…"</string>
<string name="wifi_tether_enabled_subtext" msgid="7842111748046063857">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> está activa"</string>
<string name="wifi_tether_failed_subtext" msgid="1484941858530919002">"Error en la zona Wi-Fi portátil"</string>
- <string name="wifi_tether_configure_ap_text" msgid="7974681394041609308">"Configurar la zona Wi-Fi"</string>
+ <string name="wifi_tether_configure_ap_text" msgid="7974681394041609308">"Configurar hotspot Wi-Fi"</string>
<string name="wifi_hotspot_configure_ap_text" msgid="5478614731464220432">"Configuración de zona Wi-Fi"</string>
<string name="wifi_hotspot_configure_ap_text_summary" msgid="5560680057727007011">"Hotspot WPA2 PSK de AndroidAP"</string>
<string name="wifi_tether_configure_ssid_default" msgid="8467525402622138547">"Android Hotspot"</string>
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Dirección MAC de Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Dirección de Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de serie"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"No disponible"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tiempo de actividad"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Hora de actividad"</string>
<string name="internal_memory" msgid="9129595691484260784">"Almacenamiento interno"</string>
@@ -1562,7 +1561,7 @@
<string name="screen_compatibility_label" msgid="663250687205465394">"Compatibilidad de la pantalla"</string>
<string name="permissions_label" msgid="2605296874922726203">"Permisos"</string>
<string name="cache_header_label" msgid="1877197634162461830">"Memoria caché"</string>
- <string name="clear_cache_btn_text" msgid="5756314834291116325">"Eliminar memoria caché"</string>
+ <string name="clear_cache_btn_text" msgid="5756314834291116325">"Borrar caché"</string>
<string name="cache_size_label" msgid="7505481393108282913">"Memoria caché"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="3983110543017963732">
<item quantity="other">%d elementos</item>
@@ -1587,7 +1586,7 @@
<string name="auto_launch_enable_text" msgid="4275746249511874845">"Has elegido lanzar esta aplicación de manera predeterminada para algunas acciones."</string>
<string name="always_allow_bind_appwidgets_text" msgid="566822577792032925">"Decidiste permitir que esta aplicación pueda crear widgets y acceder a sus datos."</string>
<string name="auto_launch_disable_text" msgid="7800385822185540166">"No hay configuraciones predeterminadas establecidas."</string>
- <string name="clear_activities" msgid="7408923511535174430">"Eliminar configuraciones predeterminadas"</string>
+ <string name="clear_activities" msgid="7408923511535174430">"Borrar valores predeterminados"</string>
<string name="screen_compatibility_text" msgid="1616155457673106022">"Es posible que esta aplicación no se haya diseñado para tu pantalla. Aquí puedes controlar cómo se ajusta a la pantalla."</string>
<string name="ask_compatibility" msgid="7225195569089607846">"Preguntar cuando se lanza"</string>
<string name="enable_compatibility" msgid="5806819252068617811">"Aplicación en escala"</string>
@@ -1691,9 +1690,9 @@
<skip />
<string name="running_process_item_user_label" msgid="3129887865552025943">"Usuario: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="running_process_item_removed_user_label" msgid="8250168004291472959">"Usuario eliminado"</string>
- <string name="running_processes_item_description_s_s" msgid="5790575965282023145">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> procesos y <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicios"</string>
- <string name="running_processes_item_description_s_p" msgid="8019860457123222953">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> procesos y <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicios"</string>
- <string name="running_processes_item_description_p_s" msgid="744424668287252915">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> procesos <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicio"</string>
+ <string name="running_processes_item_description_s_s" msgid="5790575965282023145">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> proceso y <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicio"</string>
+ <string name="running_processes_item_description_s_p" msgid="8019860457123222953">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> proceso y <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicios"</string>
+ <string name="running_processes_item_description_p_s" msgid="744424668287252915">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> procesos y <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicio"</string>
<string name="running_processes_item_description_p_p" msgid="1607384595790852782">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> procesos y <xliff:g id="NUMSERVICES">%2$d</xliff:g> servicios"</string>
<string name="running_processes_header_title" msgid="6588371727640789560">"Memoria del dispositivo"</string>
<string name="running_processes_header_footer" msgid="723908176275428442">"RAM usada por las aplicaciones"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"No se puede sincronizar manualmente"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"La sincronización de este elemento actualmente está desactivada. Para cambiar tu configuración, activa momentáneamente los datos en segundo plano y la sincronización automática."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Dirección MAC de 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Para iniciar el dispositivo Android, ingresa la contraseña."</string>
<string name="enter_pin" msgid="5305333588093263790">"Para iniciar el dispositivo Android, ingresa el PIN."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Para iniciar el dispositivo Android, dibuja el patrón."</string>
@@ -3053,6 +3050,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Cuando la pantalla está apagada"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Cuando la pantalla está encendida o apagada"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Configuración de notificaciones"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Aceptar"</string>
<string name="device_feedback" msgid="3238056036766293294">"Envía comentarios del dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Ingresa el PIN de administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activado"</string>
@@ -3304,7 +3302,8 @@
<string name="write_settings_title" msgid="4232152481902542284">"Puede modificar la configuración del sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modificar config. del sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permiso para modificar la configuración del sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permitir modificar configuración del sistema"</string>
+ <!-- no translation found for permit_write_settings (658555006453212691) -->
+ <skip />
<string name="write_settings_description" msgid="6868293938839954623">"Este permiso admite que una aplicación modifique la configuración del sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sí"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3725,7 +3724,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Descubre tu nueva tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Descubre tu nuevo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"La función no está disponible en este dispositivo"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estado de registro de IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Sin registrar"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 0c060e4..eecdcc1 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -920,7 +920,7 @@
<string name="wifi_calling_roaming_mode_dialog_title" msgid="7800926602662078576">"Preferencia de itinerancia"</string>
<string-array name="wifi_calling_mode_choices">
<item msgid="2124257075906188844">"Preferir Wi-Fi"</item>
- <item msgid="1335127656328817518">"Preferida para móviles"</item>
+ <item msgid="1335127656328817518">"Preferir datos móviles"</item>
<item msgid="3132912693346866895">"Solo conexión Wi-Fi"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_v2">
@@ -935,7 +935,7 @@
</string-array>
<string-array name="wifi_calling_mode_choices_without_wifi_only">
<item msgid="5782108782860004851">"Preferir Wi-Fi"</item>
- <item msgid="5074515506087318555">"Preferida para móviles"</item>
+ <item msgid="5074515506087318555">"Preferir datos móviles"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
<item msgid="6132150507201243768">"Wi-Fi"</item>
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Dirección MAC de la red Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Dirección de Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de serie"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"No disponible"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tiempo de actividad"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Tiempo de actividad"</string>
<string name="internal_memory" msgid="9129595691484260784">"Almacenamiento interno"</string>
@@ -1547,7 +1546,7 @@
<string name="applications_settings" msgid="5281808652705396152">"Información de las aplicaciones"</string>
<string name="applications_settings_summary" msgid="6683465446264515367">"Administrar aplicaciones y configurar accesos directos de inicio rápido"</string>
<string name="applications_settings_header" msgid="1014813055054356646">"Ajustes de aplicación"</string>
- <string name="install_applications" msgid="4872012136210802181">"Orígenes desconocidos"</string>
+ <string name="install_applications" msgid="4872012136210802181">"Fuentes desconocidas"</string>
<string name="install_applications_title" msgid="4987712352256508946">"Permitir todas las fuentes"</string>
<string name="recent_app_category_title" msgid="6673071268966003928">"Aplicaciones abiertas recientemente"</string>
<string name="see_all_apps_title" msgid="1317153498074308438">"Ver todas las aplicaciones (<xliff:g id="COUNT">%1$d</xliff:g>)"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"No se puede hacer la sincronización de forma manual."</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"La sincronización de este elemento no está disponible en este momento. Para modificar tu preferencia, activa temporalmente los datos en segundo plano y la sincronización automática."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Dirección MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Para iniciar tu dispositivo Android, introduce tu contraseña"</string>
<string name="enter_pin" msgid="5305333588093263790">"Para iniciar tu dispositivo Android, introduce el PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Para iniciar tu dispositivo Android, dibuja tu patrón"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Mostrar %d elementos ocultos</item>
<item quantity="one">Mostrar %d elemento oculto</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Ocultar"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Red e Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"móvil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"uso de datos"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> reglas automáticas activadas</item>
<item quantity="one">1 regla automática activada</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferencias de No molestar"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioridad solo permite"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"No molestar"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportamiento"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Permitir sonidos/vibraciones de"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Sin sonido"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Sin sonido (silencio total)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Sin sonido excepto <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">"Reglas automáticas"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Definir reglas de No molestar"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limitar sonido y vibración en algunos momentos"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Solo de contactos destacados"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ninguno"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmas"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Las alarmas son prioritarias y emiten sonido"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Recordatorios"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Eventos"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Todas las llamadas"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Contactos seleccionados"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Llamadas repetidas"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Permitir llamadas que procedan de la misma persona si no han pasado más de <xliff:g id="MINUTES">%d</xliff:g> minutos desde su primera llamada"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Permitir llamadas que procedan de la misma persona si no han pasado más de <xliff:g id="MINUTES">%d</xliff:g> minutos desde su primera llamada"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Activar automáticamente"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nunca"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Todas las noches"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Con la pantalla desactivada"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Con la pantalla activada o desactivada"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Ajustes de notificaciones"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Aceptar"</string>
<string name="device_feedback" msgid="3238056036766293294">"Enviar sugerencias sobre el dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Introducir el PIN del administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activado"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Puede modificar los ajustes del sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modificar ajustes del sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permiso de aplicación para modificar ajustes sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permitir que se modifiquen ajustes sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permitir que se modifiquen ajustes del sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Cuando se concede este permiso, la aplicación puede modificar los ajustes del sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sí"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Descubre tu nuevo tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Descubre tu nuevo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Esta función no está disponible en este dispositivo"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estado del registro de IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"No registrado"</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 59770c9..7a364c9 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"WiFi MAC-aadress"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetoothi aadress"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Seerianumber"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Pole saadaval"</string>
<string name="status_up_time" msgid="7294859476816760399">"Talitlusaeg"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Sisselülitusaeg"</string>
<string name="internal_memory" msgid="9129595691484260784">"Sisemälu"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ei saa käsitsi sünkroonida"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Selle üksuse sünkroonimine on praegu keelatud. Seade muutmiseks lülitage ajutiselt sisse taustaandmed ja automaatne sünkroonimine."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-aadress"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidi käivitamiseks sisestage parool"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidi käivitamiseks sisestage oma PIN-kood"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidi käivitamiseks joonistage muster"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Kuva %d peidetud üksust</item>
<item quantity="one">Kuva %d peidetud üksus</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Ahenda"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Võrk ja Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobiil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"andmekasutus"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automaatset reeglit on sisse lülitatud</item>
<item quantity="one">1 automaatne reegel on sisse lülitatud</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Režiimi Mitte segada eelistused"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioriteetne lubab ainult"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Mitte segada"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Käitumine"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Luba heli ja vibreerimine:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Heli puudub"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Heli puudub (täielik vaikus)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Heli puudub, v.a <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">"Automaatsed reeglid"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Režiimi Mitte segada reeglid"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Helid ja värinad on piiratud"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Ainult tärniga tähistatud kontaktidelt"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Mitte kelleltki"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Äratused"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Äratused on alati prioriteetsed ja esitavad heli"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Meeldetuletused"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Sündmused"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Kõik helistajad"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Valitud helistajad"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Korduvad helistajad"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Kui sama inimene helistab <xliff:g id="MINUTES">%d</xliff:g> minuti jooksul teist korda, siis see lubatakse"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Kui sama inimene helistab teile <xliff:g id="MINUTES">%d</xliff:g> minuti jooksul teist korda"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Autom. sisselülitus"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Mitte kunagi"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Igal õhtul"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kui ekraan on väljas"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kui ekraan on sees või väljas"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Märguandeseaded"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Seadme kohta tagasiside saatmine"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Sisestage administraatori PIN-kood"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Sees"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Saab muuta süsteemiseadeid"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Süsteemiseadete muutmine"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Rakendustel süsteemiseadete muutmise lubamine"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Luba muuta süsteemiseadeid"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Luba süsteemiseadete muutmine"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Luba võimaldab rakendusel muuta süsteemiseadeid."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Jah"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ei"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Tutvuge oma uue tahvelarvutiga"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Tutvuge oma uue seadmega"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Sellel seadmel pole see funktsioon saadaval"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-i registreerimise olek"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registreeritud"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ei ole registreeritud"</string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index aaf86a0..7dbba91 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC helbidea"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth helbidea"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serie-zenbakia"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Ez dago erabilgarri"</string>
<string name="status_up_time" msgid="7294859476816760399">"Berrabiarazi ondoren abian izandako denbora"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Aktibo egondako denbora"</string>
<string name="internal_memory" msgid="9129595691484260784">"Barneko memoria"</string>
@@ -2256,7 +2255,7 @@
<string name="select_device_admin_msg" msgid="7347389359013278077">"Gailua administratzeko aplikazioak"</string>
<string name="no_device_admins" msgid="4846602835339095768">"Ez dago gailua administratzeko aplikaziorik"</string>
<string name="personal_device_admin_title" msgid="2849617316347669861">"Pertsonala"</string>
- <string name="managed_device_admin_title" msgid="7853955652864478435">"Lantokia"</string>
+ <string name="managed_device_admin_title" msgid="7853955652864478435">"Lanekoak"</string>
<string name="no_trust_agents" msgid="7450273545568977523">"Ez dago agente fidagarririk erabilgarri"</string>
<string name="add_device_admin_msg" msgid="1501847129819382149">"Gailua administratzeko aplikazioa aktibatu?"</string>
<string name="add_device_admin" msgid="4192055385312215731">"Aktibatu gailua administratzeko aplikazioa"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ezin da eskuz sinkronizatu"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Elementua ezin da unean desgaitu. Ezarpena aldatzeko, aktibatu atzeko planoko datuak eta sinkronizazio automatikoa aldi baterako."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC helbidea"</string>
<string name="enter_password" msgid="8035706727471334122">"Android gailua abiarazteko, idatzi pasahitza"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android gailua abiarazteko, idatzi PIN kodea"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android gailua abiarazteko, marraztu eredua"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Erakutsi %d elementu ezkutu</item>
<item quantity="one">Erakutsi %d elementu ezkutu</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Tolestu"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Sareak eta Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mugikorra"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"datuen erabilera"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> arau automatiko aktibatuta</item>
<item quantity="one">1 arau automatiko aktibatuta</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"\"Ez molestatu\" moduaren hobespenak"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Lehentasunezkoak soilik"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ez molestatu"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Jokabidea"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Baimendu soinu eta dardara hauek:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ez egin soinurik"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ez egin soinurik (isiltasun osoa)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ez egin soinurik. Salbuespena: <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">"Arau automatikoak"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Ezarri \"Ez molestatu\" arauak"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Mugatu soinuak eta dardarak ordu jakinetara"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Kontaktu izardunenak soilik"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Bat ere ez"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmak"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmek soinua egiten dute lehentasuna dutelako"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Abisuak"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Gertaerak"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Deitzaile guztiak"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Hautatutako deitzaileak"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Berriro deitu dutenak"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Pertsona berak berriro deitzen badu <xliff:g id="MINUTES">%d</xliff:g> minutuko epean, onartu deia"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"<xliff:g id="MINUTES">%d</xliff:g> minutuko epean pertsona berak berriz deitzen badu"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Aktibatu automatikoki"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Inoiz ez"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Gauero"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Pantaila itzalita dagoenean"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Pantaila piztuta nahiz itzalita dagoenean"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Jakinarazpen-ezarpenak"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ados"</string>
<string name="device_feedback" msgid="3238056036766293294">"Bidali gailu honi buruzko iritzia"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Idatzi administratzailearen PIN kodea"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Aktibatuta"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Sistemaren ezarpenak alda ditzaketenak"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Aldatu sistemaren ezarpenak"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Aplikazioek sistemaren ezarpenak aldatzeko baimena"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Baimendu sistemaren ezarpenak aldatzea"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Baimendu sistemaren ezarpenak aldatzea"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Baimen honekin, sistemaren ezarpenak alda ditzakete aplikazioek."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Bai"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ez"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Eman txango bat tableta berrian barrena"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Eman txango bat gailu berrian barrena"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Eginbidea ez dago erabilgarri gailu honetan"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS erregistratzearen egoera"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Erregistratuta"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Erregistratu gabe"</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 8eeee5a..0ec20ad 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"آدرس Wi-Fi MAC"</string>
<string name="status_bt_address" msgid="4195174192087439720">"آدرس بلوتوث"</string>
<string name="status_serial_number" msgid="2257111183374628137">"شمارهٔ سریال"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"در دسترس نیست"</string>
<string name="status_up_time" msgid="7294859476816760399">"زمان فعالیت"</string>
<string name="status_awake_time" msgid="2393949909051183652">"زمان بیداری"</string>
<string name="internal_memory" msgid="9129595691484260784">"حافظهٔ داخلی"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"نمیتوان بهصورت دستی همگامسازی کرد"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"همگامسازی برای این مورد در حال حاضر غیرفعال است. برای تغییر این تنظیم، دادههای پسزمینه و همگامسازی خودکار را موقتاً روشن کنید."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"آدرس 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"برای شروع Android، گذرواژهتان را وارد کنید"</string>
<string name="enter_pin" msgid="5305333588093263790">"برای شروع Android، پینتان را وارد کنید"</string>
<string name="enter_pattern" msgid="4187435713036808566">"برای شروع Android، الگویتان را رسم"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"وقتی صفحهنمایش روشن است"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"وقتی صفحهنمایش روشن یا خاموش است"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"پین سرپرست را وارد کنید"</string>
<string name="switch_on_text" msgid="1124106706920572386">"روشن"</string>
@@ -3306,7 +3304,8 @@
<string name="write_settings_title" msgid="4232152481902542284">"میتوانند تنظیمات سیستم را تغییر دهند"</string>
<string name="write_system_settings" msgid="3482913590601096763">"تغییر تنظیمات سیستم"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"مجوز تغییر تنظیمات سیستم توسط برنامه"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"اجازه دادن به برنامه برای تغییر تنظیمات سیستم"</string>
+ <!-- no translation found for permit_write_settings (658555006453212691) -->
+ <skip />
<string name="write_settings_description" msgid="6868293938839954623">"این مجوز به برنامه امکان میدهد تنظیمات سیستم را تغییر دهد."</string>
<string name="write_settings_on" msgid="8230580416068832239">"بله"</string>
<string name="write_settings_off" msgid="5156104383386336233">"نه"</string>
@@ -3727,7 +3726,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"در رایانه لوحی جدیدتان گشتی بزنید"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"در دستگاه جدیدتان گشتی بزنید"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"این ویدیو در این دستگاه دردسترس نیست."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"وضعیت ثبت IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"ثبتشده"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ثبت نشده است"</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 2b104c5..9497ec6 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi-yhteyden MAC-osoite"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-osoite"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Sarjanumero"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Ei käytettävissä"</string>
<string name="status_up_time" msgid="7294859476816760399">"Käynnissäoloaika"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Käytössäoloaika"</string>
<string name="internal_memory" msgid="9129595691484260784">"Sisäinen tallennustila"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Manuaalinen synkronointi epäonnistui"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Tämän kohteen synkronointi on tällä hetkellä pois käytöstä. Voit muuttaa asetuksia ottamalla taustatiedonsiirron ja automaattisen synkronoinnin väliaikaisesti käyttöön."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC -osoite"</string>
<string name="enter_password" msgid="8035706727471334122">"Käynnistä Android kirjoittamalla salasana"</string>
<string name="enter_pin" msgid="5305333588093263790">"Käynnistä Android kirjoittamalla PIN-koodi"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Käynnistä Android piirtämällä kuvio"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Näytä %d piilotettua kohdetta</item>
<item quantity="one">Näytä %d piilotettu kohde</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Tiivistä"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Verkko ja internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobiili"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"datan käyttö"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automaattista sääntöä käytössä</item>
<item quantity="one">1 automaattinen sääntö käytössä</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Älä häiritse ‑tilan asetukset"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Sallittavat tärkeät ilmoitukset"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Älä häiritse"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Käyttäytyminen"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Salli äänet & värinä kohteesta"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ei ääntä"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ei ääntä (Täysi hiljaisuus)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ei ääntä, paitsi <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">"Automaattiset säännöt"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Määritä Älä häiritse ‑säännöt"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Rajoita ääniä ja värinää tiettyinä aikoina."</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Vain tähdellä merkityiltä kontakteilta"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ei keneltäkään"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Herätykset"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Herätykset ovat aina tärkeitä ja toistavat äänimerkin."</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Muistutukset"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Tapahtumat"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Kaikki soittajat"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Valitut soittajat"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Toistuvat soitot"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Salli, jos sama henkilö soittaa uudelleen <xliff:g id="MINUTES">%d</xliff:g> minuutin kuluessa."</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Jos sama henkilö soittaa uudelleen <xliff:g id="MINUTES">%d</xliff:g> minuutin kuluessa"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Ota autom. käyttöön"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Ei koskaan"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Joka yö"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kun näyttö on pois päältä"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kun näyttö on päällä tai pois päältä"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Ilmoitusasetukset"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Lähetä palautetta tästä laitteesta"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Anna järjestelmänvalvojan PIN-koodi"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Käytössä"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Voi muokata järjestelmäasetuksia"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Muokkaa järjestelmäasetuksia"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Sovelluksen järjestelmäasetusten muokkausoikeus"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Salli järjestelmäasetusten muokkaaminen"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Salli järjestelmäasetusten muokkaaminen"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Tämä käyttöoikeus sallii sovelluksen muokata järjestelmäasetuksia."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Kyllä"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ei"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Tutustu uuteen tablettiisi"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Tutustu uuteen laitteeseesi"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ominaisuus ei ole käytettävissä tällä laitteella."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-rekisteröinnin tila"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Rekisteröity"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ei rekisteröity"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index c731c4f..ab0c4ff 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adresse MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adresse Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Numéro de série"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Non accessible"</string>
<string name="status_up_time" msgid="7294859476816760399">"Durée d\'activité"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Temps en activité"</string>
<string name="internal_memory" msgid="9129595691484260784">"Mémoire de stockage interne"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Impossible de procéder à la synchronisation manuelle."</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"La synchronisation de cet élément est actuellement désactivée. Pour modifier ce paramètre, activez temporairement les données en arrière-plan et la synchronisation automatique."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adresse MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Pour lancer Android, entrez votre mot de passe"</string>
<string name="enter_pin" msgid="5305333588093263790">"Pour lancer Android, entrez votre NIP"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Pour lancer Android, dessinez votre schéma."</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"cellulaire"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"utilisation de données"</string>
@@ -2843,8 +2841,14 @@
<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>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Préférences Ne pas déranger"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioritaires seulement"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne pas déranger"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportement"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Autoriser sons et vibrations de"</string>
+ <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_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>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Les alarmes sont toujours une priorité et émettent un son"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Appelants sélectionnés"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Appelants fréquents"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Si la même personne appelle deux fois en <xliff:g id="MINUTES">%d</xliff:g> minute(s), autoriser le deuxième appel"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Si la même personne appelle deux fois en <xliff:g id="MINUTES">%d</xliff:g> minute(s), autoriser le deuxième appel"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Activation auto"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Jamais"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Tous les soirs"</string>
@@ -3055,6 +3060,7 @@
<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="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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Entrez le NIP d\'administrateur"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activé"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Peut modifier les paramètres du système"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modifier paramètres système"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Autorisation de modifier les paramètres système"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Autoriser la modif. des paramètres du système"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Autoriser la modification des paramètres du système"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Cette autorisation permet à une application de modifier les paramètres du système."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Oui"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Non"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Découvrez votre nouvelle tablette"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Découvrez votre nouvel appareil"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Cette fonctionnalité n\'est pas accessible sur cet appareil."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"État d\'enregistrement IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Enregistré"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non enregistré"</string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c164a62..1bbcb65 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adresse MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adresse Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Numéro de série"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Non disponible"</string>
<string name="status_up_time" msgid="7294859476816760399">"Durée d\'activité"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Temps en activité"</string>
<string name="internal_memory" msgid="9129595691484260784">"Mémoire de stockage interne"</string>
@@ -1470,10 +1469,8 @@
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Chargement…"</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 des raisons de sécurité, définissez un mot de passe"</string>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Pour utiliser empreinte, définissez mot de passe"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Pour utiliser empreinte, définissez schéma"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Pour des raisons de sécurité, définissez un code"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Pour utiliser empreinte, définissez code"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Pour des raisons de sécurité, définissez un schéma"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Impossible de procéder à la synchronisation manuelle."</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"La synchronisation de cet élément est actuellement désactivée. Pour modifier ce paramètre, activez temporairement les données en arrière-plan et la synchronisation automatique."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adresse MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Pour lancer Android, saisissez votre mot de passe."</string>
<string name="enter_pin" msgid="5305333588093263790">"Pour lancer Android, saisissez votre code PIN."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Pour lancer Android, dessinez votre schéma."</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"mobile"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"consommation des données"</string>
@@ -2845,8 +2841,14 @@
<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>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Préférences \"Ne pas déranger\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioritaires uniquement"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne pas déranger"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportement"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Autoriser sons et vibrations de"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Définir règles Ne pas déranger"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limiter les sons et le vibreur"</string>
@@ -3022,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Des contacts favoris uniquement"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Aucun"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmes"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmes toujours prioritaires et sonores"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Appelants sélectionnés"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Appels répétés"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Autoriser le second appel si la même personne appelle deux fois en <xliff:g id="MINUTES">%d</xliff:g> minute(s)"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Si la même personne appelle deux fois en <xliff:g id="MINUTES">%d</xliff:g> minute(s)"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Activation auto"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Jamais"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Tous les soirs"</string>
@@ -3057,6 +3060,7 @@
<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">"Lorsque l\'écran est allumé ou éteint"</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">"Envoyer commentaires sur appareil"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Saisir le code d\'accès administrateur"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activé"</string>
@@ -3226,8 +3230,8 @@
<string name="decline_remote_bugreport_action" msgid="518720235407565134">"Refuser"</string>
<string name="usb_use_charging_only" msgid="2180443097365214467">"Recharger cet appareil"</string>
<string name="usb_use_charging_only_desc" msgid="3066256793008540627">"Uniquement pour charger cet appareil"</string>
- <string name="usb_use_power_only" msgid="6426550616883919530">"Alimenter cet appareil en énergie"</string>
- <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Cette méthode ne fonctionne qu\'avec les appareils compatibles avec le rechargement USB."</string>
+ <string name="usb_use_power_only" msgid="6426550616883919530">"Fournir du courant"</string>
+ <string name="usb_use_power_only_desc" msgid="3461232831015575152">"Permet de recharger les appareils connectés compatibles avec le rechargement USB."</string>
<string name="usb_use_file_transfers" msgid="7409600791007250137">"Transférer des fichiers"</string>
<string name="usb_use_file_transfers_desc" msgid="4235764784331804488">"Transférer des fichiers vers un autre appareil"</string>
<string name="usb_use_photo_transfers" msgid="7794775645350330454">"Transférer des photos (PTP)"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Peut modifier les paramètres système"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modifier paramètres système"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Autorisation modifier paramètres système par applis"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Autoriser modification des paramètres système"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Autoriser modification des paramètres système"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Cette autorisation permet à une application de modifier les paramètres système."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Oui"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Non"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Découvrez votre nouvelle tablette"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Découvrez votre nouvel appareil"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Cette fonctionnalité n\'est pas disponible sur cet appareil"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"État de l\'enregistrement IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Enregistré"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non enregistré"</string>
</resources>
diff --git a/res/values-gl/arrays.xml b/res/values-gl/arrays.xml
index 9ccfa7f..b619da0 100644
--- a/res/values-gl/arrays.xml
+++ b/res/values-gl/arrays.xml
@@ -252,7 +252,7 @@
<item msgid="8181415497109310680">"ler SMS"</item>
<item msgid="6816551144382117307">"escribir SMS"</item>
<item msgid="4600463921908905030">"recibir SMS"</item>
- <item msgid="5958926493289432745">"recibir SMS de emerxencia"</item>
+ <item msgid="5958926493289432745">"recibir SMS de urxencia"</item>
<item msgid="4945269495221089540">"recibir MMS"</item>
<item msgid="5570472453573929087">"recibir WAP push"</item>
<item msgid="7125408150230860501">"enviar SMS"</item>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 0f7156f..a1cfc48 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -56,7 +56,7 @@
<string name="radio_info_ims_reg_status" msgid="7534612158445529715">"Rexistro de IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nVoz por LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nVoz por wifi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideochamada: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nInterface de UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1697703164394784618">"En servizo"</string>
<string name="radioInfo_service_out" msgid="7999094221728929681">"Fóra de servizo"</string>
- <string name="radioInfo_service_emergency" msgid="6274434235469661525">"Só chamadas de emerxencia"</string>
+ <string name="radioInfo_service_emergency" msgid="6274434235469661525">"Só chamadas de urxencia"</string>
<string name="radioInfo_service_off" msgid="7536423790014501173">"Radio desactivada"</string>
<string name="radioInfo_roaming_in" msgid="9045363884600341051">"Itinerancia"</string>
<string name="radioInfo_roaming_not" msgid="4849214885629672819">"Non está en itinerancia"</string>
@@ -947,8 +947,8 @@
</string-array>
<string name="wifi_calling_off_explanation" msgid="2597566001655908391">"Cando están activadas as chamadas wifi, o teu teléfono pode enviar as túas chamadas a través de redes wifi ou da rede do teu operador, dependendo das túas preferencias e de cal teña o sinal máis forte. Antes de activar esta función, consulta co teu operador as tarifas e outra información."</string>
<string name="wifi_calling_off_explanation_2" msgid="2329334487851497223"></string>
- <string name="emergency_address_title" msgid="3571902448699714454">"Actualizar enderezo de emerxencia"</string>
- <string name="emergency_address_summary" msgid="3266760199681945746">"Enderezo que utilizan os servizos de emerxencia como a túa localización se fas unha chamada de emerxencia a través da wifi"</string>
+ <string name="emergency_address_title" msgid="3571902448699714454">"Actualizar enderezo de urxencia"</string>
+ <string name="emergency_address_summary" msgid="3266760199681945746">"Enderezo que utilizan os servizos de urxencia como a túa localización se fas unha chamada de urxencia a través da wifi"</string>
<string name="display_settings_title" msgid="1708697328627382561">"Pantalla"</string>
<string name="sound_settings" msgid="5534671337768745343">"Son"</string>
<string name="all_volume_title" msgid="4296957391257836961">"Volumes"</string>
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Enderezo MAC da wifi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Enderezo Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de serie"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Non dispoñible"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tempo activo"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Tempo de actividade"</string>
<string name="internal_memory" msgid="9129595691484260784">"Almacenamento interno"</string>
@@ -1596,7 +1595,7 @@
<string name="sort_order_size" msgid="7024513286636502362">"Ordenar por tamaño"</string>
<string name="show_running_services" msgid="5736278767975544570">"Mostrar servizos en curso"</string>
<string name="show_background_processes" msgid="2009840211972293429">"Mostrar procesos na caché"</string>
- <string name="default_emergency_app" msgid="1951760659640369980">"Aplicación de emerxencia"</string>
+ <string name="default_emergency_app" msgid="1951760659640369980">"Aplicación de urxencia"</string>
<string name="reset_app_preferences" msgid="1321050641018356925">"Restablecer preferencias das aplicacións"</string>
<string name="reset_app_preferences_title" msgid="6093179367325336662">"Restablecer as preferencias das aplicacións?"</string>
<string name="reset_app_preferences_desc" msgid="4822447731869201512">"Con esta acción, restableceranse todas as preferencias de:\n\n "<li>"aplicacións desactivadas"</li>\n" "<li>"notificacións de aplicacións desactivadas"</li>\n" "<li>"aplicacións predeterminadas para accións"</li>\n" "<li>"restricións de datos en segundo plano para aplicacións"</li>\n" "<li>"calquera restrición de permisos"</li>\n\n" Non perderás datos de ningunha aplicación."</string>
@@ -2231,8 +2230,8 @@
<string name="credentials_configure_lock_screen_hint" msgid="8058230497337529036">"Para poder usar as credenciais de almacenamento, o dispositivo debe ter unha pantalla de bloqueo segura"</string>
<string name="credentials_configure_lock_screen_button" msgid="253239765216055321">"ESTABLECER BLOQUEO"</string>
<string name="usage_access_title" msgid="332333405495457839">"Apps con acceso de uso"</string>
- <string name="emergency_tone_title" msgid="1055954530111587114">"Ton de emerxencia"</string>
- <string name="emergency_tone_summary" msgid="722259232924572153">"Define o comportamento cando se realiza unha chamada de emerxencia"</string>
+ <string name="emergency_tone_title" msgid="1055954530111587114">"Ton de urxencia"</string>
+ <string name="emergency_tone_summary" msgid="722259232924572153">"Define o comportamento cando se realiza unha chamada de urxencia"</string>
<string name="privacy_settings_title" msgid="2978878794187459190">"Copia de seguranza"</string>
<string name="backup_section_title" msgid="7952232291452882740">"Copia de seguranza e restauración"</string>
<string name="personal_data_section_title" msgid="7815209034443782061">"Datos persoais"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Non se pode sincronizar manualmente"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"A sincronización deste elemento está desactivada actualmente. Para cambiar esta configuración, activa temporalmente os datos en segundo plano e a sincronización automática."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Enderezo MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Para iniciar o dispositivo Android, introduce o teu contrasinal"</string>
<string name="enter_pin" msgid="5305333588093263790">"Para iniciar o dispositivo Android, introduce o teu PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Para iniciar o dispositivo Android, debuxa o teu padrón"</string>
@@ -2454,7 +2451,7 @@
<string name="data_usage_metered_yes" msgid="9217539611385225894">"De pago por consumo"</string>
<string name="data_usage_metered_no" msgid="4025232961929071789">"Con tarifa plana"</string>
<string name="data_usage_disclaimer" msgid="6887858149980673444">"A contabilidade dos datos do operador pode ser diferente á do teu dispositivo."</string>
- <string name="cryptkeeper_emergency_call" msgid="198578731586097145">"Chamada de emerxencia"</string>
+ <string name="cryptkeeper_emergency_call" msgid="198578731586097145">"Chamada de urxencia"</string>
<string name="cryptkeeper_return_to_call" msgid="5613717339452772491">"Volver á chamada"</string>
<string name="vpn_name" msgid="4689699885361002297">"Nome"</string>
<string name="vpn_type" msgid="5435733139514388070">"Tipo"</string>
@@ -2622,7 +2619,7 @@
<string name="user_enable_calling_confirm_message" msgid="8061594235219352787">"O historial de chamadas compartirase con este usuario."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="7243308401401932681">"Activar chamadas telefónicas e SMS?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="4025082715546544967">"O historial de chamadas e SMS compartirase con este usuario."</string>
- <string name="emergency_info_title" msgid="208607506217060337">"Información de emerxencia"</string>
+ <string name="emergency_info_title" msgid="208607506217060337">"Información de urxencia"</string>
<string name="emergency_info_summary" msgid="5062945162967838521">"Información e contactos para <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="application_restrictions" msgid="8207332020898004394">"Permitir aplicacións e contido"</string>
<string name="apps_with_restrictions_header" msgid="3660449891478534440">"Aplicacións con restricións"</string>
@@ -2667,7 +2664,7 @@
<string name="call_manager_title" msgid="4479949569744516457">"Xestor de chamadas"</string>
<!-- no translation found for call_manager_summary (5918261959486952674) -->
<skip />
- <string name="cell_broadcast_settings" msgid="4124461751977706019">"Alertas de emerxencia"</string>
+ <string name="cell_broadcast_settings" msgid="4124461751977706019">"Alertas de urxencia"</string>
<string name="network_operators_settings" msgid="2583178259504630435">"Operadores de rede"</string>
<string name="access_point_names" msgid="1381602020438634481">"Nomes dos puntos de acceso"</string>
<string name="enhanced_4g_lte_mode_title" msgid="5808043757309522392">"Modo mellorado de LTE 4G"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Mostrar %d elementos ocultos</item>
<item quantity="one">Mostrar %d elemento oculto</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Contraer"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Rede e Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"rede de telefonía móbil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"uso de datos"</string>
@@ -2786,7 +2784,7 @@
<string name="keywords_users" msgid="3434190133131387942">"restrición, restrinxir, restrinxido"</string>
<string name="keywords_keyboard_and_ime" msgid="9143339015329957107">"corrección de texto, correcto, son, vibrar, automático, idioma, xesto, suxerir, suxestión, tema, ofensivo, palabra, escribir, emoji, internacional"</string>
<string name="keywords_reset_apps" msgid="5293291209613191845">"restablecer, preferencias, predeterminadas"</string>
- <string name="keywords_emergency_app" msgid="3143078441279044780">"emerxencia, en caso de emerxencia, aplicación, predeterminada"</string>
+ <string name="keywords_emergency_app" msgid="3143078441279044780">"urxencia, en caso de urxencia, aplicación, predeterminada"</string>
<string name="keywords_default_phone_app" msgid="4213090563141778486">"teléfono, marcador, predeterminado"</string>
<string name="keywords_all_apps" msgid="7814015440655563156">"aplicacións, descarga, aplicacións, sistema"</string>
<string name="keywords_app_permissions" msgid="4229936435938011023">"aplicacións, permisos, seguranza"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> normas automáticas activadas</item>
<item quantity="one">1 norma automática activada</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferencias de Non molestar"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioridade: só se permite"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Non molestar"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportamento"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Permitir sons e vibracións de"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ningún son"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ningún son (silencio total)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ningún son agás <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">"Normas automáticas"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Definir normas de Non molestar"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limita sons e vibracións en certos momentos"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Só dos contactos marcados con estrela"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ningunha"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmas"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"As alarmas sempre son prioritarias e emiten son"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Recordatorios"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Eventos"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Todos os emisores de chamadas"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Emisores da chamada seleccionados"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Repetir emisores da chamada"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Se a mesma persoa chama por segunda vez nun período de <xliff:g id="MINUTES">%d</xliff:g> minutos, permitir"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Se a mesma persoa chama por segunda vez nun período de <xliff:g id="MINUTES">%d</xliff:g> minutos"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Activar automaticam."</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nunca"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Todas as noites"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Coa pantalla desactivada"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Coa pantalla activada ou desactivada"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Configuración das notificacións"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Aceptar"</string>
<string name="device_feedback" msgid="3238056036766293294">"Enviar comentarios do dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Introduce o PIN do administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activado"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Poden modificar a configuración do sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modificar configuración"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permiso para modificar a configuración do sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permitir modificar a configuración do sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permitir modificar a configuración do sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Con este permiso unha aplicación pode modificar a configuración do sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Si"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Non"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Realiza unha visita guiada pola túa nova tableta"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Realiza unha visita guiada polo teu novo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Esta función non está dispoñible neste dispositivo"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estado de rexistro de IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Rexistrado"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non rexistrado"</string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 6919115..55df6fa 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"વાઇ-ફાઇ MAC સરનામું"</string>
<string name="status_bt_address" msgid="4195174192087439720">"બ્લૂટૂથ સરનામું"</string>
<string name="status_serial_number" msgid="2257111183374628137">"શૃંખલા ક્રમાંક"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"અનુપલબ્ધ"</string>
<string name="status_up_time" msgid="7294859476816760399">"ચાલુ થયાનો સમય"</string>
<string name="status_awake_time" msgid="2393949909051183652">"જાગૃત સમય"</string>
<string name="internal_memory" msgid="9129595691484260784">"આંતરિક સ્ટોરેજ"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"ફિંગરપ્રિન્ટ વાપરવા, પાસવર્ડ સેટ કરો"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"ફિંગરપ્રિન્ટ વાપરવા, પૅટર્ન સેટ કરો"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"સુરક્ષા માટે, પિન સેટ કરો"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"ફિંગરપ્રિન્ટનો ઉપયોગ કરવા, પિન સેટ કરો"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"સુરક્ષાના કારણસર, એક પૅટર્ન સેટ કરો"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"મેન્યુઅલી સમન્વયિત કરી શકાતું નથી"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"આ આઇટમ માટે સિંક હાલમાં અક્ષમ કરેલું છે. આ સેટિંગ બદલવા માટે, બૅકગ્રાઉન્ડ ડેટા અને આપમેળે સિંકને અસ્થાયી ધોરણે ચાલુ કરો."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC સરનામું"</string>
<string name="enter_password" msgid="8035706727471334122">"Android પ્રારંભ કરવા માટે, તમારો પાસવર્ડ દાખલ કરો"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android પ્રારંભ કરવા માટે, તમારો પિન દાખલ કરો"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android પ્રારંભ કરવા માટે, તમારી પૅટર્ન દોરો"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"મોબાઇલ"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ડેટા વપરાશ"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"ખલેલ પાડશો નહીં પસંદગીઓ"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ફક્ત પ્રાધાન્યતાને મંજૂરી"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ખલેલ પાડશો નહીં"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"વર્તણૂક"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"આના ધ્વનિ અને વાઇબ્રેશનની મંજૂરી આપો"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"ખલેલ પાડશો નહીં નિયમો સેટ કરો"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"અમુક સમયે ધ્વનિ અને વાઇબ્રેશન મર્યાદિત કરો"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"અલાર્મ હંમેશા પ્રાધાન્યતા હોય છે અને અવાજ કરે છે"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"પસંદ કરેલ કૉલર્સ"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"પુનરાવર્તિત કૉલર્સ"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"જો એ જ વ્યક્તિ <xliff:g id="MINUTES">%d</xliff:g> મિનિટના સમયગાળામાં બીજી વખત કૉલ કરે, તો તેને મંજૂરી આપો"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"જો <xliff:g id="MINUTES">%d</xliff:g> મીનિટના સમયગાળા દરમ્યાન તે જ વ્યક્તિ પાછી કૉલ કરે તો"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"આપમેળે ચાલુ"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ક્યારેય નહીં"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"દર રાત્રે"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"જ્યારે સ્ક્રીન બંધ હોય"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"જ્યારે સ્ક્રીન ચાલુ કે બંધ હોય"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"વ્યવસ્થાપક પિન દાખલ કરો"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ચાલુ"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરી શકે છે"</string>
<string name="write_system_settings" msgid="3482913590601096763">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરો"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"ઍપ્લિકેશન સિસ્ટમ સેટિંગ્સ સંશોધિત કરવાની પરવાનગી"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરવાને મંજૂરી આપો"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"સિસ્ટમ સેટિંગને સંશોધિત કરવાની મંજૂરી આપો"</string>
<string name="write_settings_description" msgid="6868293938839954623">"આ પરવાનગી એપ્લિકેશનને સિસ્ટમ સેટિંગ્સ સંશોધિત કરવાની મંજૂરી આપે છે."</string>
<string name="write_settings_on" msgid="8230580416068832239">"હા"</string>
<string name="write_settings_off" msgid="5156104383386336233">"નહીં"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"તમારા નવા ટેબ્લેટની ઓળખ મેળવો"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"તમારા નવા ઉપકરણની ઓળખ મેળવો"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"આ ઉપકરણ પર આ સુવિધા ઉપલબ્ધ નથી"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS રજિસ્ટ્રેશનની સ્થિતિ"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"રજિસ્ટર કરેલ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"રજિસ્ટર કરેલ નથી"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index e82a014..6914357 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"वाई-फ़ाई MAC पता"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ब्लूटूथ पता"</string>
<string name="status_serial_number" msgid="2257111183374628137">"सीरियल नंबर"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"अनुपलब्ध"</string>
<string name="status_up_time" msgid="7294859476816760399">"चालू रहने का समय"</string>
<string name="status_awake_time" msgid="2393949909051183652">"सचेत समय"</string>
<string name="internal_memory" msgid="9129595691484260784">"मोबाइल मेमोरी"</string>
@@ -1470,12 +1469,10 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"फ़िंगरप्रिंट इस्तेमाल के लिए पासवर्ड डालें"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"फ़िंगरप्रिंट इस्तेमाल के लिए पैटर्न डालें"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"सुरक्षा के लिए, पिन सेट करें"</string>
- <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"फ़िंगरप्रिंट के लिए पिन सेट करें"</string>
+ <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"फ़िंगरप्रिंट के बैकअप के लिए पिन सेट करें"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"सुरक्षा के लिए कोई पैटर्न सेट करें"</string>
<string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"पासवर्ड फिर से दर्ज करें"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"अपने पैटर्न की पुष्टि करें"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"मैन्युअल रूप से समन्वयित नहीं कर सकता"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"इस आइटम के लिए समन्वयन वर्तमान में अक्षम है. यह सेटिंग बदलने के लिए, पृष्ठभूमि डेटा और स्वचालित समन्वयन को अस्थायी रूप से चालू करें."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC पता"</string>
<string name="enter_password" msgid="8035706727471334122">"Android प्रारंभ करने के लिए, अपना पासवर्ड डालें"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android प्रारंभ करने के लिए, अपना पिन डालें"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android प्रारंभ करने के लिए, अपना प्रतिमान लिखें"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"मोबाइल"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"डेटा खर्च"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"परेशान न करें की प्राथमिकताएं"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"प्राथमिकता इनकी अनुमति देती है"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"परेशान न करें"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"व्यवहार"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"आवाज़ और वाइब्रेशन की अनुमति दें"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"परेशान न करें के नियम सेट करें"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"निश्चित समय पर ध्वनियों और कंपनों को सीमित करें"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"अलार्म हमेशा प्राथमिकता वाले होते हैं और आवाज़ करते हैं"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"चुनिंदा कॉल करने वाले (कॉलर)"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"बार-बार कॉल करने वाले (कॉलर)"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"अगर वही व्यक्ति <xliff:g id="MINUTES">%d</xliff:g> मिनट के अंदर दूसरी बार कॉल करता है, तो उसे अनुमति दें"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"अगर कोई व्यक्ति <xliff:g id="MINUTES">%d</xliff:g> मिनट के अंदर दोबारा कॉल करे"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"स्वचालित रूप से चालू"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"कभी नहीं"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"हर रात"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"स्क्रीन के बंद होने पर"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"स्क्रीन के चालू या बंद होने पर"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"व्यवस्थापक पिन डालें"</string>
<string name="switch_on_text" msgid="1124106706920572386">"चालू"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"सिस्टम सेटिंग को बदल सकते हैं"</string>
<string name="write_system_settings" msgid="3482913590601096763">"सिस्टम सेटिंग बदलें"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"ऐप को सिस्टम सेटिंग बदलने की अनुमति"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"सिस्टम सेटिंग को बदलने की अनुमति दें"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"सेटिंग में बदलाव करने की अनुमति दें"</string>
<string name="write_settings_description" msgid="6868293938839954623">"यह अनुमति किसी ऐप को सिस्टम सेटिंग बदलने देती है."</string>
<string name="write_settings_on" msgid="8230580416068832239">"हां"</string>
<string name="write_settings_off" msgid="5156104383386336233">"नहीं"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"अपने नए टैबलेट के बारे में अच्छी तरह जानें"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"अपने नए डिवाइस के बारे में अच्छी तरह जानें"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"यह सुविधा इस डिवाइस पर उपलब्ध नहीं है"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS रजिस्ट्रेशन की स्थिति"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"रजिस्टर है"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"रजिस्टर नहीं है"</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index e792cb0..56c8b16 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -1172,7 +1172,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC adresa Wi-Fi-ja"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serijski broj"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nije dostupno"</string>
<string name="status_up_time" msgid="7294859476816760399">"Vrijeme aktivnosti"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Vrijeme bez mirovanja"</string>
<string name="internal_memory" msgid="9129595691484260784">"Unutarnja pohrana"</string>
@@ -2370,8 +2369,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nije moguća ručna sinkronizacija"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sinkronizacija za tu stavku trenutačno je onemogućena. Da biste promijenili tu postavku, privremeno uključite pozadinske podatke i automatsku sinkronizaciju."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC adresa"</string>
<string name="enter_password" msgid="8035706727471334122">"Da biste pokrenuli Android, unesite zaporku"</string>
<string name="enter_pin" msgid="5305333588093263790">"Da biste pokrenuli Android, unesite svoj PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Da biste pokrenuli Android, nacrtajte svoj obrazac"</string>
@@ -3088,6 +3085,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kada je zaslon isključen"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kada je zaslon uključen ili isključen"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Postavke obavijesti"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"U redu"</string>
<string name="device_feedback" msgid="3238056036766293294">"Pošalji povr. informacije o uređaju"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Unesite PIN administratora"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Uključeno"</string>
@@ -3346,7 +3344,8 @@
<string name="write_settings_title" msgid="4232152481902542284">"S dopuštenjem za izmjenu postavki sustava"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Izmjena postavki sustava"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Dopuštenje aplikacije za izmjenu postavki sustava"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Dopusti izmjenu postavki sustava"</string>
+ <!-- no translation found for permit_write_settings (658555006453212691) -->
+ <skip />
<string name="write_settings_description" msgid="6868293938839954623">"To dopuštenje omogućuje aplikaciji izmjenu postavki sustava."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Da"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ne"</string>
@@ -3783,7 +3782,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Upoznajte svoj novi tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Upoznajte svoj novi uređaj"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ova značajka nije dostupna na ovom uređaju"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stanje registracije IMS-a"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrirano"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nije registrirano"</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 74fa10f..9a1bf65 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi eszköz MAC-címe"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-cím"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Sorozatszám"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nem érhető el"</string>
<string name="status_up_time" msgid="7294859476816760399">"Futásidő"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Készenléti idő"</string>
<string name="internal_memory" msgid="9129595691484260784">"Belső tárhely"</string>
@@ -2351,8 +2350,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nem lehet manuálisan szinkronizálni"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Az elem szinkronizálása jelenleg le van tiltva. A beállítás módosításához ideiglenesen kapcsolja be a háttéradatokat és az automatikus szinkronizálást."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-cím"</string>
<string name="enter_password" msgid="8035706727471334122">"Az Android indításához írja be jelszavát"</string>
<string name="enter_pin" msgid="5305333588093263790">"Az Android indításához írja be PIN-kódját"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Az Android indításához rajzolja le mintáját"</string>
@@ -2743,6 +2740,7 @@
<item quantity="other">%d rejtett elem megjelenítése</item>
<item quantity="one">%d rejtett elem megjelenítése</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Összecsukás"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Hálózat és internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"adathasználat"</string>
@@ -2845,8 +2843,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automatikus szabály van bekapcsolva</item>
<item quantity="one">1 automatikus szabály van bekapcsolva</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"A Ne zavarjanak funkció beállításai"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Csak a prioritást élvezők"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne zavarjanak"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Viselkedés"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Hangok és rezgések:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Hang nélkül"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Hang nélkül (teljes némítás)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Hang nélkül, kivéve: <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">"Automatikus szabályok"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"A Ne zavarjanak szabályai"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Hangok és rezgések korlátozása"</string>
@@ -3022,13 +3026,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Csak a megcsillagozott névjegyektől"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Senkitől"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Riasztások"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Az ébresztések kiemeltek, hangjelzéssel járnak"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Emlékeztetők"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Események"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Minden hívó"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Kijelölt hívók"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Többször hívó személyek"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Ha <xliff:g id="MINUTES">%d</xliff:g> percen belül másodjára is hív valaki, akkor engedélyezze"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ha <xliff:g id="MINUTES">%d</xliff:g> percen belül másodjára hív ugyanaz a személy"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Auto. bekapcsolás"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Soha"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Minden este"</string>
@@ -3057,6 +3062,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Ha a képernyő ki van kapcsolva"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Amikor a képernyő be vagy ki van kapcsolva"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Értesítési beállítások"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Visszajelzés küldése az eszközről"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Adja meg a rendszergazdai PIN-kódot"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Be"</string>
@@ -3308,7 +3314,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Módosíthatja a rendszerbeállításokat"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Rendszerbeállítások módosítása"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Alkalmazásengedély rendszerbeállítások módosítására"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Rendszerbeállítások módosításának engedélyezése"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Rendszerbeállítás-módosítások engedélyezése"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Ez az engedély lehetővé teszi az alkalmazás számára a rendszerbeállítások módosítását."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Igen"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nem"</string>
@@ -3729,7 +3735,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Az új táblagép bemutatójának megtekintése"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Az új eszköz bemutatójának megtekintése"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ez a funkció nem áll rendelkezésre ezen az eszközön"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-regisztráció állapota"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Regisztrált"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nem regisztrált"</string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index f224b0b..7465421 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC հասցե"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-ի հասցեն"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Հերթական համարը"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Անհասանելի"</string>
<string name="status_up_time" msgid="7294859476816760399">"Աշխատած ժամանակը"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Արթուն մնալու տևողությունը"</string>
<string name="internal_memory" msgid="9129595691484260784">"Ներքին պահոց"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Հնարավոր չէ ձեռքով համաժամեցնել"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Համաժամեցումը այս տարրի համար այժմ անջատված է: Այս կարգավորումը փոխելու համար ժամանակավորապես միացրեք հետնաշերտի տվյալները և ինքնահամաժամեցումը:"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC հասցե"</string>
<string name="enter_password" msgid="8035706727471334122">"Android-ի մեկնարկի համար մուտքագրեք ձեր գաղտնաբառը"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android-ի մեկնարկի համար մուտքագրեք ձեր PIN-ը"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android-ի մեկնարկի համար մուտքագրեք ձեր նախշը"</string>
@@ -2741,6 +2738,7 @@
<item quantity="one">Show %d hidden items</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_summary_mobile" msgid="3851083934739500429">"բջջային"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"տվյալների օգտագործում"</string>
@@ -2843,8 +2841,14 @@
<item quantity="one"><xliff:g id="ON_COUNT">%d</xliff:g> automatic rules turned on</item>
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> ավտոմատ կանոն միացված է</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"«Չանհանգստացնել» ռեժիմի կարգավորումներ"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Միայն կարևորները"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Չանհանգստացնել"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Տարբերակներ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Թույլատրել ձայներ և թրթռոցներ`"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Չանհանգստացնել ռեժիմի կանոնների սահմանում"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Որոշ դեպքերում սահմանափակել ձայները և թրթռոցը"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Զարթուցիչներն առաջնահերթ են և միշտ ձայն կարձակեն"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Ընտրված զանգողներ"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Կրկնակի զանգեր"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Թույլատրել, եթե նույն անձը <xliff:g id="MINUTES">%d</xliff:g> րոպեի ընթացքում նորից է զանգում"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Եթե նույն անձը <xliff:g id="MINUTES">%d</xliff:g> րոպեի ընթացքում նորից է զանգում"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Ավտոմատ միացնել"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Երբեք"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Ամեն գիշեր"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Երբ էկրանն անջատված է"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Երբ էկրանը միացված կամ անջատված է"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Մուտքագրեք ադմինիստրատորի PIN կոդը"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Միացված է"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Կարող են փոփոխել համակարգի կարգավորումները"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Փոփոխել կարգավորումները"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Թույլատրել հավելվածին փոփոխել կարգավորումները"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Թույլատրել կարգավորումների փոփոխումը"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Թույլատրել կարգավորումների փոփոխումը"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Միացնելով այս թույլտվությունը՝ թույլ եք տալիս հավելվածին փոփոխել համակարգի կարգավորումները:"</string>
<string name="write_settings_on" msgid="8230580416068832239">"Այո"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ոչ"</string>
@@ -3423,7 +3429,7 @@
<string name="billing_cycle_fragment_summary" msgid="8231066353654583106">"Ամեն ամիս, ամսի <xliff:g id="ID_1">%1$s</xliff:g>-ին"</string>
<string name="network_restrictions" msgid="8234695294536675380">"Ցանցային սահմանափակումներ"</string>
<plurals name="network_restrictions_summary" formatted="false" msgid="4301618027244595839">
- <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> restrictions</item>
+ <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> սահմանափակում</item>
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> սահմանափակում</item>
</plurals>
<string name="operator_warning" msgid="1862988028996859195">"Օպերատորի վիճակագրությունը կարող է տարբերվել սարքի տվյալներից։"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Ծանոթացեք ձեր նոր պլանշետին"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Ծանոթացեք ձեր նոր սարքին"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Տվյալ գործառույթը հասանելի չէ այս սարքի վրա"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS ծառայության գրանցման կարգավիճակը"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Գրանցված է"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Գրանցված չէ"</string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index aa28739..c98c4df 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -1061,7 +1061,7 @@
<string name="screensaver_settings_title" msgid="1770575686476851778">"Screen saver"</string>
<string name="screensaver_settings_summary_either_long" msgid="7302740999250873332">"Saat mengisi baterai atau dipasang ke dok"</string>
<string name="screensaver_settings_summary_either_short" msgid="6140527286137331478">"Keduanya"</string>
- <string name="screensaver_settings_summary_sleep" msgid="9086186698140423493">"Saat mengisi daya"</string>
+ <string name="screensaver_settings_summary_sleep" msgid="9086186698140423493">"Saat mengisi baterai"</string>
<string name="screensaver_settings_summary_dock" msgid="2072657401664633283">"Selagi di dok"</string>
<string name="screensaver_settings_summary_never" msgid="5165622985174349585">"Tidak pernah"</string>
<string name="screensaver_settings_summary_off" msgid="2481581696365146473">"Mati"</string>
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Alamat MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Alamat bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Nomor seri"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Tidak Tersedia"</string>
<string name="status_up_time" msgid="7294859476816760399">"Waktu aktif"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Waktu bangun"</string>
<string name="internal_memory" msgid="9129595691484260784">"Penyimpanan internal"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Tidak dapat menyinkronkan secara manual"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Saat ini, sinkronisasi untuk item ini dinonaktifkan. Untuk mengubah setelan ini, aktifkan data latar belakang dan sinkronisasi otomatis untuk sementara."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Alamat MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Untuk memulai Android, masukkan sandi"</string>
<string name="enter_pin" msgid="5305333588093263790">"Untuk memulai Android, masukkan PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Untuk memulai Android, gambar pola Anda"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Tampilkan %d item tersembunyi</item>
<item quantity="one">Tampilkan %d item tersembunyi</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Ciutkan"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Jaringan & Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"seluler"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"penggunaan data"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> aturan otomatis diaktifkan</item>
<item quantity="one">1 aturan otomatis diaktifkan</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferensi Jangan Ganggu"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Hanya izinkan prioritas"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Jangan Ganggu"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Perilaku"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Izinkan suara dan getaran dari"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Tanpa suara"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Tanpa suara (Senyap Total)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Tanpa suara, kecuali <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">"Aturan otomatis"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Setel aturan Jangan Ganggu"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Batasi suara & getaran pada waktu tertentu"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Hanya dari kontak berbintang"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Tidak ada"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarm"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarm selalu prioritas dan membunyikan suara"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Pengingat"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Acara"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Semua penelepon"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Penelepon yang dipilih"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Penelepon berulang"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Izinkan jika ada orang yang sama menelepon untuk kedua kalinya dalam waktu <xliff:g id="MINUTES">%d</xliff:g> menit"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Jika orang yang sama menelepon untuk kedua kalinya dalam waktu <xliff:g id="MINUTES">%d</xliff:g> menit"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Otomatis aktif"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Tidak pernah"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Setiap malam"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Saat layar nonaktif"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Saat layar aktif atau nonaktif"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Setelan notifikasi"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Oke"</string>
<string name="device_feedback" msgid="3238056036766293294">"Kirim masukan tentang perangkat ini"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Masukkan PIN admin"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Aktif"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Dapat mengubah setelan sistem"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Ubah setelan sistem"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Izin mengubah setelan sistem aplikasi"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Izinkan mengubah setelan sistem"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Izinkan mengubah setelan sistem"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Izin ini memungkinkan aplikasi mengubah setelan sistem."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ya"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Tidak"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Ikuti tur tentang tablet baru Anda"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Ikuti tur tentang perangkat baru Anda"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Fitur ini tidak tersedia di perangkat"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Status pendaftaran IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Terdaftar"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Tidak terdaftar"</string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 93604f5..8783a6e 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-vistfang Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-vistfang"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Raðnúmer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Ekki tiltækt"</string>
<string name="status_up_time" msgid="7294859476816760399">"Uppitími"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Vökutími"</string>
<string name="internal_memory" msgid="9129595691484260784">"Innbyggð geymsla"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ekki er hægt að samstilla handvirkt"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Samstilling fyrir þetta atriði er óvirk sem stendur. Til að breyta þeirri stillingu skaltu kveikja tímabundið á bakgrunnsgögnum og sjálfvirkri samstillingu."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"MAC-vistfang 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Sláðu inn aðgangsorðið þitt til að ræsa Android"</string>
<string name="enter_pin" msgid="5305333588093263790">"Sláðu inn PIN-númerið þitt til að ræsa Android"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Teiknaðu opnunarmynstrið til að ræsa Android"</string>
@@ -2741,6 +2738,7 @@
<item quantity="one">Sýna %d falið atriði</item>
<item quantity="other">Sýna %d falin atriði</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Draga saman"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Netkerfi og internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"farsími"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"gagnanotkun"</string>
@@ -2843,8 +2841,14 @@
<item quantity="one">Kveikt á <xliff:g id="ON_COUNT">%d</xliff:g> sjálfvirkri reglu</item>
<item quantity="other">Kveikt á <xliff:g id="ON_COUNT">%d</xliff:g> sjálfvirkum reglum</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Stillingar fyrir „Ónáðið ekki“"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Aðeins forgangsheimildir"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ónáðið ekki"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Hegðun"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Leyfa hljóð og titring frá"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ekkert hljóð"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ekkert hljóð (algjör þögn)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ekkert hljóð nema <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">"Sjálfvirkar reglur"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Stilla reglur „Ónáðið ekki“"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Takmarka hljóð og titring á vissum tíma"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Aðeins frá stjörnumerktum tengiliðum"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ekkert"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Vekjarar"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Viðvaranir eru ávallt í forgangi og með hljóði"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Áminningar"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Viðburðir"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Allir hringjendur"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Valdir hringjendur"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Hringt endurtekið"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Leyfa símtal ef sami aðili hringir aftur innan <xliff:g id="MINUTES">%d</xliff:g> mínútna"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ef sami aðili hringir aftur innan <xliff:g id="MINUTES">%d</xliff:g> mínútna"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Kveikja sjálfkrafa"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Aldrei"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Á hverju kvöldi"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Þegar slökkt er á skjánum"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Þegar kveikt eða slökkt er á skjánum"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Tilkynningastillingar"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Í lagi"</string>
<string name="device_feedback" msgid="3238056036766293294">"Senda ábendingar um þetta tæki"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Færðu inn PIN-númer kerfisstjóra"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Kveikt"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Geta breytt kerfisstillingum"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Breyta kerfisstillingum"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Heimild forrits til að breyta kerfisstillingum"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Leyfa breytingar á kerfisstillingum"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Leyfa breytingar á kerfisstillingum"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Þessi heimild leyfir forriti að breyta kerfisstillingum."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Já"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nei"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Skoðaðu kynningu á nýju spjaldtölvunni þinni"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Skoðaðu kynningu á nýja tækinu þínu"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Þessi eiginleiki er ekki í boði í þessu tæki"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Staða IMS-skráningar"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Skráð"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ekki skráð"</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index d6e1211..52d743f 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Indirizzo MAC Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Indirizzo Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Numero di serie"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Non disponibile"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tempo di attività"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Tempo di attività"</string>
<string name="internal_memory" msgid="9129595691484260784">"Memoria interna"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Impossibile sincronizzare manualmente"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Al momento la sincronizzazione di questo elemento non è attiva. Per modificare questa impostazione, attiva temporaneamente i dati in background e la sincronizzazione automatica."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Indirizzo MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Per avviare Android, inserisci la password"</string>
<string name="enter_pin" msgid="5305333588093263790">"Per avviare Android, inserisci il PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Per avviare Android, traccia la tua sequenza"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Mostra %d elementi nascosti</item>
<item quantity="one">Mostra %d elemento nascosto</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Comprimi"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Rete e Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"rete mobile"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"utilizzo dei dati"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> regole automatiche attivate</item>
<item quantity="one">1 regola automatica attivata</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferenze Non disturbare"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"La priorità consente solo"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Non disturbare"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportamento"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Consenti suoni/vibrazioni per"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Nessun suono"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Nessun suono (silenzio totale)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Nessun suono, tranne per <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">"Regole automatiche"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Imposta regole Non disturbare"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limita suoni e vibrazioni in determinate ore"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Solo da contatti Speciali"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Nessuno"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Sveglie"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Sveglie sempre prioritarie, con audio attivo"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Promemoria"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Eventi"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Tutti i chiamanti"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Chiamate da utenti selezionati"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Chiamate ripetute"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Consenti se la stessa persona chiama una seconda volta entro <xliff:g id="MINUTES">%d</xliff:g> minuti"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Se la stessa persona chiama una seconda volta entro <xliff:g id="MINUTES">%d</xliff:g> minuti"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Attiva automaticam."</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Mai"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Ogni notte"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Quando lo schermo è spento"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Quando lo schermo è acceso o spento"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Impostazioni di notifica"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Invia feedback sul dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Inserisci PIN amministratore"</string>
<string name="switch_on_text" msgid="1124106706920572386">"On"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Possono modificare le impostazioni di sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modifica impostazioni sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Autorizzazione modifica impostazioni sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Consenti modifica impostazioni di sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Consenti modifica impostazioni di sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Questa autorizzazione consente a un\'app di modificare le impostazioni di sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sì"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Scopri il tuo nuovo tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Scopri il tuo nuovo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Questa funzione non è disponibile su questo dispositivo"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stato di registrazione IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrato"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Non registrato"</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index cbdb563..8e91b11 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"כתובת MAC של Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"כתובת Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"מספר סידורי"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"לא זמין"</string>
<string name="status_up_time" msgid="7294859476816760399">"זמן פעולה"</string>
<string name="status_awake_time" msgid="2393949909051183652">"משך פעילות"</string>
<string name="internal_memory" msgid="9129595691484260784">"אחסון פנימי"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"לא ניתן לסנכרן באופן ידני"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"אפשרות הסנכרון עבור פריט זה מושבתת כרגע. כדי לשנות את ההגדרה, הפעל באופן זמני את נתוני הרקע והסנכרון האוטומטי."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"כתובת 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"כדי להפעיל את Android עליך להזין את הסיסמה שלך"</string>
<string name="enter_pin" msgid="5305333588093263790">"כדי להפעיל את Android, הזן את קוד האימות"</string>
<string name="enter_pattern" msgid="4187435713036808566">"כדי להפעיל את Android, שרטט את קו ביטול הנעילה"</string>
@@ -2795,6 +2792,7 @@
<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_summary_mobile" msgid="3851083934739500429">"סלולרית"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"שימוש בנתונים"</string>
@@ -2899,8 +2897,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> כללים אוטומטיים מופעלים</item>
<item quantity="one">כלל אוטומטי אחד מופעל</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"העדפות של מצב \'נא לא להפריע\'"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"רק התראות בעדיפות"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"נא לא להפריע"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"התנהגות"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"אפשר להשמיע צלילים ורטט מ-"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"הגדרת כללים ל\'נא לא להפריע\'"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"הגבל צלילים ורטט בזמנים מסוימים"</string>
@@ -3084,13 +3088,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"התראות תמיד מקבלות עדיפות גבוהה ומשמיעות צליל"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"מתקשרים נבחרים"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"מתקשרים חוזרים"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"אם מגיעה שיחה ממישהו בפעם השנייה תוך <xliff:g id="MINUTES">%d</xliff:g> דקות, אפשר להציג התראה"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"אם מגיעה שיחה ממישהו בפעם השנייה תוך <xliff:g id="MINUTES">%d</xliff:g> דקות"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"הפעלה אוטומטית"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"אף פעם"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"בכל לילה"</string>
@@ -3123,6 +3128,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"כאשר המסך כבוי"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"כאשר המסך מופעל או כבוי"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"הזן את קוד הגישה של מנהל המכשיר"</string>
<string name="switch_on_text" msgid="1124106706920572386">"פועל"</string>
@@ -3388,7 +3394,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"יכולות לשנות את הגדרות המערכת"</string>
<string name="write_system_settings" msgid="3482913590601096763">"שינוי הגדרות המערכת"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"הרשאת אפליקציה לשנות את הגדרות המערכת"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"אפשר לשנות את הגדרות המערכת"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"הרשאה לשנות את הגדרות המערכת"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ההרשאה הזו מתירה לאפליקציה לשנות את הגדרות המערכת."</string>
<string name="write_settings_on" msgid="8230580416068832239">"כן"</string>
<string name="write_settings_off" msgid="5156104383386336233">"לא"</string>
@@ -3841,7 +3847,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"סיור היכרות עם הטאבלט החדש"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"סיור היכרות עם המכשיר החדש"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"התכונה לא זמינה במכשיר הזה"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"סטטוס הרשמה ל-IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"רשום"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"לא רשום"</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index fe7ff90..a16f6d5 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MACアドレス"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetoothアドレス"</string>
<string name="status_serial_number" msgid="2257111183374628137">"シリアル番号"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"不明"</string>
<string name="status_up_time" msgid="7294859476816760399">"稼働時間"</string>
<string name="status_awake_time" msgid="2393949909051183652">"端末使用時間"</string>
<string name="internal_memory" msgid="9129595691484260784">"内部ストレージ"</string>
@@ -2353,8 +2352,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"手動では同期できません"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"このアイテムの同期は現在無効になっています。この設定を変更するには、バックグラウンドデータと自動同期を一時的にONにします。"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MACアドレス"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidを起動するには、パスワードを入力します"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidを起動するには、PINを入力します"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidを起動するには、パターンを入力します"</string>
@@ -2745,6 +2742,7 @@
<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_summary_mobile" msgid="3851083934739500429">"モバイル"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"データ使用量"</string>
@@ -2847,8 +2845,14 @@
<item quantity="other">ON になっている自動ルールが <xliff:g id="ON_COUNT">%d</xliff:g> 件あります</item>
<item quantity="one">ON になっている自動ルールが 1 件あります</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"マナーモードの設定"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"優先する通知のみを許可"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"マナーモード"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"動作"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"次の音やバイブレーションを許可"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"マナーモード ルールの設定"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"所定の時間に音とバイブレーションを制限する"</string>
@@ -3024,13 +3028,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"アラームは常に優先的な割り込みとして音が鳴ります"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"選択した発信者"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"同一発信者による再発信"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"同じ人が<xliff:g id="MINUTES">%d</xliff:g>分以内に再度発信することを許可する"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"同じ人から <xliff:g id="MINUTES">%d</xliff:g> 分以内に再度発信があった場合"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"自動的にON"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"設定しない"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"毎日の夜間"</string>
@@ -3059,6 +3064,7 @@
<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="notification_app_settings_button" msgid="6685640230371477485">"通知設定"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"この端末についてフィードバックを送信"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"管理者 PIN の入力"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ON"</string>
@@ -3310,7 +3316,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"システム設定を変更できるアプリ"</string>
<string name="write_system_settings" msgid="3482913590601096763">"システム設定の変更"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"アプリがシステム設定を変更する権限"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"システム設定の変更の許可"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"システム設定の変更の許可"</string>
<string name="write_settings_description" msgid="6868293938839954623">"この権限により、アプリはシステム設定の変更ができるようになります。"</string>
<string name="write_settings_on" msgid="8230580416068832239">"可"</string>
<string name="write_settings_off" msgid="5156104383386336233">"不可"</string>
@@ -3731,7 +3737,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"新しいタブレットの使い方をご紹介します"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"新しい端末の使い方をご紹介します"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"この機能は、お使いの端末ではご利用いただけません"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS 登録ステータス"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"登録済み"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未登録"</string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 9796c6b..da28507 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC მისამართი"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth მისამართი"</string>
<string name="status_serial_number" msgid="2257111183374628137">"სერიული ნომერი"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"მიუწვდომელია"</string>
<string name="status_up_time" msgid="7294859476816760399">"მუშაობის დრო"</string>
<string name="status_awake_time" msgid="2393949909051183652">"მუშაობის დრო"</string>
<string name="internal_memory" msgid="9129595691484260784">"შიდა მეხსიერება"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"შეუძლებელია ერთობლივი სინქრონიზაცია"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"სინქრონიზაცია გამორთულია. პარამეტრების შესაცვლელად დროებით ჩართეთ მონაცემების ფონური და ავტომატური სინქრონიზაცია."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC მისამართი"</string>
<string name="enter_password" msgid="8035706727471334122">"Android-ის ჩასართავად, შეიყვანეთ თქვენი პაროლი."</string>
<string name="enter_pin" msgid="5305333588093263790">"Android-ის ჩასართავად, შეიყვანეთ თქვენი PIN."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android-ის ჩასართავად, მოხაზეთ თქვენი ნიმუში."</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"მობილური"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"მონაცემთა მოხმარება"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"„არ შემაწუხოთ“ რეჟიმის პარამეტრები"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"მხოლოდ პრიორიტეტულების დაშვება"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"არ შემაწუხოთ"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ქცევა"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ხმებისა და ვიბრაციის დაშვება"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"„არ შემაწუხოთ“ რეჟიმის წესების დაყენება"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"გარკვეულ დროს ხმებისა და ვიბრაციის შეზღუდვა"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"მაღვიძარები მუდამ პრიორიტეტულია და ხმას გამოსცემს"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"არჩეული აბონენტები"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"აბონენტების გამეორება"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"თუ პიროვნება <xliff:g id="MINUTES">%d</xliff:g> წუთის მანძილზე მეორედ დარეკავს, დაიშვას"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"თუ პიროვნება <xliff:g id="MINUTES">%d</xliff:g> წუთის განმავლობაში მეორედ დარეკავს"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"ავტომატურად ჩაირთოს"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"არასოდეს"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ყოველ ღამით"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"გამორთული ეკრანისას"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"ჩართული ან გამორთული ეკრანისას"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"შეიყვანეთ ადმინისტრატორის PIN-კოდი"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ჩართული"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"შეუძლია სისტემის პარამეტრების შეცვლა"</string>
<string name="write_system_settings" msgid="3482913590601096763">"სისტემის პარამეტრების შეცვლა"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"აპის მიერ სისტემის პარამეტრების შეცვლის ნებართვა"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"მიეცით სისტემის პარამეტრების შეცვლის უფლება"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"სისტემის პარამეტრების შეცვლის ნების დართვა"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ეს ნებართვა უფლებას აძლევს აპს, შეცვალოს სისტემის პარამეტრები."</string>
<string name="write_settings_on" msgid="8230580416068832239">"კი"</string>
<string name="write_settings_off" msgid="5156104383386336233">"არა"</string>
@@ -3401,9 +3407,9 @@
<string name="color_temperature" msgid="2070126836910615605">"ცივი ფერები"</string>
<string name="color_temperature_desc" msgid="4793729830226404052">"ეკრანზე ცივი ფერების გამოყენება"</string>
<string name="color_temperature_toast" msgid="4974218172133854827">"ფერთა ცვლილების მისასადაგებლად, გამორთეთ ეკრანი"</string>
- <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="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>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"ისარგებლეთ თქვენი ახალი ტაბლეტის გაცნობითი ტურით"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"ისარგებლეთ თქვენი ახალი მოწყობილობის გაცნობითი ტურით"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ამ მოწყობილობაზე ეს ფუნქცია მიუწვდომელია"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS რეგისტრაციის სტატუსი"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"რეგისტრირებული"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"არარეგისტრირებული"</string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 1742e4e..468cece 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC мекенжайы"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth мекенжайы"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Сериялық нөмірі"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Қол жетімсіз"</string>
<string name="status_up_time" msgid="7294859476816760399">"Қосылғаннан бергі жұмыс уақыты"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Ояну уақыты"</string>
<string name="internal_memory" msgid="9129595691484260784">"Ішкі жад"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Саусақ ізін пайдалану үшін құпия сөз орнатыңыз"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Саусақ ізін пайдалану үшін өрнекті орнатыңыз"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Қауіпсіздік үшін PIN кодын орнатыңыз"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Саусақ ізін пайдалану үшін PIN кодын орнатыңыз"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Қауіпсіздік үшін өрнекті орнатыңыз"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Қолмен синхрондау мүмкін болмады"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Бұл нысан үшін синхрондау уақытша өшірілген. Бұл параметрді өзгерту үшін артқы шеп деректері мен автоматты сихнрондауды уақытша қосыңыз."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4Г"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4Г MAC мекенжайы"</string>
<string name="enter_password" msgid="8035706727471334122">"Android құрылғысын іске қосу үшін құпия сөзіңізді енгізіңіз"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android құрылғысын іске қосу үшін PIN кодын енгізіңіз"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android құрылғысын іске қосу үшін өрнекті енгізіңіз"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"мобильдік желі"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"деректерді пайдалану"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"\"Мазаламау\" режимі параметрлері"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Маңыздыларына ғана рұқсат"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Мазаламау"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Мінез-құлық"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Келесіден шыққан дыбыстар мен дірілдерге рұқсат беру"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"\"Мазаламау\" ережесін орнату"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Белгілі бір уақытта дыбысты және дірілді шектеу"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Дабылдар әрқашан басым маңызға ие және дауыстап беріледі"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Таңдалған қоңырау шалушылар"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Қайта қоңырау шалушылар"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Бір адам <xliff:g id="MINUTES">%d</xliff:g> минуттың ішінде қайта қоңырау шалса, қоңырауы келсін"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Бір адам <xliff:g id="MINUTES">%d</xliff:g> минут ішінде қайта шалса"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Автоматты түрде қосу"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Ешқашан"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Түн сайын"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Экран өшірулі кезде"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Экран қосулы немесе өшірулі кезде"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Әкімші PIN кодын енгізу"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Қосулы"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Жүйелік параметрлерді өзгертуге болады"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Жүйелік параметрлерді өзгерту"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Қолданбаның жүйелік параметрлерді өзгерту рұқсаты"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Жүйелік параметрлерді өзгертуге рұқсат ету"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Жүйелік параметрлерді өзгертуге рұқсат ету"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Бұл рұқсат қолданбаға жүйелік параметрлерді өзгертуге рұқсат етеді."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Иә"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Жоқ"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Жаңа планшеттің ішін аралаңыз"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Жаңа құрылғының ішін аралаңыз"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Бұл мүмкіндік құрылғыда жоқ"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS тіркеу күйі"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Тіркелген"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Тіркелмеген"</string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index d3470c6..96666f4 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"អាសយដ្ឋាន MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"អាសយដ្ឋានប៊្លូធូស"</string>
<string name="status_serial_number" msgid="2257111183374628137">"លេខស៊េរី"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"មិនមាន"</string>
<string name="status_up_time" msgid="7294859476816760399">"រយៈពេលបើក"</string>
<string name="status_awake_time" msgid="2393949909051183652">"ពេលវេលាភ្ញាក់"</string>
<string name="internal_memory" msgid="9129595691484260784">"ទំហំផ្ទុកខាងក្នុង"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"មិនអាចធ្វើសមកាលកម្មដោយដៃ"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"បច្ចុប្បន្នបានបិទការធ្វើសមកាលកម្មសម្រាប់ធាតុនេះ។ ដើម្បីប្ដូរការកំណត់នេះ បើកទិន្នន័យផ្ទៃខាងក្រោយ និងធ្វើសមកាលកម្មស្វ័យប្រវត្តិជាបណ្ដោះអាសន្ន។"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"អាសយដ្ឋាន 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"ដើម្បីចាប់ផ្ដើម Android បញ្ចូលពាក្យសម្ងាត់របស់អ្នក"</string>
<string name="enter_pin" msgid="5305333588093263790">"ដើម្បីចាប់ផ្ដើម Android បញ្ចូលកូដ PIN របស់អ្នក"</string>
<string name="enter_pattern" msgid="4187435713036808566">"ដើម្បីចាប់ផ្ដើម Android គូរលំនាំរបស់អ្នក"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"ឧបករណ៍ចល័ត"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ការប្រើទិន្នន័យ"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"ចំណូលចិត្តមុខងារកុំរំខាន"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"អនុញ្ញាតអាទិភាពប៉ុណ្ណោះ"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"កុំរំខាន"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"សកម្មភាព"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"អនុញ្ញាតឱ្យឮសំឡេង និងញ័រពី"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"កំណត់ច្បាប់សម្រាប់មុខងារកុំរំខាន"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ដាក់កម្រិតលើសំឡេង និងការញ័រក្នុងពេលណាមួយ"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"ម៉ោងរោទ៍មានអាទិភាព និងមានបន្លឺសំឡេងជានិច្ច"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"អ្នកហៅចូលបានជ្រើស"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"អ្នកហៅចូលសាជាថ្មី"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"ប្រសិនបើមនុស្សតែមួយហៅចូលមកលើកទីពីរនៅក្នុងរយៈពេល <xliff:g id="MINUTES">%d</xliff:g> នាទី អនុញ្ញាតចំពោះការហៅចូលនេះ។"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"ប្រសិនបើមនុស្សតែមួយហៅទូរសព្ទជាលើកទីពីរក្នុងរយៈពេល <xliff:g id="MINUTES">%d</xliff:g> នាទី"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"បើកដោយស្វ័យប្រវត្តិ"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"កុំ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"រាល់យប់"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"នៅពេលអេក្រង់បិទ"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"នៅពេលអេក្រង់បើក ឬបិទ"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"បញ្ចូលកូដ PIN របស់អ្នកគ្រប់គ្រង"</string>
<string name="switch_on_text" msgid="1124106706920572386">"បើក"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"អាចកែការកំណត់ប្រព័ន្ធ"</string>
<string name="write_system_settings" msgid="3482913590601096763">"កែការកំណត់ប្រព័ន្ធ"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"សិទ្ធិអនុញ្ញាតកម្មវិធីកែការកំណត់ប្រព័ន្ធ"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"អនុញ្ញាតកែការកំណត់ប្រព័ន្ធ"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"អនុញ្ញាតឱ្យកែសម្រួលការកំណត់ប្រព័ន្ធ"</string>
<string name="write_settings_description" msgid="6868293938839954623">"សិទ្ធិអនុញ្ញាតនេះអនុញ្ញាតឲ្យកម្មវិធីកែការកំណត់ប្រព័ន្ធ។"</string>
<string name="write_settings_on" msgid="8230580416068832239">"បាទ/ចាស"</string>
<string name="write_settings_off" msgid="5156104383386336233">"ទេ"</string>
@@ -3401,9 +3407,9 @@
<string name="color_temperature" msgid="2070126836910615605">"សីតុណ្ហភាពពណ៌ត្រជាក់"</string>
<string name="color_temperature_desc" msgid="4793729830226404052">"ប្រើពណ៌បង្ហាញត្រជាក់ជាងមុន"</string>
<string name="color_temperature_toast" msgid="4974218172133854827">"ដើម្បីប្តូរពណ៌ សូមបិទអេក្រង់"</string>
- <string name="connectivity_monitor_switch" msgid="9059759348648583421">"អង្គពិនិត្យស្ថានភាពតភ្ជាប់"</string>
- <string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"ConnectivityMonitor នឹងប្រមូលកំណត់ហេតុ នៅពេលវារកឃើញបញ្ហាក្នុងការភ្ជាប់ និងបញ្ជូនការជូនដំណឹងទៅកាន់អ្នកប្រើប្រាស់ដើម្បីរាយការណ៍ពីបញ្ហា"</string>
- <string name="connectivity_monitor_toast" msgid="5551859612881173028">"ដើម្បីអនុវត្តការផ្លាស់ប្តូរលើអង្គពិនិត្យស្ថានភាពតភ្ជាប់ សូមចាប់ផ្តើមឧបករណ៍ឡើងវិញ"</string>
+ <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>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"មើលការណែនាំថេប្លេតថ្មីរបស់អ្នក"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"មើលការណែនាំឧបករណ៍ថ្មីរបស់អ្នក"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"មុខងារនេះមិនមាននៅលើឧបករណ៍នេះទេ"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"ស្ថានភាពនៃការចុះឈ្មោះ IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"បានចុះឈ្មោះ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"មិនបានចុះឈ្មោះ"</string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 520ccb1..a8a41d5 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC ವಿಳಾಸ"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ಬ್ಲೂಟೂತ್ ವಿಳಾಸ"</string>
<string name="status_serial_number" msgid="2257111183374628137">"ಕ್ರಮ ಸಂಖ್ಯೆ"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"ಲಭ್ಯವಿಲ್ಲ"</string>
<string name="status_up_time" msgid="7294859476816760399">"ಕಾರ್ಯನಿರತ ಸಮಯ"</string>
<string name="status_awake_time" msgid="2393949909051183652">"ಎಚ್ಚರಗೊಂಡ ಸಮಯ"</string>
<string name="internal_memory" msgid="9129595691484260784">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆ"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"ಫಿಂಗರ್ ಫ್ರಿಂಟ್ ಬಳಸಲು, ಪಾಸ್ವರ್ಡ್ ಹೊಂದಿಸಿ"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"ಫಿಂಗರ್ ಫ್ರಿಂಟ್ ಬಳಸಲು, ಪ್ಯಾಟರ್ನ್ ಹೊಂದಿಸಿ"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"ಸುರಕ್ಷತೆಗಾಗಿ, ಪಿನ್ ಅನ್ನು ಹೊಂದಿಸಿ"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"ಫಿಂಗರ್ ಫ್ರಿಂಟ್ ಬಳಸಲು, ಪಿನ್ ಹೊಂದಿಸಿ"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"ಸುರಕ್ಷತೆಗಾಗಿ, ಪ್ಯಾಟ್ರನ್ ಹೊಂದಿಸಿ"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"ಹಸ್ತಚಾಲಿತವಾಗಿ ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"ಸಿಂಕ್ ಮಾಡುವುದನ್ನು ಈ ಐಟಮ್ಗೆ ಪ್ರಸ್ತುತ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ. ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಲು, ಹಿನ್ನೆಲೆ ಡೇಟಾ ಮತ್ತು ಸ್ವಯಂಚಾಲಿತ ಸಿಂಕ್ ಅನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ಆನ್ ಮಾಡಿ."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC ವಿಳಾಸ"</string>
<string name="enter_password" msgid="8035706727471334122">"Android ಪ್ರಾರಂಭಿಸಲು, ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ನಮೂದಿಸಿ"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android ಪ್ರಾರಂಭಿಸಲು, ನಿಮ್ಮ ಪಿನ್ ನಮೂದಿಸಿ"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android ಪ್ರಾರಂಭಿಸಲು, ನಿಮ್ಮ ನಮೂನೆಯನ್ನು ಚಿತ್ರಿಸಿ"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"ಮೊಬೈಲ್"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ಡೇಟಾ ಬಳಕೆ"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಆದ್ಯತೆಗಳು"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ಆದ್ಯತೆಯು ಕೆಳಗಿನವುಗಳಿಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ವರ್ತನೆ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ಧ್ವನಿ, ವೈಬ್ರೇಷನ್ಗೆ ಅನುಮತಿಸಿ"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ನಿಯಮ ಹೊಂದಿಸಿ"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ಕೆಲವು ಸಲ ಧ್ವನಿ-ವೈಬ್ರೇಶನ್ ಸೀಮಿತ"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"ಅಲಾರಾಂಗೆ ಯಾವಾಗಲೂ ಪ್ರಾಶಸ್ತ್ಯ ನೀಡಿ ಮತ್ತು ಧ್ವನಿ ಮಾಡಿ"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ಆಯ್ಕೆಮಾಡಲಾದ ಕರೆದಾರರು"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"ಪುನರಾವರ್ತಿತ ಕರೆದಾರರು"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"ಒಂದು ವೇಳೆ ಒಬ್ಬನೇ ವ್ಯಕ್ತಿ <xliff:g id="MINUTES">%d</xliff:g> ನಿಮಿಷಗಳೊಳಗೆ ಎರಡನೇ ಬಾರಿ ಕರೆ ಮಾಡಿದರೆ, ಅನುಮತಿಸಿ"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"ಒಂದು ವೇಳೆ ಒಬ್ಬನೇ ವ್ಯಕ್ತಿ <xliff:g id="MINUTES">%d</xliff:g> ನಿಮಿಷಗಳೊಳಗೆ ಎರಡನೇ ಬಾರಿ ಕರೆ ಮಾಡಿದರೆ"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗುವಿಕೆ"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ಎಂದಿಗೂ ಬೇಡ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ಪ್ರತಿ ರಾತ್ರಿ"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"ಪರದೆ ಆಫ್ ಆಗಿರುವಾಗ"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"ಪರದೆ ಆನ್ ಅಥವಾ ಆಫ್ ಆಗಿರುವಾಗ"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"ನಿರ್ವಾಹಕರ ಪಿನ್ ನಮೂದಿಸಿ"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ಆನ್"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮಾರ್ಪಡಿಸಬಹುದು"</string>
<string name="write_system_settings" msgid="3482913590601096763">"ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"ಅಪ್ಲಿಕೇಶನ್ ಮಾರ್ಪಡಿಸಲು ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳ ಅನುಮತಿ"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳ ಮಾರ್ಪಡಿಸುವಿಕೆಯನ್ನು ಅನುಮತಿಸಿ"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"ಮಾರ್ಪಡಿಸುವ ಸಿಸ್ಟಮ್ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಅನುಮತಿಸಿ"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ಈ ಅನುಮತಿಯು ಸಿಸ್ಟಂ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮಾರ್ಪಡಿಸಲು ಅಪ್ಲಿಕೇಶನ್ಗೆ ಅನುಮತಿಸುತ್ತದೆ."</string>
<string name="write_settings_on" msgid="8230580416068832239">"ಹೌದು"</string>
<string name="write_settings_off" msgid="5156104383386336233">"ಇಲ್ಲ"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"ನಿಮ್ಮ ಹೊಸ ಟ್ಯಾಬ್ಲೆಟ್ನ ಬಳಕೆ ಪ್ರಾರಂಭಿಸಿ"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"ನಿಮ್ಮ ಹೊಸ ಸಾಧನದ ಬಳಕೆಯನ್ನು ಪ್ರಾರಂಭಿಸಿ"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ಈ ಸಾಧನದಲ್ಲಿ ಈ ವೀಡಿಯೊ ಲಭ್ಯವಿಲ್ಲ"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS ನೋಂದಣಿ ಸ್ಥಿತಿ"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"ನೋಂದಾಯಿಸಲಾಗಿದೆ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ನೋಂದಾಯಿಸಲಾಗಿಲ್ಲ"</string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 2ba7e71..efb8572 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC 주소"</string>
<string name="status_bt_address" msgid="4195174192087439720">"블루투스 주소"</string>
<string name="status_serial_number" msgid="2257111183374628137">"일련번호"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"사용할 수 없음"</string>
<string name="status_up_time" msgid="7294859476816760399">"가동 시간"</string>
<string name="status_awake_time" msgid="2393949909051183652">"무중단 가동 시간"</string>
<string name="internal_memory" msgid="9129595691484260784">"내부 저장소"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"수동으로 동기화할 수 없음"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"현재 이 항목에 대해 동기화를 사용할 수 없습니다. 이 설정을 변경하려면 백그라운드 데이터 및 자동 동기화를 일시적으로 사용하도록 설정하세요."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC 주소"</string>
<string name="enter_password" msgid="8035706727471334122">"Android를 시작하려면 비밀번호를 입력하세요."</string>
<string name="enter_pin" msgid="5305333588093263790">"Android를 시작하려면 PIN을 입력하세요."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android를 시작하려면 패턴을 그리세요."</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"모바일"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"데이터 사용"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"알림 일시중지 환경설정"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"중요 알림만 허용"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"알림 일시중지"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"동작"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"다음의 소리 및 진동 허용"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"알림 일시중지 규칙 설정"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"특정 시간에 소리 및 진동 제한"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"알림이 항상 중요 알림으로 설정되며 소리로 알림"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"선택한 발신자"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"반복 발신자"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"<xliff:g id="MINUTES">%d</xliff:g>분 이내에 같은 사람이 다시 전화를 걸면 알림을 허용합니다."</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"<xliff:g id="MINUTES">%d</xliff:g>분 이내에 같은 사람이 다시 전화를 거는 경우"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"자동 사용 설정"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"사용 안함"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"매일 밤"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"화면이 꺼져 있을 때"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"화면이 켜져 있든 꺼져 있든 항상"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"관리자 PIN 입력"</string>
<string name="switch_on_text" msgid="1124106706920572386">"사용"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"시스템 설정 수정 가능"</string>
<string name="write_system_settings" msgid="3482913590601096763">"시스템 설정 수정"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"앱의 시스템 설정 수정 권한"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"시스템 설정 수정 허용"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"시스템 설정 수정 허용"</string>
<string name="write_settings_description" msgid="6868293938839954623">"이 권한은 앱이 시스템 설정을 수정하도록 허용합니다."</string>
<string name="write_settings_on" msgid="8230580416068832239">"예"</string>
<string name="write_settings_off" msgid="5156104383386336233">"아니요"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"새 태블릿 둘러보기"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"새 기기 둘러보기"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"이 기기에서 지원하지 않는 기능입니다."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS 등록 상태"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"등록됨"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"등록되지 않음"</string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 3e6649a..e6064dc 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -1158,7 +1158,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC дареги"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth дареги"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Сериялык номери"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Жеткиликсиз"</string>
<string name="status_up_time" msgid="7294859476816760399">"Иштеген убакыты"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Ойгоо турган убакыт"</string>
<string name="internal_memory" msgid="9129595691484260784">"Ички эстутум"</string>
@@ -2352,8 +2351,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Кол менен синхрондоштуруу мүмкүн эмес"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Бул үчүн синхрондоштуруу азыр өчүрүлгөн. Бул тууралоону өзгөртүш үчүн, фондук алмашуу жана авто-синхрондоштурууну убактылуу иштетиңиз."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC дареги"</string>
<string name="enter_password" msgid="8035706727471334122">"Android\'ду иштетүү үчүн, сырсөзүңүздү киргизиңиз"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android\'ду иштетүү үчүн, PIN\'иңизди киргизиңиз"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android\'ду иштетүү үчүн, үлгүңүздү чийиңиз"</string>
@@ -2744,6 +2741,7 @@
<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_summary_mobile" msgid="3851083934739500429">"мобилдик"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"дайындардын колдонулушу"</string>
@@ -2846,8 +2844,14 @@
<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="842308776768942600">"\"Тынчымды алба\" жөндөөлөрү"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Шашылыш эскертмелер гана"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Тынчымды алба"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Аракеттери"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Үндөр жана дирилдөөгө уруксат"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"\"Тынчымды алба\" режиминин эрежелери"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Белгилүү бир убакыттарда эскертмелерди өчүрүү"</string>
@@ -3023,13 +3027,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Ойготкучтарга артыкчылык берилип, үндөрү чыксын"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Тандалган чалуучулар"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Кайра чалуучулар"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Эгер бир эле адам <xliff:g id="MINUTES">%d</xliff:g> мүнөттүн ичинде кайра чалса, уруксат берилсин"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Эгер бир эле адам <xliff:g id="MINUTES">%d</xliff:g> мүнөттүн ичинде кайра чалса"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Автоматтык түрдө күйүү"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Эч качан"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Түн сайын"</string>
@@ -3058,6 +3063,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Экран өчүп турганда"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Экран күйүп же өчүп турганда"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Администратордун PIN кодун киргизиңиз"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Күйүк"</string>
@@ -3309,7 +3315,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Тутум жөндөөлөрүн өзгөртө алат"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Тутум жөндөөлөрүн өзгөртүү"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Колдонмонун тутум жөндөөлөрүн өзгөртүү уруксаты"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Тутум жөндөөлөрүн өзгөртүүгө уруксат"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Тутум жөндөөлөрүн өзгөртүүгө уруксат берүү"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Мындай уруксат колдонмого тутум жөндөөлөрүн өзгөртүү мүмкүнчүлүгүн берет."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ооба"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Жок"</string>
@@ -3730,7 +3736,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Жаңы планшетиңизди карап чыгыңыз"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Жаңы түзмөгүңүзду карап чыгыңыз"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Бул функция бул түзмөктө иштебейт"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS каттоо абалы"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Катталган"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Катталган эмес"</string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 412581e..0c00b65 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"ທີ່ຢູ່ Wi-Fi MAC"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ທີ່ຢູ່ Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"ໝາຍເລກຊີຣຽວ"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"ບໍ່ມີຂໍ້ມູນ"</string>
<string name="status_up_time" msgid="7294859476816760399">"ເວລາເປີດນຳໃຊ້"</string>
<string name="status_awake_time" msgid="2393949909051183652">"ເວລາການເຮັດວຽກ"</string>
<string name="internal_memory" msgid="9129595691484260784">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍໃນ"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"ບໍ່ສາມາດຊິ້ງຂໍ້ມູນເອງໄດ້"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"ການຊິ້ງຂໍ້ມູນຂອງລາຍການນີ້ຖືກປິດຢູ່. ເພື່ອປ່ຽນການຕັ້ງຄ່ານີ້, ໃຫ້ເປິດການນຳໃຊ້ຂໍ້ມູນພື້ນຫຼັງ ແລະການຊິ້ງຂໍ້ມູນອັດຕະໂນມັດຊົ່ວຄາວ."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"ເພີ່ມເລີ່ມຕົ້ນໃຊ້ Android, ໃຫ້ໃສ່ລະຫັດຜ່ານຂອງທ່ານ"</string>
<string name="enter_pin" msgid="5305333588093263790">"ເພີ່ມເລີ່ມຕົ້ນໃຊ້ Android, ໃຫ້ໃສ່ລະຫັດ PIN ຂອງທ່ານ"</string>
<string name="enter_pattern" msgid="4187435713036808566">"ເພີ່ມເລີ່ມຕົ້ນໃຊ້ Android, ໃຫ້ແຕ້ມຮູບແບບປົດລອກຂອງທ່ານ"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"ມືຖື"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ການນຳໃຊ້ຂໍ້ມູນ"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"ການຕັ້ງຄ່າຫ້າມລົບກວນ"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ບຸລິມະສິດເທົ່ານັ້ນທີ່ອະນຸຍາດ"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ຫ້າມລົບກວນ"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ພຶດຕິກຳ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ອະນຸຍາດສຽງ ແລະ ການສັ່ນເຕືອນຈາກ"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"ຕັ້ງກົດຂອງການຫ້າມລົບກວນ"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ຈຳກັດສຽງ ແລະ ການສັ່ງໃນບາງເວລາ"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"ສຽງໂມງປຸກແມ່ນມີຄວາມສຳຄັນສະເໝີ ແລະ ຈະເປີດສຽງເຕືອນ"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ຜູ້ໂທທີ່ເລືອກໄວ້"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"ຜູ້ໂທຊ້ຳໆ"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"ອະນຸຍາດໃຫ້ຮັບສາຍໄດ້ຖ້າຄົນດຽວກັນໂທຊ້ຳໃນ <xliff:g id="MINUTES">%d</xliff:g> ນາທີ"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"ຫາກຄົນດຽວກັນໂທເທື່ອທີສອງພາຍໃນໄລຍະເວລາ <xliff:g id="MINUTES">%d</xliff:g> ນາທີ"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"ເປີດໂດຍອັດຕະໂນມັດ"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ບໍ່ໃຊ້"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ທຸກທ່ຽງຄືນ"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"ເມື່ອໜ້າຈໍປິດຢູ່"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"ເມື່ອໜ້າຈໍເປີດ ຫຼື ປິດຢູ່"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"ໃສ່ລະຫັດ PIN ຜູ້ເບິ່ງແຍງລະບົບ"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ເປີດ"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"ສາມາດແກ້ໄຂການຕັ້ງຄ່າລະບົບໄດ້"</string>
<string name="write_system_settings" msgid="3482913590601096763">"ແກ້ໄຂການຕັ້ງຄ່າລະບົບ"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"ການອະນຸຍາດແອັບແກ້ໄຂການຕັ້ງຄ່າລະບົບ"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"ອະນຸຍາດແກ້ໄຂການຕັ້ງຄ່າລະບົບ"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"ອະນຸຍາດໃຫ້ແກ້ໄຂການຕັ້ງຄ່າລະບົບໄດ້"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ການອະນຸຍາດນີ້ອະນຸຍາດໃຫ້ແອັບດັດແປງການຕັ້ງຄ່າລະບົບໄດ້."</string>
<string name="write_settings_on" msgid="8230580416068832239">"ແມ່ນແລ້ວ"</string>
<string name="write_settings_off" msgid="5156104383386336233">"ບໍ່"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"ລອງເບິ່ງແທັບເລັດໃໝ່ຂອງທ່ານ"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"ລອງເບິ່ງອຸປະກອນໃໝ່ຂອງທ່ານ"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ຄຸນສົມບັດນີ້ບໍ່ສາມາດໃຊ້ໄດ້ໃນອຸປະກອນນີ້ໄດ້"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"ສະຖານະການລົງທະບຽນ IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"ລົງທະບຽນແລ້ວ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ບໍ່ໄດ້ລົງທະບຽນ"</string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 10f3e96..13d34a1 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"„Wi-Fi“ MAC adresas"</string>
<string name="status_bt_address" msgid="4195174192087439720">"„Bluetooth“ adresas"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serijos numeris"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Užimta"</string>
<string name="status_up_time" msgid="7294859476816760399">"Veikimo laikas"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Veikimo laikas"</string>
<string name="internal_memory" msgid="9129595691484260784">"Vidinė atmint."</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Negalima sinchronizuoti neautomatiškai"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Šiuo metu šio elemento sinchronizavimas neleidžiamas. Jei norite pakeisti šį nustatymą, laikinai įjunkite foninius duomenis ir automatinį sinchronizavimą."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC adresas"</string>
<string name="enter_password" msgid="8035706727471334122">"Jei norite paleisti „Android“, įveskite slaptažodį"</string>
<string name="enter_pin" msgid="5305333588093263790">"Jei norite paleisti „Android“, įveskite PIN kodą"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Jei norite paleisti „Android“, nupieškite savo šabloną"</string>
@@ -2793,6 +2790,7 @@
<item quantity="many">Rodyti %d paslėpto elemento</item>
<item quantity="other">Rodyti %d paslėptų elementų</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Sutraukti"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Tinklas ir internetas"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilusis"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"duomenų naudojimas"</string>
@@ -2897,8 +2895,14 @@
<item quantity="many"><xliff:g id="ON_COUNT">%d</xliff:g> automatinės taisyklės įjungta</item>
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automatinių taisyklių įjungta</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Netrukdymo režimo nuostatos"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Tik pagal prioritetą"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Netrukdymo režimas"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Elgsena"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Leisti garsus ir vibravimą iš"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Nėra garso"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Nėra garso (visiška tyla)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Nėra garso, išskyrus <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">"Automatinės taisyklės"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Nustatyti netrukdymo režimo taisykles"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Apriboti garsus ir vibravimą tam tikru metu"</string>
@@ -3082,13 +3086,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Tik iš žvaigždutėmis pažymėtų kontaktų"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Nėra"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Signalai"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Įsp. visada yra priorit. ir apie juos pran. garsu"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Priminimai"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Įvykiai"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Visi skambintojai"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Pasirinkti skambintojai"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Pakartotinai skambinantys"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Jei asmuo skambina antrą kartą per <xliff:g id="MINUTES">%d</xliff:g> min. laikotarpį, leisti skambutį"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Jei asmuo skambina antrą kartą per <xliff:g id="MINUTES">%d</xliff:g> min. laikotarpį"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Automatiškai įjungti"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Niekada"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Kiekvieną naktį"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kai ekranas išjungtas"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kai ekranas įjungtas arba išjungtas"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Įspėjimų nustatymai"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Gerai"</string>
<string name="device_feedback" msgid="3238056036766293294">"Siųsti atsiliepimą apie šį įrenginį"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Įveskite administratoriaus PIN kodą"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Įjungta"</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Gali keisti sistemos nustatymus"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Keisti sistemos nustatymus"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Programos leidimas keisti sistemos nustatymus"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Leisti keisti sistemos nustatymus"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Leisti keisti sistemos nustatymus"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Programai bus leidžiama keisti sistemos nustatymus."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Taip"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ne"</string>
@@ -3487,8 +3493,8 @@
<string name="color_temperature" msgid="2070126836910615605">"Šaltų spalvų temperatūra"</string>
<string name="color_temperature_desc" msgid="4793729830226404052">"Naudoti šaltesnes ekrano spalvas"</string>
<string name="color_temperature_toast" msgid="4974218172133854827">"Kad pritaikytumėte spalvos pakeitimą, išjunkite ekraną"</string>
- <string name="connectivity_monitor_switch" msgid="9059759348648583421">"Ryšio stebėjimo priemonė"</string>
- <string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"Ryšio stebėjimo priemonė rinks žurnalus, kai aptiks ryšio problemą, ir naudotojui pateiks raginimą pranešti apie riktą"</string>
+ <string name="connectivity_monitor_switch" msgid="9059759348648583421">"Connectivity Monitor"</string>
+ <string name="connectivity_monitor_switch_summary" msgid="2828658652378866401">"„ConnectivityMonitor“ rinks žurnalus, kai aptiks ryšio problemą, ir naudotojui pateiks raginimą pranešti apie riktą"</string>
<string name="connectivity_monitor_toast" msgid="5551859612881173028">"Kad pritaikytumėte ryšio stebėjimo priemonės pakeitimą, paleiskite įrenginį iš naujo"</string>
<string name="camera_hal_hdrplus_switch" msgid="8377365197105267466">"Fotoaparatas HAL HDR+"</string>
<string name="camera_hal_hdrplus_toast" msgid="2063703797270055299">"Kad pritaikytumėte fotoaparato HAL HDR+ pakeitimą, paleiskite įrenginį iš naujo"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Peržiūrėkite naujo planšetinio kompiuterio apžvalgą"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Peržiūrėkite naujo įrenginio apžvalgą"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ši funkcija nepasiekiama šiame įrenginyje"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registracijos būsena"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Užregistruota"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neužregistruota"</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 722769c..8dd08a1 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -1172,7 +1172,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC adrese"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth adrese"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Sērijas numurs"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nepieejams"</string>
<string name="status_up_time" msgid="7294859476816760399">"Darbības laiks"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Nomoda laiks"</string>
<string name="internal_memory" msgid="9129595691484260784">"Iekšējā krātuve"</string>
@@ -2370,8 +2369,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nevar sinhronizēt manuāli"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Pašlaik ir atspējota šī vienuma sinhronizācija. Lai mainītu šo iestatījumu, īslaicīgi ieslēdziet fona datu lietojumu un automātisko sinhronizāciju."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC adrese"</string>
<string name="enter_password" msgid="8035706727471334122">"Lai startētu Android ierīci, ievadiet savu paroli"</string>
<string name="enter_pin" msgid="5305333588093263790">"Lai startētu Android ierīci, ievadiet savu PIN kodu"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Lai startētu Android ierīci, uzzīmējiet savu kombināciju"</string>
@@ -2767,6 +2764,7 @@
<item quantity="one">Rādīt %d slēptu vienumu</item>
<item quantity="other">Rādīt %d slēptus vienumus</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Sakļaut"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Tīkls un internets"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilais tīkls"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"datu lietojums"</string>
@@ -2870,8 +2868,14 @@
<item quantity="one">Ieslēgta <xliff:g id="ON_COUNT">%d</xliff:g> automātiskā kārtula</item>
<item quantity="other">Ieslēgtas <xliff:g id="ON_COUNT">%d</xliff:g> automātiskās kārtulas</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"“Netraucēt” preferences"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Tikai prioritārie"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Netraucēt"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Rīcība"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Atļaut skaņas un vibrāciju no"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Bez skaņas"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Bez skaņas (pilnīgs klusums)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Bez skaņas, izņemot <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">"Autom. kārtulas"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"“Netraucēt” kārtulu iestatīšana"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ierobežot skaņu un vibrāciju noteiktā laikā"</string>
@@ -3051,13 +3055,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Tikai no kontaktpersonām ar zvaigznīti"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Nav"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Signāli"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Signāliem vienmēr ir prioritāte un skaņa"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Atgādinājumi"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Notikumi"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Visi zvanītāji"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Atlasīti zvanītāji"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Atkārtoti zvani"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Atļaut, ja viena un tā pati persona zvana <xliff:g id="MINUTES">%d</xliff:g> minūšu periodā"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ja tā pati persona <xliff:g id="MINUTES">%d</xliff:g> minūšu laikā zvana vēlreiz"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Automātiski ieslēgt"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nekad"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Katru nakti"</string>
@@ -3088,6 +3093,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kad ekrāns ir izslēgts"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kad ekrāns ir ieslēgts vai izslēgts"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Paziņojumu iestatījumi"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Labi"</string>
<string name="device_feedback" msgid="3238056036766293294">"Sūtīt atsauksmes par šo ierīci"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Ievadiet administratora PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Ieslēgts"</string>
@@ -3346,7 +3352,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Var pārveidot sistēmas iestatījumus"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Iestatījumu pārveidošana"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Atļauja lietotnei pārveidot sistēmas iestatījumus"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Atļaut pārveidot sistēmas iestatījumus"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Atļaut pārveidot sistēmas iestatījumus"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Ar šo atļauju lietotnes var pārveidot sistēmas iestatījumus."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Jā"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nē"</string>
@@ -3783,7 +3789,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Apskatiet savu jauno planšetdatoru"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Apskatiet savu jauno ierīci"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Šī funkcija šajā ierīcē nav pieejama."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS reģistrācijas statuss"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Reģistrēts"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Nav reģistrēts"</string>
</resources>
diff --git a/res/values-mcc262-mnc02-gl/strings.xml b/res/values-mcc262-mnc02-gl/strings.xml
index 2c70218..d67c86f 100644
--- a/res/values-mcc262-mnc02-gl/strings.xml
+++ b/res/values-mcc262-mnc02-gl/strings.xml
@@ -16,5 +16,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_calling_off_explanation_2" msgid="741028819102506783">\n\n"Non podes facer chamadas de emerxencia mediante as chamadas por wifi. Se tentas realizar unha chamada de emerxencia, o dispositivo utilizará automaticamente a rede móbil. As chamadas de emerxencia só se poden facer en zonas con cobertura de rede de telefonía móbil."</string>
+ <string name="wifi_calling_off_explanation_2" msgid="741028819102506783">\n\n"Non podes facer chamadas de urxencia mediante as chamadas por wifi. Se tentas realizar unha chamada de urxencia, o dispositivo utilizará automaticamente a rede móbil. As chamadas de urxencia só se poden facer en zonas con cobertura de rede de telefonía móbil."</string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index 81cc00a..04943fe 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Адреса на MAC за Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Адреса на Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Сериски број"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Недостапен"</string>
<string name="status_up_time" msgid="7294859476816760399">"Време од последно рестартирање"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Време на активност"</string>
<string name="internal_memory" msgid="9129595691484260784">"Внатрешен капацитет"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Не може рачно да се синхронизира"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Синхронизирањето за оваа ставка е моментално оневозможено. За да го промените ова подесување, привремено вклучете податоци во заднина и автоматско синхронизирање."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC адреса"</string>
<string name="enter_password" msgid="8035706727471334122">"За да стартувате Android, внесете ја лозинката"</string>
<string name="enter_pin" msgid="5305333588093263790">"За да стартувате Android, внесете го PIN-кодот"</string>
<string name="enter_pattern" msgid="4187435713036808566">"За да стартувате Android, внесете ја шемата"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"мобилна"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"потрошен сообраќај"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"Поставки за „Не вознемирувај“"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Дозволува само приоритетно"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Не вознемирувај"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Однесување"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Дозволете звуци и вибрации од"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Правила за „Не вознемирувај“"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ограничете звуци и вибрации"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Алармите секогаш се приоритетни и со звук"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Избрани повикувачи"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Редовни повикувачи"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Доколку истото лице повикува по втор пат во период од <xliff:g id="MINUTES">%d</xliff:g> минути, дозволете"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Доколку истото лице повикува по втор пат во период од <xliff:g id="MINUTES">%d</xliff:g> минути"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Вклучи автоматски"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Никогаш"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Секоја ноќ"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Кога екранот е исклучен"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Кога екранот е вклучен или исклучен"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Внесете PIN на админстратор"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Вклучено"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Може да ги менува поставките на системот"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Менување поставки на системот"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Дозвола на апликација за менување поставки на систем"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Дозволи менување на поставките на системот"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Дозволи менување на поставките на системот"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Оваа дозвола овозможува апликацијата да менува поставки на системот."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Да"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Не"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Запознајте се со новиот таблет"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Запознајте се со новиот уред"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Функцијава не е достапна на овој уред"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Состојба на IMS-регистрација"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Регистриран"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не е регистриран"</string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index efa3a6a..b925370 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"വൈഫൈ MAC വിലാസം"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ബ്ലൂടൂത്ത് വിലാസം"</string>
<string name="status_serial_number" msgid="2257111183374628137">"സീരിയല് നമ്പര്"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"ലഭ്യമല്ല"</string>
<string name="status_up_time" msgid="7294859476816760399">"പ്രവർത്തിക്കുന്ന സമയം"</string>
<string name="status_awake_time" msgid="2393949909051183652">"സജീവമായിരിക്കുന്ന സമയം"</string>
<string name="internal_memory" msgid="9129595691484260784">"ആന്തരിക സ്റ്റോറേജ്"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"വിരലടയാളത്തിന്, പാസ്വേഡ് സജ്ജമാക്കൂ"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"വിരലടയാളത്തിന്, പാറ്റേൺ സജ്ജമാക്കൂ"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"സുരക്ഷയ്ക്കായി, ഒരു പിൻ സജ്ജമാക്കുക"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"വിരലടയാളം ഉപയോഗിക്കാൻ, പിൻ സജ്ജീകരിക്കുക"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"സുരക്ഷയ്ക്കായി, ഒരു പാറ്റേൺ സജ്ജീകരിക്കുക"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"സ്വമേധയാ സമന്വയിപ്പിക്കാനായില്ല"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"ഈ ഇനത്തിനായുള്ള സമന്വയം നിലവിൽ പ്രവർത്തനരഹിതമാണ്. ഈ ക്രമീകരണം മാറ്റുന്നതിന്, പശ്ചാത്തല ഡാറ്റയും യാന്ത്രിക സമന്വയവും താൽക്കാലികമായി ഓണാക്കുക."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC വിലാസം"</string>
<string name="enter_password" msgid="8035706727471334122">"Android ആരംഭിക്കുന്നതിന്, നിങ്ങളുടെ പാസ്വേഡ് നൽകുക"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android ആരംഭിക്കുന്നതിന്, നിങ്ങളുടെ പിൻ നൽകുക"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android ആരംഭിക്കുന്നതിന്, നിങ്ങളുടെ പാറ്റേൺ വരയ്ക്കുക"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"മൊബൈല്"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ഡാറ്റ ഉപയോഗം"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"\'ശല്യപ്പെടുത്തരുത്\' മുൻഗണന"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"മുൻഗണനയുള്ളവ മാത്രം"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ശല്യം ചെയ്യരുത്"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"പ്രവർത്തനരീതി"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ഇനിപ്പറയുന്നതിൽ നിന്നുള്ള ശബ്ദങ്ങളും അലാറമുകളും അനുവദിക്കുക"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"\'ശല്യപ്പെടുത്തരുത്\' നിയമങ്ങൾ സജ്ജമാക്കുക"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ചില സമയത്ത് ശബ്ദവും വൈബ്രേഷനും പരിമിതപ്പെടുത്തുക"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"അലാറങ്ങൾക്ക് എപ്പോഴും മുൻഗണന നൽകി ശബ്ദം കേൾപ്പിക്കുന്നു"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"തിരഞ്ഞെടുത്ത കോളർമാർ"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"ആവർത്തിച്ച് വിളിക്കുന്നവർ"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"<xliff:g id="MINUTES">%d</xliff:g> മിനിറ്റിനുള്ളിൽ ഒരേ വ്യക്തി തന്നെ രണ്ടാമതും വിളിക്കുകയാണെങ്കിൽ, അത് അനുവദിക്കുക"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"<xliff:g id="MINUTES">%d</xliff:g> മിനിറ്റ് കാലയളവിനുള്ളിൽ അതേ വ്യക്തി രണ്ടാമതൊരു തവണ വിളിക്കുകയാണെങ്കിൽ"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"ഓട്ടോമാറ്റിക്കായി ഓണാക്കുക"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ഒരിക്കലും"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"എല്ലാ രാത്രിയും"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"സ്ക്രീൻ ഓഫായിരിയ്ക്കുമ്പോൾ"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"സ്ക്രീൻ ഓണോ ഓഫോ ആയിരിക്കുമ്പോൾ"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"അഡ്മിൻ പിൻ നൽകുക"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ഓണാക്കുക"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"സിസ്റ്റം ക്രമീകരണം പരിഷ്കരിക്കാൻ കഴിയും"</string>
<string name="write_system_settings" msgid="3482913590601096763">"സിസ്റ്റം ക്രമീകരണങ്ങൾ പരിഷ്ക്കരിക്കുക"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"സിസ്റ്റം ക്രമീകരണ അനുമതിയെ ആപ്പ് പരിഷ്കരിക്കുന്നു"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"സിസ്റ്റം ക്രമീകരണം പരിഷ്കരിക്കുന്നത് അനുവദിക്കുക"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"സിസ്റ്റം ക്രമീകരണം മാറ്റാൻ അനുവദിക്കുക"</string>
<string name="write_settings_description" msgid="6868293938839954623">"സിസ്റ്റം ക്രമീകരണം പരിഷ്കരിക്കുന്നതിന് ഒരു ആപ്പിനെ ഈ അനുമതി അനുവദിക്കുന്നു."</string>
<string name="write_settings_on" msgid="8230580416068832239">"അതെ"</string>
<string name="write_settings_off" msgid="5156104383386336233">"ഇല്ല"</string>
@@ -3405,7 +3409,7 @@
<string name="color_temperature_toast" msgid="4974218172133854827">"വർണ്ണ മാറ്റം ബാധകമാക്കാൻ, സ്ക്രീൻ ഓഫാക്കുക"</string>
<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="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>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"നിങ്ങളുടെ പുതിയ ടാബ്ലെറ്റിനെ അറിയുക"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"നിങ്ങളുടെ പുതിയ ഉപകരണത്തെ അറിയുക"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ഈ ഫീച്ചർ ഈ ഉപകരണത്തിൽ ലഭ്യമല്ല"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS രജിസ്ട്രേഷൻ നില"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"രജിസ്റ്റർ ചെയ്തു"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"രജിസ്റ്റർ ചെയ്തിട്ടില്ല"</string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 3b6ec2f..dbb74d1 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC хаяг"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth хаяг"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Сериалын дугаар"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Байхгүй"</string>
<string name="status_up_time" msgid="7294859476816760399">"Асаалттай байсан хугацаа"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Идэвхтэй байх хугацаа"</string>
<string name="internal_memory" msgid="9129595691484260784">"Дотоод сан"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Гараар синк хийх боломжгүй"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Энэ зүйлийн синкийг одоогоор идэвхгүйжүүлсэн байна. Тохиргоог өөрчлөхийн тулд далд дата болон автомат синкийг түр идэвхжүүлнэ үү."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC хаяг"</string>
<string name="enter_password" msgid="8035706727471334122">"Андройдыг эхлүүлэхийн тулд нууц үгээ оруулна уу"</string>
<string name="enter_pin" msgid="5305333588093263790">"Андройдыг эхлүүлэхийн тулд PIN оруулна уу"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Андройдыг эхлүүлэхийн тулд хээгээ зурна уу"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"мобайл"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"дата ашиглалт"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"Бүү саад бол сонголт"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Зөвхөн хамгийн чухал гэснийг зөвшөөрнө"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Бүү саад бол"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Тохиргоо"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Дуу, чичиргээг дараахаас зөвшөөрөх"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Бүү саад бол дүрмийг тохируулах"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Дуу, чичиргээг тодорхой хугацаагаар хязгаарлах"</string>
@@ -3018,13 +3022,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Сэрүүлгийг тогтмол чухалчилж дуугаргана"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Сонгосон дуудлага хийгч"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Давтан дуудлага хийгч"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Хэрэв нэг хүн <xliff:g id="MINUTES">%d</xliff:g> минутын дотор хоёр дахь удаагаа дуудлага хийвэл үүнийг хүлээн авна."</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Хэрэв нэг хүн <xliff:g id="MINUTES">%d</xliff:g> минутын дотор хоёр дахь удаагаа дуудлага хийвэл"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Автоматаар асаах"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Хэзээ ч үгүй"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Шөнө бүр"</string>
@@ -3053,6 +3058,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Дэлгэц унтарсан үед"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Дэлгэц асаалттай буюу унтраалттай үед"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Админы ПИН-г оруулах"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Идэвхтэй"</string>
@@ -3304,7 +3310,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Системийн тохиргоо өөрчилж болно"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Системийн тохиргоог өөрчлөх"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Апп-ын системийн тохиргоо өөрчлөх зөвшөөрөл"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Системийн тохиргоо өөрчлөхийг зөвшөөрөх"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Системийн тохиргоог өөрчлөхийг зөвшөөрөх"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Энэ нь апп-д системийн тохиргоог өөрчлөхийг зөвшөөрдөг."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Тийм"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Үгүй"</string>
@@ -3725,7 +3731,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Шинэ таблеттай танилцах"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Шинэ төхөөрөмжтэй танилцах"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Энэ онцлог энэ төхөөрөмжид боломжгүй"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS бүртгэлийн байдал"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Бүртгэсэн"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Бүртгээгүй"</string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 25c80a0..15cd3ec 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"वाय-फाय MAC पत्ता"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ब्लूटूथ पत्ता"</string>
<string name="status_serial_number" msgid="2257111183374628137">"सीरीअल नंबर"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"अनुपलब्ध"</string>
<string name="status_up_time" msgid="7294859476816760399">"चालू असल्याचा कालावधी"</string>
<string name="status_awake_time" msgid="2393949909051183652">"सक्रिय वेळ"</string>
<string name="internal_memory" msgid="9129595691484260784">"अंतर्गत स्टोरेज"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"फिंगरप्रिंट वापरासाठी, पासवर्ड सेट करा"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"फिंगरप्रिंट वापरासाठी, पॅटर्न सेट करा"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"सुरक्षिततेसाठी पिन सेट करा"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"फिंगरप्रिंट वापरण्यासाठी, पिन सेट करा"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"सुरक्षिततेसाठी, एक पॅटर्न सेट करा"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"व्यक्तिचलितपणे संकालन करू शकत नाही"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"या आयटमसाठी सध्या सिंक अक्षम केले आहे. हे सेटिंग बदलण्यासाठी, पार्श्वभूमीवरील डेटा आणि आपोआप होणारे सिंक तात्पुरते चालू करा."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC पत्ता"</string>
<string name="enter_password" msgid="8035706727471334122">"Android प्रारंभ करण्यासाठी, आपला संकेतशब्द प्रविष्ट करा"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android प्रारंभ करण्यासाठी, आपला पिन प्रविष्ट करा"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android प्रारंभ करण्यासाठी, आपल्या नमुन्याची रेखाटणी करा"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"मोबाइल"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"डेटा वापर"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"व्यत्यय आणू नका प्राधान्ये"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"केवळ प्राधान्यला अनुमती देते"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"व्यत्यय आणू नका"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"वर्तन"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"यांचे ध्वनी आणि व्हायब्रेशन राहू द्या"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"व्यत्यय आणू नका नियम सेट करा"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"विशिष्ट वेळी ध्वनी आणि कंपने मर्यादित करा"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"अलार्म नेहमी प्राधान्य दिलेले असतात आणि आवाज करतात"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"निवडलेले कॉलर"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"नियमित कॉलर"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"एखादी व्यक्ती <xliff:g id="MINUTES">%d</xliff:g> मिनिटांत दुसर्याांदा कॉल करत असेल तर, त्यास अनुमती द्या"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"एकाच व्यक्तीने <xliff:g id="MINUTES">%d</xliff:g> मिनिटांच्या आत दुसर्या वेळी कॉल केल्यास"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"स्वयंचलितपणे चालू करा"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"कधीही नाही"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"प्रत्येक रात्री"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"स्क्रीन बंद असताना"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"स्क्रीन चालू किंवा बंद असताना"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"प्रशासक पिन एंटर करा"</string>
<string name="switch_on_text" msgid="1124106706920572386">"चालू"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"सिस्टीम सेटिंग्ज सुधारित करू शकतात"</string>
<string name="write_system_settings" msgid="3482913590601096763">"सिस्टम सेटिंग्ज सुधारित करा"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"अॅप सिस्टीम सेटिंग्ज परवानगी सुधारित करतो"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"सिस्टीम सेटिंग्ज सुधारित करण्याची अनुमती द्या"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"सिस्टम सेटिंग्ज सुधारण्याची अनुमती द्या"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ही परवानगी अॅपला सिस्टम सेटिंग्ज सुधारित करण्याची अनुमती देते."</string>
<string name="write_settings_on" msgid="8230580416068832239">"होय"</string>
<string name="write_settings_off" msgid="5156104383386336233">"नाही"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"तुमच्या नवीन टॅबलेटबद्दल माहिती देणार्या सफरीवर चला"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"तुमच्या नवीन डीव्हाइसबद्दल माहिती देणार्या सफरीवर चला"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"हे वैशिष्ट्य या डिव्हाइसवर उपलब्ध नाही"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS नोंदणी स्थिती"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"नोंदवलेले"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"नोंदवलेले नाही"</string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index bb9e419..9ff1e0b 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Alamat MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Alamat Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Nombor siri"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Tidak tersedia"</string>
<string name="status_up_time" msgid="7294859476816760399">"Masa hidup"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Masa berjaga"</string>
<string name="internal_memory" msgid="9129595691484260784">"Storan dalaman"</string>
@@ -1470,10 +1469,8 @@
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Memuatkan..."</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"Tetapkan kunci skrin"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"Sebagai langkah keselamatan, tetapkan kata laluan"</string>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Utk mnggnakan cap jari, ttpkn kta laluan"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Utk menggunakan cap jari, tetapkan corak"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Sebagai langkah keselamatan, tetapkan PIN"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Untuk menggunakan cap jari, tetapkan PIN"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Sebagai langkah keselamatan, tetapkan corak"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Tidak boleh menyegerakkan secara manual"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Penyegerakan untuk item ini dilumpuhkan pada masa ini. Untuk menukar tetapan ini, hidupkan data latar belakang dan penyegerakan automatik buat sementara waktu."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Alamat MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Untuk memulakan Android, masukkan kata laluan anda"</string>
<string name="enter_pin" msgid="5305333588093263790">"Untuk memulakan Android, masukkan PIN anda"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Untuk memulakan Android, lukis corak anda"</string>
@@ -2743,6 +2738,7 @@
<item quantity="other">Tunjukkan %d item yang tersembunyi</item>
<item quantity="one">Tunjukkan %d item yang tersembunyi</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Runtuhkan"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Rangkaian & Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mudah alih"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"penggunaan data"</string>
@@ -2845,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> peraturan automatik dihidupkan</item>
<item quantity="one">1 peraturan automatik dihidupkan</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Pilihan Jangan Ganggu"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Benarkan keutamaan sahaja"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Jangan Ganggu"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Gelagat"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Benarkan bunyi & getaran drp"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Tiada bunyi"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Tiada bunyi (Senyap Sepenuhnya)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Tiada bunyi kecuali <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">"Peraturan automatik"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Ttpkan peraturan Jangan Ganggu"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Hadkan bunyi & getaran pada masa tertentu"</string>
@@ -3022,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Daripada kenalan dibintangkan sahaja"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Tiada"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Penggera"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Penggera sentiasa dianggap keutamaan dan berbunyi"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Peringatan"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Acara"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Semua pemanggil"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Pemanggil dipilih"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Pemanggil berulang"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Jika orang yang sama memanggil sekali lagi dalam tempoh <xliff:g id="MINUTES">%d</xliff:g> minit, benarkannya"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Jika orang yang sama memanggil sekali lagi dalam tempoh <xliff:g id="MINUTES">%d</xliff:g> minit"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Hidupkan secara automatik"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Jangan sekali-kali"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Setiap malam"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Apabila skrin dimatikan"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Apabila skrin dihidupkan atau dimatikan"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Tetapan pemberitahuan"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Hntr mklm balas mngenai peranti ini"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Masukkan PIN pentadbir"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Dihidupkan"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Boleh mengubah suai tetapan sistem"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Ubah suai tetapan sistem"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Kebenaran apl mengubah suai tetapan sistem"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Benarkan pengubahsuaian tetapan sistem"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Benarkan pengubahsuaian tetapan sistem"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Kebenaran ini membolehkan apl mengubah suai tetapan sistem."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ya"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Tidak"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Teroka tablet baharu anda"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Teroka peranti baharu anda"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Video ini tidak tersedia pada peranti ini"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Keadaan pendaftaran IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Berdaftar"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Tidak didaftarkan"</string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 5b8ea1f..d825be1 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi ၏ MAC လိပ်စာ"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ဘလူးတုသ်လိပ်စာ"</string>
<string name="status_serial_number" msgid="2257111183374628137">"စက်မှတ်ပုံတင်နံပါတ်"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"မရရှိနိုင်ပါ။"</string>
<string name="status_up_time" msgid="7294859476816760399">"ဖွင့်ထားသောအချိန်"</string>
<string name="status_awake_time" msgid="2393949909051183652">"ပြန်ပွင့်မည်အချိန်"</string>
<string name="internal_memory" msgid="9129595691484260784">"စက်တွင်း သိုလှောင်ထားမှု"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"ထပ်တူကိုက်ညီရန် လူအားဖြင့်ပြုလုပ်၍မရပါ"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"လက်ရှိဤအရာအား ထပ်တူကိုက်ညီစေရန်ပြုလုပ်မရပါ။ ထိုအပြင်အဆင်အားပြောင်းရန် နောက်ခံဒေတာနှင့် အလိုအလျောက်ထပ်တူကိုက်ညီစေရန်ပြုလုပ်ခြင်းတို့အား ခေတ္တဖွင့်ပါ။"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC၏လိပ်စာ"</string>
<string name="enter_password" msgid="8035706727471334122">"အန်ဒရွိုက်ကို စရန်၊ သင်၏ စကားဝှက်ကို ရိုက်ထည့်ပါ"</string>
<string name="enter_pin" msgid="5305333588093263790">"အန်ဒရွိုက်ကို စရန်၊ သင်၏ PIN ကို ရိုက်ထည့်ပါ"</string>
<string name="enter_pattern" msgid="4187435713036808566">"အန်ဒရွိုက်ကို စရန်၊ သင်၏ ပုံဆွဲပုံစံကို ရေးဆွဲပါ"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"မိုဘိုင်း"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ဒေတာသုံးစွဲမှု"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other">အလိုအလျောက် စည်းမျဉ်း <xliff:g id="ON_COUNT">%d</xliff:g> ခုကို ဖွင့်ထားသည်</item>
<item quantity="one">အလိုအလျောက် စည်းမျဉ်း ၁ ခုကို ဖွင့်ထားသည်</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"မနှောင့်ယှက်ရ ရွေးချယ်မှု"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ဦးစားပေးများသာ ခွင့်ပြုရန်"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"မနှောင့်ယှက်ရ"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"အပြုအမူ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ဤနေရာမှ အသံနှင့် တုန်ခါမှုများကို ခွင့်ပြုပါ-"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"မနှောင့်ယှက်ရ စည်းမျဉ်းထည့်ရန်"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"အချို့အချိန်များ၌ ကန့်သတ်ရန်"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"နှိုးစက်များကို အမြဲတမ်း ဦးစားပေး၍ အသံမြည်ပေးရန်"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ရွေးချယ်ထားသည့် ခေါ်ဆိုသူများ"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"အကြိမ်ကြိမ်ခေါ်ဆိုသူများ"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"<xliff:g id="MINUTES">%d</xliff:g> မိနစ်အတွင်း ဖုန်းထပ်ခေါ်သူကို ခွင့်ပြုမည်။"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"<xliff:g id="MINUTES">%d</xliff:g> မိနစ်အတွင်း တစ်ဦးတည်းက ဖုန်းထပ်ခေါ်လျှင်"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"အလိုအလျောက် ဖွင့်ရန်"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ဘယ်တော့မှ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ညတိုင်း"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"မျက်နှာပြင် ပိတ်ထားစဉ်"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"မျက်နှာပြင်ကို ဖွင့်ထားစဉ် သို့မဟုတ် ပိတ်ထားစဉ်"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"စီမံခန့်ခွဲသူ၏ ပင်နံပါတ်ကို ထည့်ပါ"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ဖွင့်ရန်"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"စနစ်ချိန်ညှိချက်များကို ပြန်ပြင်နိုင်သည်"</string>
<string name="write_system_settings" msgid="3482913590601096763">"စနစ်ဆက်တင်များ ပြန်ပြင်ခြင်း"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"စနစ်ချိန်ညှိချက်များပြန်ပြင်ခြင်း အပ်ဖ်ခွင့်ပြုချက်"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"စနစ်ချိန်ညှိချက်များကို ပြန်ပြင်ရန် ခွင့်ပြုမည်"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"စက်စနစ် ဆက်တင်များကို ပြင်ဆင်ခွင့် ပြုရန်"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ဤခွင့်ပြုချက်သည် အပ်ဖ်ကို စနစ်ချိန်ညှိချက်များအား ပြန်ပြင်ခွင့်ပေးသည်။"</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yes"</string>
<string name="write_settings_off" msgid="5156104383386336233">"No"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"သင်၏တက်ဘလက်အသစ်ကို လေ့လာကြည့်ရှုပါ"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"သင်၏ စက်ပစ္စည်းအသစ်ကို လေ့လာကြည့်ရှုပါ"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ဤဝန်ဆောင်မှုကို ဤစက်ပစ္စည်းတွင် မရရှိနိုင်ပါ"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS မှတ်ပုံတင်ခြင်း အခြေအနေ"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"မှတ်ပုံတင်ထားသည်"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"မှတ်ပုံတင်မထားပါ"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index a48df4b..4bf0b8a 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-adresse for Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-adresse"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serienummer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Ikke tilgjengelig"</string>
<string name="status_up_time" msgid="7294859476816760399">"Oppetid"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Våken tid"</string>
<string name="internal_memory" msgid="9129595691484260784">"Intern lagring"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Kan ikke synkronisere manuelt"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synkronisering for dette elementet er deaktivert. Hvis du vil endre innstillinger, kan du midlertidig slå på bakgrunnsdata og automatisk synkronisering."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-adresse"</string>
<string name="enter_password" msgid="8035706727471334122">"Skriv inn passordet ditt for å starte Android"</string>
<string name="enter_pin" msgid="5305333588093263790">"Skriv inn PIN-koden din for å starte Android"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Tegn mønsteret ditt for å starte Android"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Vis %d skjulte elementer</item>
<item quantity="one">Vis %d skjult element</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Skjul"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Nettverk og Internett"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"databruk"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> automatiske regler er slått på</item>
<item quantity="one">1 automatisk regel er slått på</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Innstillinger for Ikke forstyrr"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioritet tillater bare"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ikke forstyrr"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Atferd"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Tillat lyd og vibrasjoner fra"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ingen lyd"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ingen lyd (total stillhet)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ingen lyd, unntatt <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">"Automatiske regler"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Angi Ikke forstyrr-regler"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Begrens lyd og vibrering til bestemte tider"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Bare fra stjernemerkede kontakter"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Ingen"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmer"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmer er alltid prioritert og avgir lyd"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Påminnelser"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Hendelser"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Alle oppringere"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Utvalgte oppringere"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Gjentatte anrop"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Tillat hvis den samme personen ringer enda en gang innen <xliff:g id="MINUTES">%d</xliff:g> minutter"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Hvis samme person ringer enda en gang innen <xliff:g id="MINUTES">%d</xliff:g> minutter"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Slå på automatisk"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Aldri"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Hver kveld"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Når skjermen er av"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Når skjermen er på eller av"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Varselinnstillinger"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Send tilbakemelding om enheten"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Skriv inn PIN-koden for administrator"</string>
<string name="switch_on_text" msgid="1124106706920572386">"På"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Kan endre systeminnstillingene"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Endre systeminnstillingene"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Apptillatelse til å endre systeminnstillingene"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Tillat endring av systeminnstillingene"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Tillat endring av systeminnstillingene"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Med denne tillatelsen kan apper endre systeminnstillingene."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ja"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nei"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Få en innføring i det nye nettbrettet ditt"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Få en innføring i den nye enheten din"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Denne funksjonen er ikke tilgjengelig på denne enheten"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Tilstand for IMS-registrering"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrert"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ikke registrert"</string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 130e98e..d15f550 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi म्याक ठेगाना"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ब्लुटुथ ठेगाना"</string>
<string name="status_serial_number" msgid="2257111183374628137">"क्रम संख्या"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"अनुपलब्ध"</string>
<string name="status_up_time" msgid="7294859476816760399">"सक्रिय समय"</string>
<string name="status_awake_time" msgid="2393949909051183652">"जाग्ने समय"</string>
<string name="internal_memory" msgid="9129595691484260784">"आन्तरिक भण्डारण"</string>
@@ -1455,7 +1454,7 @@
<string name="safety_and_regulatory_info" msgid="5103161279848427185">"सुरक्षा र नियामक सम्बन्धी मार्गदर्शन"</string>
<string name="copyright_title" msgid="865906688917260647">"प्रतिलिपि अधिकार"</string>
<string name="license_title" msgid="1990487604356037871">"इजाजतपत्र"</string>
- <string name="terms_title" msgid="7697580845616764642">"सेवा सर्तहरू"</string>
+ <string name="terms_title" msgid="7697580845616764642">"सेवाका सर्तहरू"</string>
<string name="webview_license_title" msgid="2813507464175738967">"प्रणाली वेबभ्यु लाइसेन्स"</string>
<string name="wallpaper_attributions" msgid="3645880512943433928">"वालपेपरहरु"</string>
<string name="wallpaper_attributions_values" msgid="2996183537914690469">"स्याटलाइट कल्पना प्रदायकहरू:\n©२०१४ CNES / Astrium, DigitalGlobe, Bluesky"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"फिंगरप्रिन्ट प्रयोग गर्न पासवर्ड सेट गर्नु…"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"फिंगरप्रिन्ट प्रयोग गर्न ढाँचा सेट गर्नु…"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"सुरक्षाका लागि एउटा PIN सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"फिंगरप्रिन्ट प्रयोग गर्न PIN सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"सुरक्षाका लागि कुनै ढाँचा सेट गर्नुहोस्"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"आफैँ सिंक गर्न सकेन।"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"हालका लागि यस वस्तुको सिंक असक्षम पारिएको छ। यस सेटिङलाई परिवर्तन गर्न अस्थायी रूपमा पृष्ठभूमि डेटा र स्वचालित सिंक सक्रिय पार्नुहोस्।"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC ठेगाना"</string>
<string name="enter_password" msgid="8035706727471334122">"Android सुरु गर्न, आफ्नो पासवर्ड प्रविष्ट गर्नुहोस्"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android सुरु गर्न, आफ्नो पिन प्रविष्ट गर्नुहोस्"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android सुरु गर्न, आफ्नो ढाँचा कोर्नुहोस्"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"मोबाइल"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"डेटाको प्रयोग"</string>
@@ -2845,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> स्वचालित नियम सक्रिय गरिए</item>
<item quantity="one">१ स्वचालित नियम सक्रिय गरियो</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"बाधा नपुर्याउनुहोस् मोडका प्राथमिकताहरू"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"प्राथमिकताले मात्र अनुमति दिन्छ"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"बाधा नपुऱ्याउनुहोस्"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"व्यवहार"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"निम्नबाट आउने आवाज र कम्पनहरूलाई अनुमति दिनु"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"बाधा नपुर्याउनुहोस् मोडका नियमहरू सेट गर्नुहोस्"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"निश्चित समयहरूमा आवाज र कम्पनमाथि रोक लगाउनुहोस्"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"अलार्महरू सधैँ प्राथमिक हुन्छन् र तिनीहरूले ध्वनि बजाउँछन्"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"कलरहरू चयन गर्नुहोस्"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"कलरहरू दोरोर्याउनुहोस्"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"यदि एउटै व्यक्तिले <xliff:g id="MINUTES">%d</xliff:g> मिनेट अवधिभित्र दोस्रो पटक कल गर्छ भने यसलाई अनुमति दिनुहोस्।"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"एउटै व्यक्तिले <xliff:g id="MINUTES">%d</xliff:g> मिनेटको अवधिमा दोस्रो पटक कल गरेको खण्डमा"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"स्वचालित रूपमा चालू"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"कहिले पनि होइन"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"हरेक रात"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"स्क्रिन अफ हुँदा"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"स्क्रिन अन वा अफ हुँदा"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"प्रशासकको PIN प्रविष्ट गर्नुहोस्"</string>
<string name="switch_on_text" msgid="1124106706920572386">"सक्रिय गर्नुहोस्"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"प्रणाली सेटिङहरू परिमार्जन गर्न सक्ने"</string>
<string name="write_system_settings" msgid="3482913590601096763">"प्रणाली सेटिङहरू परिमार्जन गर्नुहोस्"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"अनुप्रयोगद्वारा प्रणाली सेटिङहरू अनुमति परिवर्तन"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"प्रणाली सेटिङहरू परिमार्जन गर्न अनुमति"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"प्रणालीका सेटिङहरू परिमार्जन गर्न दिनुहोस्"</string>
<string name="write_settings_description" msgid="6868293938839954623">"यस अनुमतिले अनुप्रयोगलाई प्रणाली सेटिङहरू परिमार्जन गर्न दिन्छ।"</string>
<string name="write_settings_on" msgid="8230580416068832239">"हो"</string>
<string name="write_settings_off" msgid="5156104383386336233">"होइन"</string>
@@ -3731,7 +3735,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"आफ्नो नयाँ ट्याब्लेटको बारेमा राम्रोसँग जान्नुहोस्"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"आफ्नो नयाँ यन्त्रको बारेमा राम्रोसँग जान्नुहोस्"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"यस यन्त्रमा यो सुविधा उपलब्ध छैन"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS दर्ताको स्थिति"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"दर्ता गरिएको"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"दर्ता नगरिएको"</string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f4962df..1da909c 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-adres voor wifi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-adres"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serienummer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Niet beschikbaar"</string>
<string name="status_up_time" msgid="7294859476816760399">"Bedrijfstijd"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Stand-bytijd"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interne opslag"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Kan niet handmatig synchroniseren"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synchroniseren is op dit moment uitgeschakeld voor dit item. Als je deze instelling wilt wijzigen, schakel je achtergrondgegevens en automatisch synchroniseren tijdelijk in."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-adres"</string>
<string name="enter_password" msgid="8035706727471334122">"Geef je wachtwoord op om Android te starten"</string>
<string name="enter_pin" msgid="5305333588093263790">"Geef je pincode op om Android te starten"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Teken je patroon om Android te starten"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Als scherm uit is"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Als scherm aan of uit is"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Instellingen voor meldingen"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Feedback sturen over dit apparaat"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Beheerderspincode invoeren"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Aan"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Kan systeeminstellingen aanpassen"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Systeeminstellingen aanpassen"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"App-machtigingen voor aanpassen van systeeminstellingen"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Aanpassen van systeeminstellingen toestaan"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Aanpassen van systeeminstellingen toestaan"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Met deze rechten kan een app de systeeminstellingen aanpassen."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ja"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nee"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Een rondleiding volgen voor je nieuwe tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Een rondleiding volgen voor je nieuwe apparaat"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Deze functie is niet beschikbaar op dit apparaat"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-registratiestatus"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Geregistreerd"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Niet geregistreerd"</string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 225dade..5b64bb9 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"ਵਾਈ‑ਫਾਈ MAC ਪਤਾ"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ਬਲੂਟੁੱਥ ਪਤਾ"</string>
<string name="status_serial_number" msgid="2257111183374628137">"ਕ੍ਰਮ ਸੰਖਿਆ"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"ਅਣਉਪਲਬਧ"</string>
<string name="status_up_time" msgid="7294859476816760399">"ਅੱਪ ਟਾਈਮ"</string>
<string name="status_awake_time" msgid="2393949909051183652">"ਸਕਿਰਿਆ ਸਮਾਂ"</string>
<string name="internal_memory" msgid="9129595691484260784">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤਣ ਲਈ, ਕੋਈ ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤਣ ਲਈ, ਕੋਈ ਪੈਟਰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"ਸੁਰੱਖਿਆ ਲਈ, ਇੱਕ ਪਿੰਨ ਸਥਾਪਤ ਕਰੋ"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਵਰਤਣ ਲਈ, ਕੋਈ ਪਿੰਨ ਸੈੱਟ ਕਰੋ"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"ਸੁਰੱਖਿਆ ਲਈ, ਕੋਈ ਪੈਟਰਨ ਸੈੱਟ ਕਰੋ"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"ਮੈਨੂਅਲੀ ਸਿੰਕ ਨਹੀਂ ਕਰ ਸਕਦਾ"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"ਇਸ ਆਈਟਮ ਲਈ ਸਿੰਕ ਇਸ ਵੇਲੇ ਅਸਮਰਥਿਤ ਹੈ। ਇਸ ਸੈਟਿੰਗ ਨੂੰ ਬਦਲਣ ਲਈ, ਪਿਛੋਕੜ ਡਾਟਾ ਅਤੇ ਆਟੋਮੈਟਿਕ ਸਿੰਕ ਅਸਥਾਈ ਤੌਰ ਤੇ ਚਾਲੂ ਕਰੋ।"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC ਪਤਾ"</string>
<string name="enter_password" msgid="8035706727471334122">"Android ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ, ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ, ਆਪਣਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ, ਆਪਣਾ ਪੈਟਰਨ ਡ੍ਰਾ ਕਰੋ"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"ਮੋਬਾਈਲ"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ਡਾਟਾ ਵਰਤੋਂ"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਤਰਜੀਹਾਂ"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ਕੇਵਲ ਤਰਜੀਹੀ ਦੀ ਆਗਿਆ ਹੈ"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ਵਰਤਾਅ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ਇਸ ਨੂੰ ਧੁਨੀਆਂ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਕਰਨ ਦਿਓ"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਨਿਯਮ ਸੈੱਟ ਕਰੋ"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ਕੁਝ ਵਿਸ਼ੇਸ਼ ਸਮਿਆਂ \'ਤੇ ਧੁਨੀ ਅਤੇ ਥਰਥਰਾਹਟਾਂ ਸੀਮਤ ਕਰੋ"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"ਅਲਾਰਮ ਸਦਾ ਤਰਜੀਹ ਰੱਖਦੇ ਹਨ ਅਤੇ ਧੁਨੀ ਵਜਾਉਂਦੇ ਹਨ"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ਚੁਣੇ ਗਏ ਕਾਲਰ"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"ਦੁਬਾਰਾ ਕਾਲ ਕਰਨ ਵਾਲੇ"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"ਜੇਕਰ ਇੱਕੋ ਵਿਅਕਤੀ <xliff:g id="MINUTES">%d</xliff:g> ਮਿੰਟ ਦੇ ਅੰਦਰ ਦੂਜੀ ਵਾਰ ਕਾਲ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਸਨੂੰ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"ਜੇਕਰ ਇੱਕੋ ਵਿਅਕਤੀ <xliff:g id="MINUTES">%d</xliff:g> ਮਿੰਟ ਵਿੱਚ ਦੂਜੀ ਵਾਰ ਕਾਲ ਕਰੇ"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"ਆਟੋਮੈਟਿਕਲੀ ਚਾਲੂ ਕਰੋ"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ਕਦੇ ਵੀ ਨਹੀਂ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ਹਰੇਕ ਰਾਤ ਨੂੰ"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"ਜਦੋਂ ਸਕ੍ਰੀਨ ਬੰਦ ਹੋਵੇ"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"ਜਦੋਂ ਸਕ੍ਰੀਨ ਚਾਲੂ ਜਾਂ ਬੰਦ ਹੋਵੇ"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"ਪ੍ਰਸ਼ਾਸਕ ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ਚਾਲੂ"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ ਸੰਸ਼ੋਧਿਤ ਕਰ ਸਕਦਾ ਹੈ"</string>
<string name="write_system_settings" msgid="3482913590601096763">"ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ ਸੰਸ਼ੋਧਿਤ ਕਰੋ"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"ਐਪ ਨੂੰ ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ ਸੰਸ਼ੋਧਿਤ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ ਸੰਸ਼ੋਧਿਤ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿਓ"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ ਸੋਧਣ ਦਿਓ"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ਇਹ ਇਜਾਜ਼ਤ ਇੱਕ ਐਪ ਨੂੰ ਸਿਸਟਮ ਸੈਟਿੰਗਾਂ ਸੰਸ਼ੋਧਿਤ ਕਰਨ ਲਈ ਆਗਿਆ ਦਿੰਦੀ ਹੈ।"</string>
<string name="write_settings_on" msgid="8230580416068832239">"ਹਾਂ"</string>
<string name="write_settings_off" msgid="5156104383386336233">"ਨਹੀਂ"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"ਆਪਣਾ ਨਵਾਂ ਟੈਬਲੈੱਟ ਵਰਤਣ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Take a tour of your new device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS ਰਜਿਸਟਰੇਸ਼ਨ ਸਥਿਤੀ"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"ਰਜਿਸਟਰ ਕੀਤੀ ਗਈ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 126c192..4db0297 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -615,7 +615,7 @@
<string name="lockpattern_tutorial_cancel_label" msgid="6431583477570493261">"Anuluj"</string>
<string name="lockpattern_tutorial_continue_label" msgid="3559793618653400434">"Dalej"</string>
<string name="lock_setup" msgid="3355847066343753943">"Konfiguracja została ukończona."</string>
- <string name="manage_device_admin" msgid="537804979483211453">"Aplikacje do administrowania urządzeniem"</string>
+ <string name="manage_device_admin" msgid="537804979483211453">"Aplikacje do zarządzania urządzeniem"</string>
<string name="number_of_device_admins_none" msgid="7185056721919496069">"Brak aktywnych aplikacji"</string>
<plurals name="number_of_device_admins" formatted="false" msgid="3361891840111523393">
<item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> aktywne aplikacje</item>
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adres MAC karty Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adres Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Numer seryjny"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Niedostępny"</string>
<string name="status_up_time" msgid="7294859476816760399">"Czas działania"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Czas działania (włączony)"</string>
<string name="internal_memory" msgid="9129595691484260784">"Pamięć wewnętrzna"</string>
@@ -2295,7 +2294,7 @@
<string name="remove_device_admin" msgid="9207368982033308173">"Dezaktywuj tę aplikację do administrowania urządzeniem"</string>
<string name="uninstall_device_admin" msgid="271120195128542165">"Odinstaluj aplikację"</string>
<string name="remove_and_uninstall_device_admin" msgid="3837625952436169878">"Dezaktywuj i odinstaluj"</string>
- <string name="select_device_admin_msg" msgid="7347389359013278077">"Aplikacje do administrowania urządzeniem"</string>
+ <string name="select_device_admin_msg" msgid="7347389359013278077">"Aplikacje do zarządzania urządzeniem"</string>
<string name="no_device_admins" msgid="4846602835339095768">"Brak dostępnych aplikacji do administrowania urządzeniem"</string>
<string name="personal_device_admin_title" msgid="2849617316347669861">"Osobiste"</string>
<string name="managed_device_admin_title" msgid="7853955652864478435">"Praca"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nie można zsynchronizować ręcznie"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synchronizacja tego elementu jest obecnie wyłączona. Aby zmienić ustawienie, tymczasowo włącz obsługę danych w tle i automatyczną synchronizację."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adres MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Aby uruchomić Androida, wpisz hasło"</string>
<string name="enter_pin" msgid="5305333588093263790">"Aby uruchomić Androida, wpisz kod PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Aby uruchomić Androida, narysuj wzór"</string>
@@ -2793,6 +2790,7 @@
<item quantity="other">Pokaż %d ukrytego elementu</item>
<item quantity="one">Pokaż %d ukryty element</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Zwiń"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Sieć i internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"sieć komórkowa"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"użycie danych"</string>
@@ -2897,8 +2895,14 @@
<item quantity="other">Włączone <xliff:g id="ON_COUNT">%d</xliff:g> automatycznej reguły</item>
<item quantity="one">Włączona 1 automatyczna reguła</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Ustawienia Nie przeszkadzać"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Tylko priorytetowe"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Nie przeszkadzać"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Działanie"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Zezwól na dźwięki i wibracje z"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Brak dźwięku"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Brak dźwięku (całkowita cisza)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Brak dźwięku oprócz: <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">"Automatyczne reguły"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Ustaw reguły Nie przeszkadzać"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ogranicz dźwięki i wibracje o pewnych porach"</string>
@@ -3082,13 +3086,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Tylko od kontaktów z gwiazdką"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Żadne"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmy"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmy mają zawsze priorytet i są sygnalizowane dźwiękiem"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Przypomnienia"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Wydarzenia"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Wszyscy rozmówcy"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Wybrani rozmówcy"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Dzwoniący powtórnie"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Zezwalaj na połączenie, jeśli ta sama osoba dzwoni po raz drugi w ciągu <xliff:g id="MINUTES">%d</xliff:g> minut"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Jeśli ta sama osoba dzwoni po raz drugi w ciągu <xliff:g id="MINUTES">%d</xliff:g> min"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Włącz automatycznie"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nigdy"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Każdej nocy"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Gdy ekran jest wyłączony"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Gdy ekran jest włączony lub wyłączony"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Ustawienia powiadomień"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Prześlij opinię o tym urządzeniu"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Wpisz kod PIN administratora"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Wł."</string>
@@ -3248,7 +3254,7 @@
<string name="system_app" msgid="9068313769550747372">"(Systemowa)"</string>
<string name="system_default_app" msgid="3091113402349739037">"(Domyślna aplikacja systemu)"</string>
<string name="apps_storage" msgid="4353308027210435513">"Magazyn aplikacji"</string>
- <string name="usage_access" msgid="5479504953931038165">"Dostęp do użytkowania"</string>
+ <string name="usage_access" msgid="5479504953931038165">"Dostęp do danych o użyciu"</string>
<string name="permit_usage_access" msgid="4012876269445832300">"Zezwól na dostęp do użytkowania"</string>
<string name="app_usage_preference" msgid="7065701732733134991">"Ustawienia użycia aplikacji"</string>
<string name="usage_access_description" msgid="1352111094596416795">"Dostęp do użytkowania umożliwia aplikacji śledzenie tego, jakich innych aplikacji i jak często używasz, oraz odczytywanie m.in. informacji o operatorze i ustawień językowych."</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Mogą modyfikować ustawienia systemu"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modyfikowanie ustawień systemu"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Uprawnienie aplikacji do modyfikowania ust. systemu"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Zezwól na modyfikowanie ustawień systemu"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Zezwól na modyfikowanie ustawień systemowych"</string>
<string name="write_settings_description" msgid="6868293938839954623">"To uprawnienie umożliwia aplikacji modyfikowanie ustawień systemu."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Tak"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nie"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Poznaj swój nowy tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Poznaj swoje nowe urządzenie"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ta funkcja jest niedostępna na tym urządzeniu."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stan rejestracji IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Zarejestrowane"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Niezarejestrowane"</string>
</resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 56ab7cd..d1c47cf 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Endereço MAC da rede Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Endereço Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de série"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Não disponível"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tempo de atividade"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Tempo ativo"</string>
<string name="internal_memory" msgid="9129595691484260784">"Armaz. interno"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Não é possível sincronizar manualmente"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"A sincronização para o item está desativada no momento. Para alterar essa configuração, ative os dados de segundo plano e a sincronização automática temporariamente."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Endereço MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Para iniciar o Android, digite sua senha"</string>
<string name="enter_pin" msgid="5305333588093263790">"Para iniciar o Android, digite seu PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Para iniciar o Android, desenhe seu padrão"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Quando a tela está desativada"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Quando a tela estiver ativada ou desativada"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Configurações de notificação"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Enviar feedback sobre o dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Inserir PIN do administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Ativado"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Pode modificar configurações do sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Mudar configurações do sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permissão p/ app modificar configurações do sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permitir modificação de config. do sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permitir modificação de config. do sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Esta permissão permite que um app modifique configurações do sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sim"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Não"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Faça um tour pelo seu novo tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Faça um tour pelo seu novo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Este recurso não está disponível neste dispositivo"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estado do registro de IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Não registrado"</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index b758374..5fe21c5 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Endereço MAC de Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Endereço Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de série"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Indisponível"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tempo de actividade"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Hora de actividade"</string>
<string name="internal_memory" msgid="9129595691484260784">"Armazenamento interno"</string>
@@ -1473,7 +1472,7 @@
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Definir alternativa à impressão digital"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Definir alternativa à impressão digital"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Por motivos de segurança, defina um PIN."</string>
- <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Definir alternativa à impressão digital"</string>
+ <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Para a impressão digital, defina um PIN"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Por motivos de segurança, defina um padrão."</string>
<string name="lockpassword_confirm_your_password_header" msgid="1266027268220850931">"Reintroduzir a palavra-passe"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7543433733032330821">"Confirmar o padrão"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Não é possível sincronizar manualmente"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"A sincronização deste item está atualmente desativada. Para alterar esta definição, ative temporariamente os dados de segundo plano e a sincronização automática."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Endereço MAC de 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Para iniciar o Android, introduza a palavra-passe"</string>
<string name="enter_pin" msgid="5305333588093263790">"Para iniciar o Android, introduza o PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Para iniciar o Android, desenhe o padrão"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Quando o ecrã está desligado"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Quando o ecrã está ligado ou desligado"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Definições de notificações"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Enviar comentários do dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Introduzir o PIN do administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Ativado"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Podem modificar as definições do sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modificar definições sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Autorização da aplicação para mod. def. do sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permitir modificar as definições do sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permitir alteração das definições do sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Esta autorização permite que uma aplicação modifique as definições do sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sim"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Não"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Faça uma visita guiada ao seu novo tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Faça uma visita guiada ao seu novo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Esta funcionalidade não está disponível neste dispositivo."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estado do registo IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registado"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Não registado"</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 56ab7cd..d1c47cf 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Endereço MAC da rede Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Endereço Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Número de série"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Não disponível"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tempo de atividade"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Tempo ativo"</string>
<string name="internal_memory" msgid="9129595691484260784">"Armaz. interno"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Não é possível sincronizar manualmente"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"A sincronização para o item está desativada no momento. Para alterar essa configuração, ative os dados de segundo plano e a sincronização automática temporariamente."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Endereço MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Para iniciar o Android, digite sua senha"</string>
<string name="enter_pin" msgid="5305333588093263790">"Para iniciar o Android, digite seu PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Para iniciar o Android, desenhe seu padrão"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Quando a tela está desativada"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Quando a tela estiver ativada ou desativada"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Configurações de notificação"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Enviar feedback sobre o dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Inserir PIN do administrador"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Ativado"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Pode modificar configurações do sistema"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Mudar configurações do sistema"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permissão p/ app modificar configurações do sistema"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permitir modificação de config. do sistema"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permitir modificação de config. do sistema"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Esta permissão permite que um app modifique configurações do sistema."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Sim"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Não"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Faça um tour pelo seu novo tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Faça um tour pelo seu novo dispositivo"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Este recurso não está disponível neste dispositivo"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Estado do registro de IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrado"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Não registrado"</string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 617fea2..3659ad8 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -1172,7 +1172,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adresă MAC Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adresă Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Număr de serie"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Indisponibilă"</string>
<string name="status_up_time" msgid="7294859476816760399">"Durată de funcționare"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Durată de activitate"</string>
<string name="internal_memory" msgid="9129595691484260784">"Stocare internă"</string>
@@ -2370,8 +2369,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Sincronizarea manuală nu este posibilă"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"În prezent, sincronizarea pentru acest element este dezactivată. Pentru a schimba această setare, activați temporar datele de fundal și sincronizarea automată."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adresă MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Pentru a lansa sistemul de operare Android, introduceți parola"</string>
<string name="enter_pin" msgid="5305333588093263790">"Pentru a lansa sistemul de operare Android, introduceți codul PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Pentru a lansa sistemul de operare Android, desenați șablonul"</string>
@@ -2767,6 +2764,7 @@
<item quantity="other">Afișați %d de elemente ascunse</item>
<item quantity="one">Afișați %d element ascuns</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Restrângeți"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Rețea și internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"rețeaua mobilă"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"utilizarea datelor"</string>
@@ -2870,8 +2868,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> de reguli automate activate</item>
<item quantity="one">1 regulă automată activată</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferințe pentru Nu deranja"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"„Numai cu prioritate” permite"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Nu deranja"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Comportament"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Permiteți sunete și vibrații de la"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Fără sunet"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Fără sunet (Niciun sunet)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Fără sunet, cu excepția <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">"Reguli automate"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Setați regulile pentru Nu deranja"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limitați sunetele și vibrațiile uneori"</string>
@@ -3051,13 +3055,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Doar de la persoanele de contact cu stea"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Niciunul"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarme"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmele sunt mereu prioritare și emit sunete"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Mementouri"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Evenimente"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Toți apelanții"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Apelanți selectați"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Apelanți care revin"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Dacă aceeași persoană apelează a doua oară într-un interval de <xliff:g id="MINUTES">%d</xliff:g> minute, permite apelul"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Dacă aceeași persoană apelează a doua oară într-un interval de <xliff:g id="MINUTES">%d</xliff:g> minute"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Activați automat"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Niciodată"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"În fiecare seară"</string>
@@ -3088,6 +3093,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Când ecranul este dezactivat"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Când ecranul este activat sau dezactivat"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Setări pentru notificări"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Trimiteți feedback despre dispoz."</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Introduceți codul PIN de administrator"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Activat"</string>
@@ -3346,7 +3352,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Pot modifica setările de sistem"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modifică setările de sistem"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Permisiune aplicație modificare setări de sistem"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Permiteți modificarea setărilor de sistem"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Permiteți modificarea setărilor de sistem"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Având această permisiune, o aplicație poate să modifice setările de sistem."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Da"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nu"</string>
@@ -3783,7 +3789,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Faceți un tur al noii dvs. tablete"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Faceți un tur al noului dvs. dispozitiv"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Această caracteristică nu este disponibilă pe acest dispozitiv"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Situația înregistrării IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Înregistrat"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neînregistrat"</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 08e01ea..c4652b1 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-адрес Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Адрес Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Серийный номер"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Недоступно"</string>
<string name="status_up_time" msgid="7294859476816760399">"Время с момента включения"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Время работы"</string>
<string name="internal_memory" msgid="9129595691484260784">"Внутренний накопитель"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Не удалось синхронизировать данные"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Синхронизация отключена. Чтобы включить ее, временно разрешите передачу данных в фоновом режиме и автоматическую синхронизацию."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"МАС-адрес для 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Чтобы запустить Android, введите пароль"</string>
<string name="enter_pin" msgid="5305333588093263790">"Чтобы запустить Android, введите PIN-код"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Чтобы запустить Android, введите графический ключ"</string>
@@ -2793,6 +2790,7 @@
<item quantity="many">Показать %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_summary_mobile" msgid="3851083934739500429">"моб. сети"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"передача данных"</string>
@@ -2897,8 +2895,14 @@
<item quantity="many"><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="842308776768942600">"Настройки режима \"Не беспокоить\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Только важные"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Не беспокоить"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Действия"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Вкл. звуки и вибросигналы из"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Правила режима \"Не беспокоить\""</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ограничить уведомления"</string>
@@ -3082,13 +3086,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Будильник всегда важен и подает звуковой сигнал"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Выбранные абоненты"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Повторные вызовы"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Уведомить о вызове, если абонент звонит повторно в течение <xliff:g id="MINUTES">%d</xliff:g> мин."</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Если абонент звонит повторно в течение <xliff:g id="MINUTES">%d</xliff:g> мин."</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Включать автоматически"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Никогда"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Каждый вечер"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"При отключенном экране"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"При включенном и отключенном экране"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Введите PIN-код администратора"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ВКЛЮЧЕНО"</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Могут изменять системные настройки"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Изменить системные настройки"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Разрешение на изменение системных настроек"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Разрешить изменять системные настройки"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Разрешить изменение системных настроек"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Приложение сможет изменять системные настройки."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Да"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Нет"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Познакомьтесь со своим новым планшетом"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Познакомьтесь со своим новым устройством"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Функция недоступна на этом устройстве."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Статус регистрации сервиса IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Зарегистрирован"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не зарегистрирован"</string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 5c63c47..243ee45 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC ලිපිනය"</string>
<string name="status_bt_address" msgid="4195174192087439720">"බ්ලූටූත් ලිපිනය"</string>
<string name="status_serial_number" msgid="2257111183374628137">"අනුක්රමාංකය"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"ලබාගත නොහැක"</string>
<string name="status_up_time" msgid="7294859476816760399">"ක්රියාකාරීව ඇති කාලය"</string>
<string name="status_awake_time" msgid="2393949909051183652">"අවදි වේලාව"</string>
<string name="internal_memory" msgid="9129595691484260784">"අභ්යන්තර ආචයනය"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"අතින් සමමුහුර්ත කළ නොහැක"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"මෙම අයිතමය සඳහා සමමුර්ත කිරීම දැනට අබල කර ඇත. මෙම සැකසීම් වෙනස් කිරීමට, තාවකාලිකව පසුබිම් දත්ත සහ ස්වයංක්රිය සමමුහුර්තකරණය සක්රිය කරන්න."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC ලිපිනය"</string>
<string name="enter_password" msgid="8035706727471334122">"Android ආරම්භ කිරීමට, ඔබගේ මුරපදය ඇතුළු කරන්න"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android ආරම්භ කිරීමට, ඔබගේ PIN එක ඇතුළු කරන්න"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android ආරම්භ කිරීමට, ඔබගේ රටාව අදින්න"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"ජංගම"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"දත්ත භාවිතය"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"මනාපවලට බාධා නොකරන්න"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ප්රමුඛතා පමණි ඉඩ දෙයි"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"බාධා නොකරන්න"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"හැසිරීම"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"ශබ්ද සහ කම්පනවලට ඉඩ දෙන්න"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"බාධා නොකරන්න රීති සැකසීම"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ශබ්ද සහ කම්පන ඇතැම් වේලා වල සීමා කරන්න"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"සීනු සැමවිටම ප්රමුඛ වන අතර ශබ්ද ඇති කරයි"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"තෝරාගත් අමතන්නන්"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"නැවත අමතන්නන්"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"එකම පුද්ගලයා විනාඩි <xliff:g id="MINUTES">%d</xliff:g> කාල සීමාවක් තුළ දෙවන වතාවටත් අමතයි නම්, එයට අවසර දෙන්න"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"එකම පුද්ගලයා විනාඩි <xliff:g id="MINUTES">%d</xliff:g>ක කාල සීමාවක් තුළ දෙවන වතාවටත් අමතයි නම්"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"ස්වයන්ක්රියව සක්රිය කරන්න"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"කවදාවත් නෑ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"සෑම රාත්රියකම"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"තිරය ක්රියාවිරහිත විට"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"තිරය ක්රියාත්මක හෝ ක්රියාවිරහිත විට"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"පරිපාලක PIN එක ඇතුල් කරන්න"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ක්රියාත්මකයි"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"පද්ධති සැකසීම් විකරණය කළ හැකිය"</string>
<string name="write_system_settings" msgid="3482913590601096763">"පද්ධති සැකසීම් විකරණය කරන්න"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"යෙදුම් පද්ධති සැකසීම් විකරණය කිරීමේ අවසරය"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"පද්ධති සැකසීම් විකරණය කිරීමට ඉඩ දෙන්න"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"පද්ධති සැකසීම් වෙනස් කිරීමට ඉඩ දෙන්න"</string>
<string name="write_settings_description" msgid="6868293938839954623">"මෙම අවසරය යෙදුමකට පද්ධති සැකසීම් විකරණය කිරීමට ඉඩ දෙයි."</string>
<string name="write_settings_on" msgid="8230580416068832239">"ඔව්"</string>
<string name="write_settings_off" msgid="5156104383386336233">"නැත"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"ඔබගේ නව ටැබ්ලට් පරිගණකය ගැන දැන ගන්න"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"ඔබගේ නව උපාංගය ගැන දැන ගන්න"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"මෙම අංගය මෙම උපාංගයේ ලබා ගත නොහැක"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS ලියාපදිංචි තත්ත්වය"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"ලියාපදිංචි වී ඇත"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ලියාපදිංචි වී නැත"</string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 82a4ec1..4470dc2 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adresa MAC siete Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adresa Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Sériové číslo"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nie je k dispozícii"</string>
<string name="status_up_time" msgid="7294859476816760399">"Doba prevádzky"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Doba prevádzky"</string>
<string name="internal_memory" msgid="9129595691484260784">"Interný ukl. priestor"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nie je možné ručne synchronizovať"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synchronizácia tejto položky je momentálne zakázaná. Ak chcete toto nastavenie zmeniť, dočasne zapnite dátové prenosy na pozadí a automatickú synchronizáciu."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adresa 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"Ak chcete spustiť Android, zadajte heslo."</string>
<string name="enter_pin" msgid="5305333588093263790">"Ak chcete spustiť Android, zadajte číslo PIN."</string>
<string name="enter_pattern" msgid="4187435713036808566">"Ak chcete spustiť Android, nakreslite vzor."</string>
@@ -2793,6 +2790,7 @@
<item quantity="other">Zobraziť %d skrytých položiek</item>
<item quantity="one">Zobraziť %d skrytú položku</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Zbaliť"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Sieť a internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilné"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"spotreba dát"</string>
@@ -2897,8 +2895,14 @@
<item quantity="other">Je zapnutých <xliff:g id="ON_COUNT">%d</xliff:g> automatických pravidiel</item>
<item quantity="one">Je zapnuté 1 automatické pravidlo</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Nastavenia režimu Nerušiť"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Prioritné"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Nerušiť"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Správanie"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Povoliť zvuky a vibrácie z:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Bez zvuku"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Žiadne zvuky (Úplné ticho)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Žiadne zvuky okrem <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">"Automatické pravidlá"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Nastavenie pravidiel Nerušiť"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"V určitých časoch obmedziť zvuky a vibrovanie"</string>
@@ -3082,13 +3086,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Iba od kontaktov s hviezdičkou"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Žiadne"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Budíky"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Budíky sú vždy prioritné a vydávajú zvuk"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Pripomenutia"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Udalosti"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Všetci volajúci"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Vybraní volajúci"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Opakované volania"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Ak tá istá osoba zavolá druhýkrát do <xliff:g id="MINUTES">%d</xliff:g> min, povoliť hovor"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ak tá istá osoba zavolá druhýkrát do <xliff:g id="MINUTES">%d</xliff:g> min"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Zapínať automaticky"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nikdy"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Každú noc"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Keď je obrazovka vypnutá"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Keď je obrazovka zapnutá alebo vypnutá"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Nastavenia upozornení"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Spätná väzba o zariadení"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Zadajte PIN správcu"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Zapnuté"</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Môže upravovať nastavenia systému"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Úprava nastavení systému"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Povolenie pre aplikáciu na úpravy nastavení systému"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Povoliť úpravy nastavení systému"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Povoliť úpravy nastavení systému"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Toto povolenie umožňuje aplikácii upravovať nastavenia systému."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Áno"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nie"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Pozrite si prehliadku nového tabletu"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Pozrite si prehliadku nového zariadenia"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Táto funkcia nie je v zariadení k dispozícii"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stav registrácie IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrované"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Neregistrované"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index cc16526..419625c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Naslov MAC vmesnika Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Naslov Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serijska številka"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Ni na voljo"</string>
<string name="status_up_time" msgid="7294859476816760399">"Čas delovanja"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Čas delovanja"</string>
<string name="internal_memory" msgid="9129595691484260784">"Notranja shramba"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ročna sinhronizacija ni mogoča"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sinhronizacija za ta element je trenutno onemogočena. Če želite spremeniti nastavitev, vklopite podatke v ozadju in samodejno sinhronizacijo."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Naslov 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"Če želite zagnati Android, vnesite geslo"</string>
<string name="enter_pin" msgid="5305333588093263790">"Če želite zagnati Android, vnesite PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Če želite zagnati Android, narišite vzorec"</string>
@@ -2793,6 +2790,7 @@
<item quantity="few">Pokaži %d skrite elemente</item>
<item quantity="other">Pokaži %d skritih elementov</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Strni"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Omrežje in internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobilno"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"prenesena količina podatkov"</string>
@@ -2897,8 +2895,14 @@
<item quantity="few"><xliff:g id="ON_COUNT">%d</xliff:g> samodejna pravila so vklopljena</item>
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> samodejnih pravil je vklopljenih</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Nastavitve načina »ne moti«"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"»Samo prednostno« dovoljuje"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Ne moti"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Vedenje"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Dovoli te zvoke in vibriranja:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Brez zvoka"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Brez zvoka (Popolna tišina)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Brez zvoka razen: <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">"Samodejna pravila"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Nastavi pravila za »ne moti«"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Omeji zvoke in vibriranja od določenih urah"</string>
@@ -3082,13 +3086,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Samo od stikov, označenih z zvezdico"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Nič"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmi"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmi so vedno prednostni in predvajajo zvok"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Opomniki"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Dogodki"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Vsi klicatelji"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Izbrani klicatelji"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Klicatelji, ki večkrat kličejo"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Dovoljeno, če ista oseba kliče že drugič v <xliff:g id="MINUTES">%d</xliff:g> min."</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Če ista oseba kliče že drugič v <xliff:g id="MINUTES">%d</xliff:g> min."</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Samodejni vklop"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Nikoli"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Vsako noč"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Ko je zaslon izklopljen"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Ko je zaslon vklopljen ali izklopljen"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Nastavitve obvestil"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"V redu"</string>
<string name="device_feedback" msgid="3238056036766293294">"Pošlji povratne info. o tej napravi"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Vnos skrbniške kode PIN"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Vklopljeno"</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Lahko spreminjajo sistemske nastavitve"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Spreminjanje sist. nastavitev"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Dovoljenje aplikacijam za sprem. sistem. nastavitev"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Dovoli spreminjanje sistemskih nastavitev"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Dovoli spreminjanje sistemskih nastavitev"</string>
<string name="write_settings_description" msgid="6868293938839954623">"To dovoljenje aplikaciji dovoljuje spreminjanje sistemskih nastavitev."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Da"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ne"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Oglejte si predstavitev novega tabličnega računalnika"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Oglejte si predstavitev nove naprave"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ta funkcija ni na voljo v tej napravi."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Stanje registracije IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrirana"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ni registrirana"</string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 1c3be4e..0d6e187 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Adresa MAC e Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Adresa e Bluetooth-it"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Numri i serisë"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Nuk ofrohet"</string>
<string name="status_up_time" msgid="7294859476816760399">"Koha aktive"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Koha e zgjimit"</string>
<string name="internal_memory" msgid="9129595691484260784">"Hapësira e brendshme për ruajtje"</string>
@@ -1470,10 +1469,8 @@
<string name="settings_safetylegal_activity_loading" msgid="8059022597639516348">"Po ngarkon..."</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"Cakto një kyçje të ekranit"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"Për siguri, cakto një fjalëkalim"</string>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"Cakto një rezervë për gjurmën e gishtit"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"Cakto një rezervë për gjurmën e gishtit"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"Për siguri, cakto një kod PIN"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"Cakto një rezervë për gjurmën e gishtit"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"Për siguri, cakto një motiv"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Nuk mund të sinkronizojë manualisht"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Sinkronizimi për këtë artikull është aktualisht i çaktivizuar. Për ta ndryshuar këtë cilësim, aktivizo përkohësisht të dhënat në sfond dhe sinkronizimin automatik."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Adresa 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"Për të nisur Androidin, fut fjalëkalimin"</string>
<string name="enter_pin" msgid="5305333588093263790">"Për të nisur Androidin, fut kodin PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Për të nisur Androidin, vizato motivin tënd"</string>
@@ -2743,6 +2738,7 @@
<item quantity="other">Shfaq %d artikuj të fshehur</item>
<item quantity="one">Shfaq %d artikull të fshehur</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Palos"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Rrjeti dhe interneti"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"celular"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"përdorimi i të dhënave"</string>
@@ -2845,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> rregulla automatike të aktivizuara</item>
<item quantity="one">1 rregull automatik i aktivizuar</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Preferencat për \"Mos shqetëso\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Vetëm njoftimet me prioritet"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Mos shqetëso"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Sjellja"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Lejo tingujt dhe dridhjet nga"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Asnjë tingull"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Asnjë tingull (Heshtje e plotë)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Asnjë tingull përveç <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">"Rregullat automatike"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Cakto rregullat për \"Mos shqetëso\""</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Kufizo tingujt dhe dridhjet në kohë të caktuara"</string>
@@ -3022,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Vetëm nga kontaktet me yll"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Asnjë"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmet"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmet janë gjithmonë me prioritet dhe lëshojnë tingull"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Alarmet rikujtuese"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Ngjarjet"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Të gjithë telefonuesit"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Telefonuesit e zgjedhur"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Telefonuesit e përsëritur"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Nëse telefonon i njëjti person për herë të dytë në një periudhë prej <xliff:g id="MINUTES">%d</xliff:g> minutash, lejoje"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Nëse telefonon i njëjti person për herë të dytë në një periudhë prej <xliff:g id="MINUTES">%d</xliff:g> minutash, lejoje"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Aktivizo automatikisht"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Asnjëherë!"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Çdo natë"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kur ekrani është joaktiv"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kur ekrani është aktiv ose joaktiv"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Cilësimet e njoftimeve"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Në rregull"</string>
<string name="device_feedback" msgid="3238056036766293294">"Dërgo përshtypjet për këtë pajisje"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Fut kodin PIN të administratorit"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Aktivizuar"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Mund të modifikojë cilësimet e sistemit"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Modifiko cilësimet e sistemit"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Leje për aplikacionin që të modifikojë cilësimet e sistemit"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Lejo modifikimin e cilësimeve të sistemit"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Lejo modifikimin e cilësimeve të sistemit"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Kjo leje e lejon një aplikacion të modifikojë cilësimet e sistemit."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Po"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Jo"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Zhvillo një turne të tabletit tënd të ri"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Zhvillo një turne të pajisjes sate të re"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ky funksion nuk ofrohet në këtë pajisje"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Gjendja e regjistrimit të IMS-së"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Regjistruar"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Paregjistruar"</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 52215e1..69adde3 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -1172,7 +1172,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC адреса"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth адреса"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Серијски број"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Недоступно"</string>
<string name="status_up_time" msgid="7294859476816760399">"Време рада"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Време буђења"</string>
<string name="internal_memory" msgid="9129595691484260784">"Интерно складиште"</string>
@@ -2015,8 +2014,8 @@
<!-- no translation found for battery_stats_last_duration (1535831453827905957) -->
<skip />
<string name="awake" msgid="387122265874485088">"Време буђења уређаја"</string>
- <string name="wifi_on_time" msgid="3208518458663637035">"Wi-Fi на време"</string>
- <string name="bluetooth_on_time" msgid="3056108148042308690">"Wi-Fi на време"</string>
+ <string name="wifi_on_time" msgid="3208518458663637035">"Време од укључивања Wi-Fi мреже"</string>
+ <string name="bluetooth_on_time" msgid="3056108148042308690">"Време од укључивања Wi-Fi мреже"</string>
<string name="advanced_battery_title" msgid="2068039111517508622">"Напредна потрошња батерије"</string>
<string name="history_details_title" msgid="3608240585315506067">"Детаљи историје"</string>
<string name="battery_details_title" msgid="6101394441569858580">"Потрошња батерије"</string>
@@ -2370,8 +2369,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ручно синхронизовање није могуће"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Синхронизација за ову ставку је тренутно онемогућена. Да бисте променили ово подешавање, привремено укључите позадинске податке и аутоматску синхронизацију."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC адреса"</string>
<string name="enter_password" msgid="8035706727471334122">"Да бисте покренули Android, унесите лозинку"</string>
<string name="enter_pin" msgid="5305333588093263790">"Да бисте покренули Android, унесите PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Да бисте покренули Android, нацртајте шаблон"</string>
@@ -2767,6 +2764,7 @@
<item quantity="few">Прикажи %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_summary_mobile" msgid="3851083934739500429">"мобилна мрежа"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"потрошња података"</string>
@@ -2870,8 +2868,14 @@
<item quantity="few"><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="842308776768942600">"Подешавања за Не узнемиравај"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Дозвољени су само приоритети"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Не узнемиравај"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Понашање"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Дозволи звуке и вибрације од:"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Подесите правила за режим „Не узнемиравај“"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Ограничи звукове и вибрације у одређеним интервалима"</string>
@@ -3051,13 +3055,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Аларми су увек приоритет и емитује се звук"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Изабрани позиваоци"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Поновни позиваоци"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Ако иста особа позове по други пут у року од <xliff:g id="MINUTES">%d</xliff:g> мин, дозволи позив"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Ако иста особа позове по други пут у периоду од <xliff:g id="MINUTES">%d</xliff:g> мин"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Аутоматски укључи"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Никад"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Сваке вечери"</string>
@@ -3088,6 +3093,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Када је екран искључен"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Када је екран укључен или искључен"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Унесите PIN администратора"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Укључено"</string>
@@ -3346,7 +3352,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Могу да мењају подешавања система"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Мењање подешавања система"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Дозвола за мењање подешавања система за апликацију"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Дозволи мењање подешавања система"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Дозволи мењање подешавања система"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Ова дозвола дозвољава апликацији да мења подешавања система."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Да"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Не"</string>
@@ -3783,7 +3789,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Упознајте нови таблет"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Упознајте нови уређај"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ова функција није доступна на овом уређају."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Статус IMS регистрације"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Регистрован je"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Није регистрован"</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index fba599f..816df7b 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC-adress"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth-adress"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serienummer"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Inte tillgängligt"</string>
<string name="status_up_time" msgid="7294859476816760399">"Tid sedan systemstart"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Aktiveringstid"</string>
<string name="internal_memory" msgid="9129595691484260784">"Intern lagring"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Det går inte att synkronisera manuellt"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Synkronisering är inaktiverad för det här objektet. Om du vill ändra inställningen aktiverar du bakgrundsdata och automatisk synkronisering tillfälligt."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-adress"</string>
<string name="enter_password" msgid="8035706727471334122">"Starta Android genom att ange ditt lösenord"</string>
<string name="enter_pin" msgid="5305333588093263790">"Starta Android genom att ange din pinkod"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Starta Android genom att rita ditt grafiska lösenord"</string>
@@ -3055,6 +3052,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"När skärmen är avstängd"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"När skärmen är påslagen eller avstängd"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Aviseringsinställningar"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Skicka feedback om den här enheten"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Ange administratörens pinkod:"</string>
<string name="switch_on_text" msgid="1124106706920572386">"På"</string>
@@ -3306,7 +3304,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Kan ändra systeminställningar"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Ändra systeminställningar"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Behörighet för app att ändra systeminställningar"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Tillåt att appen ändrar systeminställningar"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Tillåt att systeminställningar ändras"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Med den här behörigheten kan appen ändra systeminställningarna."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ja"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Nej"</string>
@@ -3727,7 +3725,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Ta en rundtur på din nya surfplatta"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Ta en rundtur på din nya enhet"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Den här funktionen är inte tillgänglig på den här enheten."</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS-registrering"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registrerad"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Ej registrerad"</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 77782e5..16f05da 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Anwani ya Wi-Fi ya MAC"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Anwani ya Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Nambari ya Ufuatiliaji"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Hapatikani"</string>
<string name="status_up_time" msgid="7294859476816760399">"Muda wa matumizi tangu mwisho ilipozimwa"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Saa ya kuamka"</string>
<string name="internal_memory" msgid="9129595691484260784">"Hifadhi ya ndani"</string>
@@ -1823,7 +1822,7 @@
<string name="experimental_category_title" msgid="5272318666666893547">"Ya majaribio"</string>
<string name="talkback_title" msgid="7912059827205988080">"Talkback"</string>
<string name="talkback_summary" msgid="8331244650729024963">"Kisoma skrini hasa kwa watu wenye upofu na wenye matatizo ya kuona"</string>
- <string name="select_to_speak_summary" msgid="4282846695497544515">"Gonga vipengee kwenye skrini yako ili usikie vikisoma kwa sauti"</string>
+ <string name="select_to_speak_summary" msgid="4282846695497544515">"Gusa vipengee kwenye skrini yako ili usikie vikisoma kwa sauti"</string>
<string name="accessibility_captioning_title" msgid="7589266662024836291">"Manukuu"</string>
<string name="accessibility_screen_magnification_title" msgid="6001128808776506021">"Ukuzaji"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="3719929521571489913">"Kuza kwa kugonga mara tatu"</string>
@@ -1833,7 +1832,7 @@
<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>", gonga 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>", gonga 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_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_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>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Huwezi kusawazisha mwenyewe"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Kwa sasa usawazishaji wa kipengee hiki umezimwa. Kubadilisha mpangilio huu, washa kwa muda data ya usuli na usawazishaji kiotomatiki."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Anwani ya 4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"Ili uanzishe Android, weka nenosiri lako"</string>
<string name="enter_pin" msgid="5305333588093263790">"Ili uanzishe Android, weka PIN yako"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Ili uanzishe Android, chora mchoro wako"</string>
@@ -2639,14 +2636,14 @@
<string name="nfc_payment_use_default" msgid="3234730182120288495">"Tumia chaguo-msingi"</string>
<string name="nfc_payment_favor_default" msgid="5743781166099608372">"Kila wakati"</string>
<string name="nfc_payment_favor_open" msgid="1923314062109977944">"Isipokuwa wakati programu nyingine ya malipo imefunguliwa"</string>
- <string name="nfc_payment_pay_with" msgid="7524904024378144072">"Unapolipa ukitumia chaguo la Gonga na ulipe, tumia:"</string>
+ <string name="nfc_payment_pay_with" msgid="7524904024378144072">"Unapolipa ukitumia chaguo la Gusisha ili ulipe, tumia:"</string>
<string name="nfc_how_it_works_title" msgid="1984068457698797207">"Kulipa katika kituo"</string>
<string name="nfc_how_it_works_content" msgid="4749007806393224934">"Sanidi programu ya malipo. Shikilia tu upande wa nyuma wa simu yako kwenye kituo chochote cha malipo chenye alama ya kulipa bila kugusa."</string>
<string name="nfc_how_it_works_got_it" msgid="259653300203217402">"Nimeelewa"</string>
<string name="nfc_more_title" msgid="815910943655133280">"Zaidi..."</string>
<string name="nfc_payment_set_default_label" msgid="7315817259485674542">"Ungependa kuweka kama mapendeleo yako?"</string>
- <string name="nfc_payment_set_default" msgid="8532426406310833489">"Ungependa kutumia <xliff:g id="APP">%1$s</xliff:g> unapotumia Gonga na ulipe?"</string>
- <string name="nfc_payment_set_default_instead_of" msgid="6993301165940432743">"Ungependa kutumia <xliff:g id="APP_0">%1$s</xliff:g> badala ya <xliff:g id="APP_1">%2$s</xliff:g> unapotumia Gonga na ulipe?"</string>
+ <string name="nfc_payment_set_default" msgid="8532426406310833489">"Ungependa kutumia <xliff:g id="APP">%1$s</xliff:g> unapogusisha ili ulipe?"</string>
+ <string name="nfc_payment_set_default_instead_of" msgid="6993301165940432743">"Ungependa kutumia <xliff:g id="APP_0">%1$s</xliff:g> badala ya <xliff:g id="APP_1">%2$s</xliff:g> unapotumia chaguo la kugusisha ili ulipe?"</string>
<string name="restriction_settings_title" msgid="4233515503765879736">"Vikwazo"</string>
<string name="restriction_menu_reset" msgid="2067644523489568173">"Ondoa vikwazo"</string>
<string name="restriction_menu_change_pin" msgid="740081584044302775">"Badilisha PIN"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"kifaa cha mkononi"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"matumizi ya data"</string>
@@ -2843,8 +2841,14 @@
<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>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Mapendeleo ya hali ya Usinisumbue"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Yanayopewa kipaumbele ni"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Usisumbue"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Tabia"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Ruhusu sauti na mitetemo kutoka"</string>
+ <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_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>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Kengele hupewa kipaumbele na hutoa sauti"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Wale uliowachagua"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Wanaorudia kupiga simu"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Mtu yule yule akipiga simu mara ya pili ndani ya kipindi cha dakika <xliff:g id="MINUTES">%d</xliff:g>, mruhusu"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Mtu yule yule akipiga simu mara ya pili katika kipindi cha dakika <xliff:g id="MINUTES">%d</xliff:g>"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Washa kiotomatiki"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Katu"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Kila usiku"</string>
@@ -3055,6 +3060,7 @@
<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="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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Weka PIN ya msimamizi"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Imewashwa"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Inaweza kubadilisha mipangilio ya mfumo"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Badilisha mipangilio ya mfumo"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Ruhusa ya programu ya kubadilisha mipangilio ya mfumo"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Ruhusu ubadilishaji wa mipangilio ya mfumo"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Ruhusu ubadilishaji wa mipangilio ya mfumo"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Idhini hii huruhusu programu kubadilisha mipangilio ya mfumo"</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ndiyo"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Hapana"</string>
@@ -3586,7 +3592,7 @@
<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_summary" msgid="525662960806416373">"Ili uangalie saa, aikoni za arifa na maelezo mengine, gonga skrini yako mara mbili."</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>
<string name="ambient_display_pickup_title" product="tablet" msgid="4455864282995698097">"Inua ili uangalie kompyuta kibao"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Kagua kompyuta yako kibao mpya"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Kagua kifaa chako kipya"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Kipengele hiki hakipatikani kwenye kifaa hiki"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Hali ya usajili wa IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Imesajiliwa"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Haijasajiliwa"</string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index ceee70d..7a40f5a 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"வைஃபை MAC முகவரி"</string>
<string name="status_bt_address" msgid="4195174192087439720">"புளூடூத் முகவரி"</string>
<string name="status_serial_number" msgid="2257111183374628137">"வரிசை எண்"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"கிடைக்கவில்லை"</string>
<string name="status_up_time" msgid="7294859476816760399">"இயங்கிய நேரம்"</string>
<string name="status_awake_time" msgid="2393949909051183652">"விழிப்பு நேரம்"</string>
<string name="internal_memory" msgid="9129595691484260784">"அகச் சேமிப்பிடம்"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"கைரேகையைப் பயன்படுத்த, கடவுச்சொல்லை அமை"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"கைரேகையைப் பயன்படுத்த, வடிவத்தை அமை"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"பாதுகாப்பிற்கு, பின்னை அமைக்கவும்"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"கைரேகையைப் பயன்படுத்த, பின்னை அமைக்கவும்"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"பாதுகாப்பிற்காக, பேட்டர்னை அமைக்கவும்"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"கைமுறையாக ஒத்திசைக்க முடியாது"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"இந்த உருப்படிக்கான ஒத்திசைவு தற்போது முடக்கப்பட்டுள்ளது. இந்த அமைப்பை மாற்ற, பின்புலத் தரவு மற்றும் தன்னியக்க ஒத்திசைவைத் தற்காலிகமாக இயக்கவும்."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC முகவரி"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidஐத் தொடங்க, கடவுச்சொல்லை உள்ளிடவும்"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidஐத் தொடங்க, PINஐ உள்ளிடவும்"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidஐத் தொடங்க, வடிவத்தை வரையவும்"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"மொபைல்"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"டேட்டா பயன்பாடு"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"\'தொந்தரவு செய்யாதே\' விருப்பத்தேர்வுகள்"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"அனுமதிக்கப்படுபவை:"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"தொந்தரவு செய்யாதே"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"செயல்பாடு"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"இந்த ஒலிகள்/அதிர்வுகளை அனுமதி"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"டிஎன்டி விதிகளை அமை"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"ஒலி & அதிர்வுகளை வரம்பிடு"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"அலாரங்கள் எப்போதும் முதன்மையானவை, ஒலியை எழுப்பும்"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"தேர்ந்தெடுக்கப்பட்ட அழைப்பாளர்கள்"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"மீண்டும் மீண்டும் அழைப்பவர்கள்"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"<xliff:g id="MINUTES">%d</xliff:g> நிமிடங்களுக்குள் இரண்டாவது முறையாக அதே எண்ணிலிருந்து அழைப்பு வந்தால், அனுமதி"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"<xliff:g id="MINUTES">%d</xliff:g> நிமிடத்திற்குள் இரண்டாவது முறையாக அதே எண்ணிலிருந்து அழைப்பு வந்தால், அனுமதி"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"தானாகவே இயக்கு"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ஒருபோதும் வேண்டாம்"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ஒவ்வொரு இரவும்"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"திரை முடக்கப்பட்டிருக்கும் போது"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"திரை இயக்கத்தில் அல்லது முடக்கத்தில் உள்ள போது"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"நிர்வாகிப் பின்னை உள்ளிடவும்"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ஆன்"</string>
@@ -3308,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"முறைமை அமைப்புகளை மாற்றலாம்"</string>
<string name="write_system_settings" msgid="3482913590601096763">"சாதன அமைப்புகளை மாற்று"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"பயன்பாடானது முறைமை அமைப்புகளை மாற்றுவதற்கான அனுமதி"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"முறைமை அமைப்புகளை மாற்ற அனுமதி"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"சிஸ்டம் அமைப்புகளை மாற்றுவதற்கு அனுமதி"</string>
<string name="write_settings_description" msgid="6868293938839954623">"இது முறைமை அமைப்புகளை மாற்ற, பயன்பாட்டை அனுமதிக்கும்."</string>
<string name="write_settings_on" msgid="8230580416068832239">"அனுமதிக்கப்பட்டது"</string>
<string name="write_settings_off" msgid="5156104383386336233">"அனுமதிக்கப்படவில்லை"</string>
@@ -3729,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"உங்கள் புதிய டேப்லெட்டைப் பற்றி அறிக"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"உங்கள் புதிய சாதனத்தைப் பற்றி அறிக"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"இந்தச் சாதனத்தில் இந்த அம்சம் இல்லை"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS பதிவின் நிலை"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"பதிவு செய்யப்பட்டது"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"பதிவு செய்யப்படவில்லை"</string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 8cd36b4..53a16ff 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC చిరునామా"</string>
<string name="status_bt_address" msgid="4195174192087439720">"బ్లూటూత్ చిరునామా"</string>
<string name="status_serial_number" msgid="2257111183374628137">"క్రమ సంఖ్య"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"అందుబాటులో లేదు"</string>
<string name="status_up_time" msgid="7294859476816760399">"గడిచిన సమయం"</string>
<string name="status_awake_time" msgid="2393949909051183652">"మేల్కొని ఉన్న సమయం"</string>
<string name="internal_memory" msgid="9129595691484260784">"అంతర్గత నిల్వ"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"వేలిముద్రను ఉపయోగించడానికి, పాస్వర్డ్ను సెట్ చేయండి"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"వేలిముద్రను ఉపయోగించడానికి, ఆకృతి సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"భద్రత కోసం, పిన్ను సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"వేలిముద్రను ఉపయోగించడానికి, PINగా సెట్ చేయండి"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"భద్రత కోసం, నమూనాను సెట్ చేయండి"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"మాన్యువల్గా సమకాలీకరించడం సాధ్యపడదు"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"ఈ అంశం యొక్క సమకాలీకరణ ప్రస్తుతం నిలిపివేయబడింది. ఈ సెట్టింగ్ను మార్చడానికి, నేపథ్య డేటాను మరియు స్వయంచాలక సమకాలీకరణను తాత్కాలికంగా ప్రారంభించండి."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC చిరునామా"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidని ప్రారంభించడానికి, మీ పాస్వర్డ్ని నమోదు చేయండి"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidని ప్రారంభించడానికి, మీ పిన్ను నమోదు చేయండి"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidని ప్రారంభించడానికి, మీ నమూనాను గీయండి"</string>
@@ -2743,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"మొబైల్"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"డేటా వినియోగం"</string>
@@ -2845,8 +2841,14 @@
<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="842308776768942600">"అంతరాయం కలిగించవద్దు ప్రాధాన్యతలు"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"ప్రాధాన్యతగలవే అనుమతించబడతాయి"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"అంతరాయం కలిగించవద్దు"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ప్రవర్తన"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"దీని నుండి అన్ని ధ్వనులు మరియు వైబ్రేషన్లు"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"అంతరాయం కలిగించవద్దు నియమాలు సెట్ చేయి"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"నిర్దిష్ట సమయాలలో ధ్వనులు, వైబ్రేషన్లను పరిమితంగా ఉంచుతుంది"</string>
@@ -3022,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"అలారాలు ఎల్లప్పుడూ ప్రాధాన్యంగా పరిగణించబడి, శబ్దం చేస్తాయి"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ఎంచుకున్న కాలర్లు"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"పునరావృత కాలర్లను అనుమతించు"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"ఒకే వ్యక్తి <xliff:g id="MINUTES">%d</xliff:g> నిమిషం వ్యవధిలో రెండవసారి కాల్ చేస్తే, దాన్ని అనుమతిస్తుంది"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"<xliff:g id="MINUTES">%d</xliff:g> నిమిషం వ్యవధిలో అదే వ్యక్తి రెండో సారి కాల్ చేస్తే"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"స్వయంచాలకంగా ఆన్ చేయి"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ఎప్పటికీ వద్దు"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ప్రతి రాత్రి"</string>
@@ -3057,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"స్క్రీన్ ఆఫ్లో ఉన్నప్పుడు"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"స్క్రీన్ ఆన్ లేదా ఆఫ్లో ఉన్నప్పుడు"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"నిర్వాహకుల పిన్ని నమోదు చేయండి"</string>
<string name="switch_on_text" msgid="1124106706920572386">"ఆన్లో ఉంది"</string>
@@ -3309,7 +3313,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"సిస్టమ్ సెట్టింగ్లు సవరించగలవు"</string>
<string name="write_system_settings" msgid="3482913590601096763">"సిస్టమ్ సెట్టింగ్ల సవరణ"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"యాప్ సిస్టమ్ సెట్టింగ్లను సవరించడానికి అనుమతి"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"సిస్టమ్ సెట్టింగ్ల సవరణకు అనుమతించు"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"సిస్టమ్ సెట్టింగ్ల సవరణను అనుమతించండి"</string>
<string name="write_settings_description" msgid="6868293938839954623">"ఈ అనుమతి సిస్టమ్ సెట్టింగ్లను సవరించడానికి అనువర్తనాన్ని అనుమతిస్తుంది."</string>
<string name="write_settings_on" msgid="8230580416068832239">"అవును"</string>
<string name="write_settings_off" msgid="5156104383386336233">"లేదు"</string>
@@ -3730,7 +3734,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"మీ కొత్త టాబ్లెట్ గురించి తెలుసుకోండి"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"మీ కొత్త పరికరం గురించి తెలుసుకోండి"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ఈ లక్షణం ఈ పరికరంలో అందుబాటులో లేదు"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS నమోదు స్థితి"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"నమోదు చేయబడింది"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"నమోదు కాలేదు"</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 918c871..e65e232 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"ที่อยู่ MAC ของ WiFi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"ที่อยู่บลูทูธ"</string>
<string name="status_serial_number" msgid="2257111183374628137">"หมายเลขซีเรียล"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"ไม่ว่าง"</string>
<string name="status_up_time" msgid="7294859476816760399">"เวลาใช้งาน"</string>
<string name="status_awake_time" msgid="2393949909051183652">"เวลาการทำงาน"</string>
<string name="internal_memory" msgid="9129595691484260784">"ที่เก็บข้อมูลภายใน"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"ซิงค์ด้วยตนเองไม่ได้"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"รายการนี้ถูกปิดใช้งานการซิงค์อยู่ หากต้องการเปลี่ยนการตั้งค่า ให้เปิดใช้งานข้อมูลแบ็กกราวด์และการซิงค์อัตโนมัติชั่วคราว"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"ที่อยู่ MAC ใน 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"ป้อนรหัสผ่านเพื่อเริ่มต้นใช้งาน Android"</string>
<string name="enter_pin" msgid="5305333588093263790">"ป้อน PIN เพื่อเริ่มต้นใช้งาน Android"</string>
<string name="enter_pattern" msgid="4187435713036808566">"วาดรูปแบบเพื่อเริ่มต้นใช้งาน Android"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"มือถือ"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ปริมาณการใช้อินเทอร์เน็ต"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"ค่ากำหนดของ \"ห้ามรบกวน\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"อนุญาตเฉพาะเรื่องสำคัญ"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ห้ามรบกวน"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"ลักษณะการทำงาน"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"อนุญาตให้มีเสียงและการสั่นจาก"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"ตั้งกฎห้ามรบกวน"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"จำกัดเสียงและการสั่นในบางเวลา"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"เสียงปลุกจะเป็นการแจ้งเตือนที่สำคัญและส่งเสียงเสมอ"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"ผู้โทรที่เลือกไว้"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"ผู้โทรซ้ำ"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"อนุญาตถ้าผู้โทรคนเดิมโทรเป็นครั้งที่ 2 ภายใน <xliff:g id="MINUTES">%d</xliff:g> นาที"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"ถ้าผู้โทรคนเดิมโทรเป็นครั้งที่ 2 ภายใน <xliff:g id="MINUTES">%d</xliff:g> นาที"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"เปิดโดยอัตโนมัติ"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ไม่ใช้"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ทุกคืน"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"เมื่อหน้าจอปิดอยู่"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"เมื่อหน้าจอเปิดหรือปิดอยู่"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"ป้อน PIN ผู้ดูแลระบบ"</string>
<string name="switch_on_text" msgid="1124106706920572386">"เปิด"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"สามารถแก้ไขการตั้งค่าระบบได้"</string>
<string name="write_system_settings" msgid="3482913590601096763">"แก้ไขการตั้งค่าระบบ"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"สิทธิ์ของแอปในการแก้ไขการตั้งค่าระบบ"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"อนุญาตให้แก้ไขการตั้งค่าระบบ"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"อนุญาตให้แก้ไขการตั้งค่าระบบ"</string>
<string name="write_settings_description" msgid="6868293938839954623">"สิทธิ์นี้อนุญาตให้แอปแก้ไขการตั้งค่าระบบได้"</string>
<string name="write_settings_on" msgid="8230580416068832239">"ใช่"</string>
<string name="write_settings_off" msgid="5156104383386336233">"ไม่"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"ทัวร์ชมแท็บเล็ตเครื่องใหม่"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"ทัวร์ชมอุปกรณ์ใหม่"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"ฟีเจอร์นี้ไม่สามารถใช้ได้บนอุปกรณ์นี้"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"สถานะการลงทะเบียน IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"ลงทะเบียนแล้ว"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"ไม่ได้ลงทะเบียน"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 1e5a85b..a39e2fd 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC address ng Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Address ng bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Serial number"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Hindi available"</string>
<string name="status_up_time" msgid="7294859476816760399">"Oras na naka-up"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Oras ng gising"</string>
<string name="internal_memory" msgid="9129595691484260784">"Panloob na storage"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Hindi makapag-sync nang manu-mano"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Kasalukuyang naka-disable ang pag-sync para sa item na ito. Upang baguhin ang setting na ito, pansamantalang i-on ang data ng background at awtomatikong pag-sync."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC address"</string>
<string name="enter_password" msgid="8035706727471334122">"Upang magsimula sa Android, ilagay ang iyong password"</string>
<string name="enter_pin" msgid="5305333588093263790">"Upang magsimula sa Android, ilagay ang iyong PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Upang magsimula sa Android, iguhit ang iyong pattern"</string>
@@ -2741,6 +2738,7 @@
<item quantity="one">Ipakita ang %d nakatagong item</item>
<item quantity="other">Ipakita ang %d na nakatagong item</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"I-collapse"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Network at Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobile"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"paggamit ng data"</string>
@@ -2843,8 +2841,14 @@
<item quantity="one">May <xliff:g id="ON_COUNT">%d</xliff:g> awtomatikong panuntunang naka-on</item>
<item quantity="other">May <xliff:g id="ON_COUNT">%d</xliff:g> na awtomatikong panuntunang naka-on</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Mga kagustuhan sa Huwag Istorbohin"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Pinapayagan lang ng prioridad"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Huwag Istorbohin"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Gawi"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Payagan ang mga tunog at pag-vibrate mula sa"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Walang tunog"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Walang tunog (Ganap na Katahimikan)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Walang tunog maliban sa <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">"Mga awtomatikong panuntunan"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Magtakda ng panuntunan ng Huwag Istorbohin"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Limitahan ang tunog at pag-vibrate sa partikular na oras"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Mula sa mga contact na may star lang"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Wala"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Mga Alarm"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Palaging may priyoridad at tumutunog ang mga alarm"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Mga Paalala"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Mga Kaganapan"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Lahat ng tumatawag"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Mga napiling tumatawag"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Mga umulit na tumatawag"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Kung tumawag ang iisang tao sa pangalawang pagkakataon sa loob ng <xliff:g id="MINUTES">%d</xliff:g> (na) minuto, payagan ito"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Kung muling tumawag ang isang tao sa loob ng <xliff:g id="MINUTES">%d</xliff:g> (na) minuto"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Awtomatikong i-on"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Hindi Kailanman"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Bawat gabi"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Kapag naka-off ang screen"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Kapag naka-on o naka-off ang screen"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Mga setting ng notification"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Feedback tungkol sa device"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Ilagay ang PIN ng admin"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Naka-on"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Maaaring magbago ng mga setting ng system"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Baguhin ang setting ng system"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Pahintulot sa pagbago ng app sa setting ng system"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Payagan ang pagbago sa mga setting ng system"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Payagan ang pagbago sa mga setting ng system"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Nagbibigay-daan ang pahintulot na ito sa isang app na baguhin ang mga setting ng system."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Oo"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Hindi"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Maglibot sa iyong bagong tablet"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Maglibot sa iyong bagong device"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Hindi available ang feature na ito sa device na ito"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Status ng pagpaparehistro ng IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Nakarehistro"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Hindi nakarehistro"</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index ecc76bc..a33be49 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Kablosuz MAC adresi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth adresi"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Seri numara"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Kullanılamıyor"</string>
<string name="status_up_time" msgid="7294859476816760399">"Açık kalma süresi"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Uyanık geçen süre"</string>
<string name="internal_memory" msgid="9129595691484260784">"Dahili dep birm"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"El ile senkronize edilemez"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Bu öğe için senkronizasyon şu anda devre dışı bırakılmış durumdadır. Bu ayarı değiştirmek için geçici olarak arka plan verilerini ve otomatik senkronizasyonu açın."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC adresi"</string>
<string name="enter_password" msgid="8035706727471334122">"Android\'i başlatmak için şifrenizi girin"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android\'i başlatmak için PIN\'inizi girin"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android\'i başlatmak için deseninizi çizin"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Gizli %d öğeyi göster</item>
<item quantity="one">Gizli %d öğeyi göster</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Daralt"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Ağ ve İnternet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"veri kullanımı"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> otomatik kural açıldı</item>
<item quantity="one">1 otomatik kural açıldı</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Rahatsız Etmeyin tercihleri"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Öncelikli olanlar"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Rahatsız Etmeyin"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Davranış"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Şu seslere ve titreşimlere izin ver:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Sessiz"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Hiç ses yok (Tamamen Sessiz)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"<xliff:g id="CATEGORIES">%1$s</xliff:g> dışında ses yok"</string>
+ <!-- no translation found for zen_mode_behavior_alarms_only (2423480992071472963) -->
+ <skip />
<string name="zen_mode_automation_settings_title" msgid="4228995740594063774">"Otomatik kurallar"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Rahatsız Etmeyin kurallarını ayarla"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Belirli zamanlarda sesleri ve titreşimleri sınırlandır"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Yalnızca yıldızlı kişilerden"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Hiçbiri"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Alarmlar"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Alarmlar her zaman öncelikli ve sesli"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Hatırlatıcılar"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Etkinlikler"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Tüm arayanlar"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Seçili arayanlar"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Tekrar arayanlar"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Aynı kişi <xliff:g id="MINUTES">%d</xliff:g> dakika içinde ikinci defa ararsa izin ver"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Aynı kişi <xliff:g id="MINUTES">%d</xliff:g> dakika içinde ikinci defa ararsa"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Otomatik olarak aç"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Hiçbir zaman"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Her gece"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Ekran kapalıyken"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Ekran kapalıyken veya açıkken"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Bildirim ayarları"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Tamam"</string>
<string name="device_feedback" msgid="3238056036766293294">"Bu cihazla ilgili geri bildirim gönder"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Yönetici PIN\'ini girin"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Açık"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Sistem ayarlarını değiştirebilir"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Sistem ayarlarını değiştir"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Uygulamanın, sistem ayarlarını değiştirme izni"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Sistem ayarlarını değiştirmeye izin ver"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Sistem ayarlarının değiştirilmesine izin ver"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Bu izin, bir uygulanın sistem ayarlarını değiştirmesine olanak sağlar."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Evet"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Hayır"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Yeni tabletinizi tanıyın"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Yeni cihazınızı tanıyın"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Bu özellik bu cihazda kullanılamıyor"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS kaydı durumu"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Kaydettirildi"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Kaydettirilmedi"</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 0646670..38bc1b1 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -1185,7 +1185,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"MAC-адреса Wi-Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Адреса Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Серійний номер"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Недоступно"</string>
<string name="status_up_time" msgid="7294859476816760399">"Час із моменту ввімкнення"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Час активн."</string>
<string name="internal_memory" msgid="9129595691484260784">"Внутрішня пам\'ять"</string>
@@ -2391,8 +2390,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Неможливо синхронізувати вручну"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Синхронізацію для цього елемента зараз вимкнено. Щоб змінити це налаштування, тимчасово ввімкніть фонові дані й автоматичну синхронізацію."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC-адреса"</string>
<string name="enter_password" msgid="8035706727471334122">"Введіть пароль, щоб запустити пристрій Android"</string>
<string name="enter_pin" msgid="5305333588093263790">"Введіть PIN-код, щоб запустити пристрій Android"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Намалюйте ключ, щоб запустити пристрій Android"</string>
@@ -2793,6 +2790,7 @@
<item quantity="many">Показати %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_summary_mobile" msgid="3851083934739500429">"мобільна мережа"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"використання трафіку"</string>
@@ -2897,8 +2895,14 @@
<item quantity="many">Увімкнено <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="842308776768942600">"Режим \"Не турбувати\""</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Дозволити лише пріоритетні"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Не турбувати"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Поведінка"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Дозволити звуки й вібросигнали:"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"Налаштувати правила режиму \"Не турбувати\""</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Обмежувати звуки й вібросигнали в певний час"</string>
@@ -3082,13 +3086,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Будильник завжди важливий і подає звуковий сигнал"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Вибрані абоненти"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Повторні вхідні виклики"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Дозволити звуковий сигнал, якщо та сама особа телефонує знову через <xliff:g id="MINUTES">%d</xliff:g> хв"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Якщо та сама людина телефонує вдруге протягом <xliff:g id="MINUTES">%d</xliff:g> хв"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Вмикати автоматично"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"ніколи"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"щовечора"</string>
@@ -3121,6 +3126,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Коли екран вимкнено"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Коли екран увімкнено або вимкнено"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Налаштування сповіщень"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"ОK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Надіслати відгук про цей пристрій"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Введіть PIN-код адміністратора"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Увімкнено"</string>
@@ -3386,7 +3392,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Може змінювати налаштування системи"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Змінювати налаштування системи"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Дозвіл змінювати налаштування системи"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Дозволити змінювати налаштування системи"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Дозволити змінювати налаштування системи"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Додаток зможе змінювати налаштування системи."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Так"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Ні"</string>
@@ -3839,7 +3845,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Ознайомтеся зі своїм новим планшетом"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Ознайомтеся зі своїм новим пристроєм"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Ця функція недоступна на цьому пристрої"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Статус реєстрації IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Зареєстровано"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Не зареєстровано"</string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index eb6613c..478b61a 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC پتہ"</string>
<string name="status_bt_address" msgid="4195174192087439720">"بلوٹوتھ پتہ"</string>
<string name="status_serial_number" msgid="2257111183374628137">"سیریل نمبر"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"غیر دستیاب"</string>
<string name="status_up_time" msgid="7294859476816760399">"چلنے کا وقت"</string>
<string name="status_awake_time" msgid="2393949909051183652">"بیداری کا وقت"</string>
<string name="internal_memory" msgid="9129595691484260784">"داخلی اسٹوریج"</string>
@@ -1470,10 +1469,8 @@
<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>
- <!-- no translation found for lockpassword_choose_your_password_header_for_fingerprint (2541818487015343503) -->
- <skip />
- <!-- no translation found for lockpassword_choose_your_pattern_header_for_fingerprint (7709785406243556723) -->
- <skip />
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"فنگر پرنٹ کے لئے پاس ورڈ سیٹ کریں"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"فنگر پرنٹ کے لئے پیٹرن سیٹ کریں"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"سیکیورٹی کیلئے PIN سیٹ کریں"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"فنگر پرنٹ کے استعمال کے لیے PIN سیٹ کریں"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"سیکیورٹی کیلئے پیٹرن سیٹ کریں"</string>
@@ -2351,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"دستی طور پر مطابقت پذیری نہيں کر سکتے"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"اس آئٹم کیلئے مطابقت پذیری فی الحال غیر فعال ہے۔ اس ترتیب کو تبدیل کرنے کیلئے، عارضی طور پر پس منظر ڈیٹا اور خود کار مطابقت پذیری کو آن کریں۔"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC پتہ"</string>
<string name="enter_password" msgid="8035706727471334122">"Android کو شروع کرنے کیلئے، اپنا پاس ورڈ درج کریں"</string>
<string name="enter_pin" msgid="5305333588093263790">"Android کو شروع کرنے کیلئے، اپنا PIN درج کریں"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Android کو شروع کرنے کیلئے، اپنا پیٹرن ڈرا کریں"</string>
@@ -2741,6 +2736,7 @@
<string name="dashboard_title" msgid="5453710313046681820">"ترتیبات"</string>
<!-- String.format failed for translation -->
<!-- no translation found for settings_suggestion_header_summary_hidden_items (5597356221942118048) -->
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"سکیڑیں"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"نیٹ ورک اور انٹرنیٹ"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"موبائل"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"ڈیٹا کا استعمال"</string>
@@ -2843,8 +2839,14 @@
<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="842308776768942600">"ڈسٹرب نہ کریں کی ترجیحات"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"صرف ترجیحی اجازتیں"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"ڈسٹرب نہ کریں"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"برتاؤ"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"اس سے آوازیں اور وائبریشنز کی اجازت دیں"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"\'ڈسٹرب نہ کریں\' اصول سیٹ کریں"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"مخصوص اوقات پر آوازیں اور وائبریشنز کو محدود کریں"</string>
@@ -3020,13 +3022,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"الارمز ہمیشہ ترجیحی ہوتے ہیں اور آواز کرتے ہیں"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"منتخب کردہ کالرز"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"بار بار کال کرنے والے"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"اگر ایک ہی شخص <xliff:g id="MINUTES">%d</xliff:g> منٹ کے اندر دوسری بار کال کرتا ہے تو اس کی اجازت دیں"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"ایک ہی شخص کے <xliff:g id="MINUTES">%d</xliff:g> منٹ کے اندر دوسری بار کال کرنے پر"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"خود کار طور پر آن کریں"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"کبھی نہیں"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"ہر رات"</string>
@@ -3055,6 +3058,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"جب اسکرین آف ہو"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"جب اسکرین آن یا آف ہو"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"منتظم PIN درج کریں"</string>
<string name="switch_on_text" msgid="1124106706920572386">"آن"</string>
@@ -3306,7 +3310,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"سسٹم ترتیبات میں ترمیم کر سکتی ہیں"</string>
<string name="write_system_settings" msgid="3482913590601096763">"سسٹم ترتیبات میں ترمیم کریں"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"ایپ \'سسٹم ترتیبات میں ترمیم کریں\' کی اجازت"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"\'سسٹم ترتیبات میں ترمیم کریں\' کی اجازت دیں"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"سسٹم کی ترتیبات میں ترمیم کرنے کی اجازت دیں"</string>
<string name="write_settings_description" msgid="6868293938839954623">"یہ اجازت ایپ کو سسٹم ترتیبات میں ترمیم کرنے دیتی ہے۔"</string>
<string name="write_settings_on" msgid="8230580416068832239">"ہاں"</string>
<string name="write_settings_off" msgid="5156104383386336233">"نہیں"</string>
@@ -3727,7 +3731,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"اپنے نئے ٹیبلیٹ کا ایک ٹؤر لیں"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"اپنے نئے آلے کا ایک ٹؤر لیں"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"یہ خصوصیت اس آلہ میں دستیاب نہیں ہے"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS رجسٹریشن کی صورتحال"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"رجسٹر شدہ"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"رجسٹر نہیں ہے"</string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index f6682b0..1ef0005 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi‑Fi MAC-manzili"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Bluetooth manzili"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Seriya raqami"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Mavjud emas"</string>
<string name="status_up_time" msgid="7294859476816760399">"Faollik vaqti"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Uyg‘oqlik vaqti"</string>
<string name="internal_memory" msgid="9129595691484260784">"Ichki xotira"</string>
@@ -2361,8 +2360,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Qo‘lbola sinxronlanmadi"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Ushbu narsani sinxronlash hozir o‘chirilgan. Bu sozlamani o‘zgartirish uchun vaqtincha fonda trafik yuklashni yoqib, keyin avtomatik sinx-lashga o‘ting."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G tarmog‘i"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC manzili"</string>
<string name="enter_password" msgid="8035706727471334122">"Androidni ishga tushirish uchun parolni kiriting"</string>
<string name="enter_pin" msgid="5305333588093263790">"Androidni ishga tushirish uchun PIN kodni kiriting"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Androidni ishga tushirish uchun chizmali parolni chizing"</string>
@@ -2753,6 +2750,7 @@
<item quantity="other">%d ta yashirin elementni ko‘rsatish</item>
<item quantity="one">%d ta yashirin elementni ko‘rsatish</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Yig‘ish"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Tarmoq va Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"mobil"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"trafik sarfi"</string>
@@ -2855,8 +2853,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> ta avtomatik qoida yoniq</item>
<item quantity="one">1 ta avtomatik qoida yoniq</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Bezovta qilmaslik parametrlari"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Faqat muhimlari"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Bezovta qilinmasin"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Hatti-xarakatlar"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Ovoz va tebranishlarga ruxsat:"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Ovozsiz"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Ovozsiz (jimjitlik)"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Ovozsiz (istisno: <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">"Avtomatik qoidalar"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Bezovta qilmaslik qoidalari"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Tovush va tebranishlarni muayyan vaqtga cheklash"</string>
@@ -3032,13 +3036,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Faqat yulduzchali kontaktlardan"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Hech kimdan"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Signallar"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Signallar doim muhim va ovozsiz qilib bo‘lmaydi"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Eslatmalar"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Tadbirlar"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Barcha abonentlar"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Saralangan abonentlar"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Qayta chaqiruvlar"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Agar abonent <xliff:g id="MINUTES">%d</xliff:g> daqiqa ichida qayta qo‘ng‘iroq qilsa, qo‘ng‘iroq haqida xabar qilinsin"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Agar abonent <xliff:g id="MINUTES">%d</xliff:g> daqiqa ichida qayta qo‘ng‘iroq qilsa, qo‘ng‘iroq haqida xabar qilinsin"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Avtomatik yoqish"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Hech qachon"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Har kuni kechasi"</string>
@@ -3067,6 +3072,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Agar ekran o‘chiq bo‘lsa"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Agar ekran yoniq yoki o‘chiq bo‘lsa"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Bildirishnoma sozlamalari"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"OK"</string>
<string name="device_feedback" msgid="3238056036766293294">"Qurilma haqida fikr-mulohaza"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Administrator PIN kodini kiriting"</string>
<string name="switch_on_text" msgid="1124106706920572386">"YONIQ"</string>
@@ -3232,7 +3238,7 @@
<string name="share_remote_bugreport_dialog_message_finished" msgid="4973886976504823801">"Administratoringiz bu qurilma nosozliklarini tuzatish uchun xatoliklar hisobotini so‘ramoqda. Ilova va ma’lumotlardan foydalanilishi mumkin."</string>
<string name="share_remote_bugreport_dialog_message" msgid="3495929560689435496">"Administratoringiz bu qurilma nosozliklarini tuzatish uchun xatoliklar hisobotini so‘ramoqda. Ilova va ma’lumotlardan foydalanilishi va bu vaqtincha qurilmangizni sekinlashtirishi ham mumkin."</string>
<string name="sharing_remote_bugreport_dialog_message" msgid="5859287696666024466">"Ushbu xatoliklar hisoboti administratoringiz tomonidan yuborilmoqda. Batafsil ma’lumot olish uchun administratoringiz bilan bog‘laning."</string>
- <string name="share_remote_bugreport_action" msgid="532226159318779397">"Baham ko‘rish"</string>
+ <string name="share_remote_bugreport_action" msgid="532226159318779397">"Ulashish"</string>
<string name="decline_remote_bugreport_action" msgid="518720235407565134">"Rad etish"</string>
<string name="usb_use_charging_only" msgid="2180443097365214467">"Shu qurilmani quvvatlash"</string>
<string name="usb_use_charging_only_desc" msgid="3066256793008540627">"Faqat shu qurilmani quvvatlash"</string>
@@ -3318,7 +3324,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Tizim sozlamalarini o‘zgartirishi mumkin"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Tizim sozlamalarini o‘zgartirish"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Tizim sozlamalarini o‘zgartirish uchun ruxsat"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Tizim sozlamalarini o‘zgartirishga ruxsat"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Tizim sozlamalarini o‘zgartirishga ruxsat"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Bu ruxsatnoma ilovaga tizim sozlamalarini o‘zgaritish uchun ruxsat beradi."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Ha"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Yo‘q"</string>
@@ -3739,7 +3745,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Yangi planshetingiz bilan tanishib chiqing"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Yangi qurilmangiz bilan tanishib chiqing"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Bu funksiya ushbu qurilmada ishlamaydi"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS registratsiyasi holati"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Registratsiya qilingan"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Registratsiya qilinmagan"</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 5a39693..7c32d82 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Địa chỉ MAC của Wi‑Fi"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Địa chỉ Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Số sê-ri"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Không có"</string>
<string name="status_up_time" msgid="7294859476816760399">"Thời gian hoạt động"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Thời gian thức"</string>
<string name="internal_memory" msgid="9129595691484260784">"Bộ nhớ trong"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Không thể đồng bộ hóa theo cách thủ công"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Đồng bộ hóa cho mục này hiện đã bị vô hiệu hóa. Để thay đổi cài đặt này, hãy tạm thời bật dữ liệu nền và đồng bộ hóa tự động."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Địa chỉ MAC 4G"</string>
<string name="enter_password" msgid="8035706727471334122">"Để bắt đầu sử dụng thiết bị Android, hãy nhập mật khẩu của bạn"</string>
<string name="enter_pin" msgid="5305333588093263790">"Để bắt đầu sử dụng thiết bị Android, hãy nhập mã PIN của bạn"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Để bắt đầu sử dụng thiết bị Android, hãy vẽ hình mẫu của bạn"</string>
@@ -2741,6 +2738,7 @@
<item quantity="other">Hiển thị %d mục ẩn</item>
<item quantity="one">Hiển thị %d mục ẩn</item>
</plurals>
+ <string name="dashboard_suggestion_condition_footer_content_description" msgid="2898588191174845961">"Thu gọn"</string>
<string name="network_dashboard_title" msgid="4771589228992391573">"Mạng và Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="3851083934739500429">"thiết bị di động"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"sử dụng dữ liệu"</string>
@@ -2843,8 +2841,14 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> quy tắc tự động được bật</item>
<item quantity="one">1 quy tắc tự động được bật</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="842308776768942600">"Tùy chọn Không làm phiền"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"Chỉ cho phép ưu tiên"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"Không làm phiền"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"Hành vi"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"Cho phép âm thanh và rung từ"</string>
+ <string name="zen_mode_behavior_no_sound" msgid="1219626004723208056">"Không có âm báo"</string>
+ <string name="zen_mode_behavior_total_silence" msgid="6716603819806610626">"Hoàn toàn im lặng"</string>
+ <string name="zen_mode_behavior_no_sound_except" msgid="4968477585788243114">"Không có âm báo ngoại trừ <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">"Quy tắc tự động"</string>
<string name="zen_mode_automation_suggestion_title" msgid="5105443455143476201">"Đặt quy tắc Không làm phiền"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"Hạn chế âm thanh và rung tại một số thời điểm"</string>
@@ -3020,13 +3024,14 @@
<string name="zen_mode_from_starred" msgid="2678345811950997027">"Chỉ từ các liên hệ có gắn dấu sao"</string>
<string name="zen_mode_from_none" msgid="8219706639954614136">"Không có"</string>
<string name="zen_mode_alarms" msgid="2165302777886552926">"Báo thức"</string>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"Báo thức luôn được ưu tiên và phát ra âm thanh"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<string name="zen_mode_reminders" msgid="5458502056440485730">"Lời nhắc"</string>
<string name="zen_mode_events" msgid="7914446030988618264">"Sự kiện"</string>
<string name="zen_mode_all_callers" msgid="584186167367236922">"Tất cả người gọi"</string>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"Người gọi được chọn"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"Người gọi lặp lại"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"Nếu cùng một người gọi hai lần trong vòng <xliff:g id="MINUTES">%d</xliff:g> phút, hãy cho phép cuộc gọi này"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"Nếu cùng một người gọi hai lần trong vòng <xliff:g id="MINUTES">%d</xliff:g> phút"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"Tự động bật"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"Không bao giờ"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"Hàng đêm"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Khi màn hình đang tắt"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Khi màn hình đang bật hoặc tắt"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Cài đặt thông báo"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Ok"</string>
<string name="device_feedback" msgid="3238056036766293294">"Gửi phản hồi về thiết bị này"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Nhập mã PIN quản trị"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Bật"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Có thể sửa đổi cài đặt hệ thống"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Sửa đổi cài đặt hệ thống"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Quyền sửa đổi cài đặt hệ thống của ứng dụng"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Cho phép sửa đổi cài đặt hệ thống"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Cho phép sửa đổi cài đặt hệ thống"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Quyền này cho phép ứng dụng sửa đổi cài đặt hệ thống."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Có"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Không"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Tham quan máy tính bảng mới của bạn"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Tham quan thiết bị mới của bạn"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Không sử dụng được tính năng này trên thiết bị này"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Trạng thái đăng ký IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Đã đăng ký"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Chưa được đăng ký"</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 3bd56c0..8b367b0 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"WLAN MAC 地址"</string>
<string name="status_bt_address" msgid="4195174192087439720">"蓝牙地址"</string>
<string name="status_serial_number" msgid="2257111183374628137">"序列号"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"无法获取"</string>
<string name="status_up_time" msgid="7294859476816760399">"已开机时间"</string>
<string name="status_awake_time" msgid="2393949909051183652">"唤醒时间"</string>
<string name="internal_memory" msgid="9129595691484260784">"内部存储空间"</string>
@@ -2349,8 +2348,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"无法手动同步"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"此项内容的同步功能目前未开启。要更改此设置,请暂时开启后台流量和自动同步功能。"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC地址"</string>
<string name="enter_password" msgid="8035706727471334122">"要启动Android,请输入您的密码"</string>
<string name="enter_pin" msgid="5305333588093263790">"要启动Android,请输入您的PIN码"</string>
<string name="enter_pattern" msgid="4187435713036808566">"要启动Android,请绘制您的解锁图案"</string>
@@ -2641,7 +2638,7 @@
<string name="nfc_payment_favor_open" msgid="1923314062109977944">"但其他付款应用开启时除外"</string>
<string name="nfc_payment_pay_with" msgid="7524904024378144072">"通过触碰付款终端进行付款时使用以下应用:"</string>
<string name="nfc_how_it_works_title" msgid="1984068457698797207">"通过支付终端付款"</string>
- <string name="nfc_how_it_works_content" msgid="4749007806393224934">"设置付款应用,然后只需将手机背面触碰任何带有非接触标志的终端即可。"</string>
+ <string name="nfc_how_it_works_content" msgid="4749007806393224934">"设置付款应用,然后只需将手机背面靠近任何带有非接触标志的终端即可。"</string>
<string name="nfc_how_it_works_got_it" msgid="259653300203217402">"知道了"</string>
<string name="nfc_more_title" msgid="815910943655133280">"更多…"</string>
<string name="nfc_payment_set_default_label" msgid="7315817259485674542">"要设为您的偏好设置吗?"</string>
@@ -2741,6 +2738,7 @@
<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_summary_mobile" msgid="3851083934739500429">"移动网络"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"流量使用"</string>
@@ -2843,8 +2841,14 @@
<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="842308776768942600">"“勿扰”偏好设置"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"仅允许指定的优先事项打扰"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"勿扰模式"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"行为"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"允许以下类型的提示音和振动:"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"设置“勿扰”规则"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"在特定时段限制声音和振动"</string>
@@ -3020,13 +3024,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"闹钟始终优先,并发出提示音"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"所选的来电者"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"重复来电者"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"如果同一个人在 <xliff:g id="MINUTES">%d</xliff:g> 分钟内第二次来电,则允许显示通知"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"如果同一个人在 <xliff:g id="MINUTES">%d</xliff:g> 分钟内第二次来电"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"自动开启"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"永不"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"每晚"</string>
@@ -3055,6 +3060,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"屏幕关闭时"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"屏幕开启或关闭时"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"输入管理员 PIN 码"</string>
<string name="switch_on_text" msgid="1124106706920572386">"开启"</string>
@@ -3306,7 +3312,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"可修改系统设置"</string>
<string name="write_system_settings" msgid="3482913590601096763">"修改系统设置"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"允许应用修改系统设置权限"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"允许修改系统设置"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"允许修改系统设置"</string>
<string name="write_settings_description" msgid="6868293938839954623">"此权限允许应用修改系统设置。"</string>
<string name="write_settings_on" msgid="8230580416068832239">"允许"</string>
<string name="write_settings_off" msgid="5156104383386336233">"不允许"</string>
@@ -3727,7 +3733,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"新平板电脑功能导览"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"新设备功能导览"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"该设备不支持此功能"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS 注册状态"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"已注册"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未注册"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 95080ae..5b20f66 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC 位址"</string>
<string name="status_bt_address" msgid="4195174192087439720">"藍牙位址"</string>
<string name="status_serial_number" msgid="2257111183374628137">"序號"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"無法使用"</string>
<string name="status_up_time" msgid="7294859476816760399">"開機時間"</string>
<string name="status_awake_time" msgid="2393949909051183652">"啟用時間"</string>
<string name="internal_memory" msgid="9129595691484260784">"內部儲存空間"</string>
@@ -1472,7 +1471,7 @@
<string name="lockpassword_choose_your_screen_lock_header" msgid="3872462096767152394">"設定螢幕鎖定"</string>
<string name="lockpassword_choose_your_password_message" msgid="1197569283524841412">"為安全起見,請設定密碼"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="2541818487015343503">"如要使用指紋,請設定密碼"</string>
- <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"如要使用指紋,請設定解鎖圖案"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="7709785406243556723">"如要使用指紋,請設定上鎖圖案"</string>
<string name="lockpassword_choose_your_pin_message" msgid="1875420718677275646">"為安全起見,請設定 PIN"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1549639053195796674">"如要使用指紋,請設定 PIN"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="5986983400689720015">"為安全起見,請設定上鎖圖案"</string>
@@ -2352,8 +2351,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"無法手動同步處理"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"這個項目的同步處理功能已停用。如要更改此設定,請暫時開啟背景資料與自動同步處理功能。"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC 位址"</string>
<string name="enter_password" msgid="8035706727471334122">"如要啟動 Android,請輸入密碼"</string>
<string name="enter_pin" msgid="5305333588093263790">"如要啟動 Android,請輸入您的 PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"如要啟動 Android,請畫出解鎖圖案"</string>
@@ -2361,7 +2358,7 @@
<string name="cryptkeeper_wrong_password" msgid="5200857195368904047">"密碼錯誤"</string>
<string name="cryptkeeper_wrong_pin" msgid="755720788765259382">"PIN 錯誤"</string>
<string name="checking_decryption" msgid="8287458611802609493">"正在檢查…"</string>
- <string name="starting_android" msgid="4001324195902252681">"正在啟動 Andriod…"</string>
+ <string name="starting_android" msgid="4001324195902252681">"正在啟動 Android…"</string>
<string name="delete" msgid="4219243412325163003">"刪除"</string>
<string name="misc_files" msgid="6720680815969643497">"其他檔案"</string>
<string name="misc_files_selected_count" msgid="4647048020823912088">"已選取 <xliff:g id="NUMBER">%1$d</xliff:g> 個,共 <xliff:g id="TOTAL">%2$d</xliff:g> 個"</string>
@@ -2744,6 +2741,7 @@
<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_summary_mobile" msgid="3851083934739500429">"流動網絡"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"數據用量"</string>
@@ -2763,7 +2761,7 @@
<string name="keywords_more_default_sms_app" msgid="2265154063220360784">"短訊, 發短訊, 訊息, 傳送短訊"</string>
<string name="keywords_more_mobile_networks" msgid="8995946622054642367">"流動網絡, 流動裝置, 流動網絡供應商, 無線, 數據, 4G, 3G, 2G, LTE"</string>
<string name="keywords_wifi_calling" msgid="1784064367330122679">"WiFi, Wi-Fi, 通話, 撥號中"</string>
- <string name="keywords_home" msgid="3626170808219458848">"應用程式啟動器"</string>
+ <string name="keywords_home" msgid="3626170808219458848">"啟動器"</string>
<string name="keywords_display" msgid="8910345814565493016">"螢幕, 觸控螢幕"</string>
<string name="keywords_display_brightness_level" msgid="3891383826236015854">"螢幕變暗, 觸控螢幕, 電池"</string>
<string name="keywords_display_auto_brightness" msgid="3325150824507953765">"螢幕變暗, 觸控螢幕, 電池"</string>
@@ -2846,8 +2844,14 @@
<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="842308776768942600">"請勿騷擾偏好設定"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"優先設定只允許:"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"請勿打擾"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"行為"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"允許發出下列類型的音效和震動"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"設定請勿騷擾規則"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"在特定時間限制音效和震動"</string>
@@ -3023,13 +3027,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"鬧鐘永遠可優先發出音效"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"已選取的來電者"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"重複來電"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"如果同一人在 <xliff:g id="MINUTES">%d</xliff:g> 分鐘內再次來電,則允許"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"如果同一人在 <xliff:g id="MINUTES">%d</xliff:g> 分鐘內第二次來電"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"自動開啟"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"永不"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"每天晚上"</string>
@@ -3058,6 +3063,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"螢幕關閉時"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"螢幕開啟或關閉時"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"輸入管理員 PIN 碼"</string>
<string name="switch_on_text" msgid="1124106706920572386">"開啟"</string>
@@ -3251,7 +3257,7 @@
<string name="assist_access_screenshot_summary" msgid="6761636689013259901">"允許小幫手應用程式存取螢幕上的圖片"</string>
<string name="assist_flash_title" msgid="506661221230034891">"閃動畫面"</string>
<string name="assist_flash_summary" msgid="9160668468824099262">"輔助應用程式存取畫面上的文字或擷取螢幕畫面時,畫面邊沿會閃動"</string>
- <string name="assist_footer" msgid="1982791172085896864">"小幫手應用程式能根據您正在查看的螢幕資訊提供協助,部分應用程式可同時支援應用程式啟動器及語音輸入服務,提供更全面的協助。"</string>
+ <string name="assist_footer" msgid="1982791172085896864">"小幫手應用程式能根據您正在查看的螢幕資訊提供協助,部分應用程式可同時支援啟動器及語音輸入服務,提供更全面的協助。"</string>
<string name="average_memory_use" msgid="829566450150198512">"平均記憶體用量"</string>
<string name="maximum_memory_use" msgid="7493720799710132496">"最高記憶體用量"</string>
<string name="memory_usage" msgid="1781358557214390033">"記憶體用量"</string>
@@ -3309,7 +3315,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"可以修改系統設定"</string>
<string name="write_system_settings" msgid="3482913590601096763">"修改系統設定"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"應用程式修改系統設定權限"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"允許修改系統設定"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"允許修改系統設定"</string>
<string name="write_settings_description" msgid="6868293938839954623">"此權限允許應用程式修改系統設定。"</string>
<string name="write_settings_on" msgid="8230580416068832239">"允許"</string>
<string name="write_settings_off" msgid="5156104383386336233">"不允許"</string>
@@ -3730,7 +3736,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"探索您的新平板電腦"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"探索您的新裝置"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"這部裝置不支援此功能"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS 註冊狀態"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"已註冊"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未註冊"</string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 163a6d2..9ce51aa 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Wi-Fi MAC 位址"</string>
<string name="status_bt_address" msgid="4195174192087439720">"藍牙位址"</string>
<string name="status_serial_number" msgid="2257111183374628137">"序號"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"無法取得"</string>
<string name="status_up_time" msgid="7294859476816760399">"開機累計時間"</string>
<string name="status_awake_time" msgid="2393949909051183652">"清醒時間"</string>
<string name="internal_memory" msgid="9129595691484260784">"內部儲存空間"</string>
@@ -2353,8 +2352,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"無法手動同步處理"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"這個項目的同步處理功能已停用。如要變更這項設定,請暫時開啟背景資料與自動同步處理功能。"</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"4G MAC 位址"</string>
<string name="enter_password" msgid="8035706727471334122">"如要啟動 Android,請輸入你的密碼"</string>
<string name="enter_pin" msgid="5305333588093263790">"如要啟動 Android,請輸入你的 PIN"</string>
<string name="enter_pattern" msgid="4187435713036808566">"如要啟動 Android,請畫出解鎖圖案"</string>
@@ -2745,6 +2742,7 @@
<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_summary_mobile" msgid="3851083934739500429">"行動網路"</string>
<string name="network_dashboard_summary_data_usage" msgid="3843261364705042212">"數據用量"</string>
@@ -2847,8 +2845,14 @@
<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="842308776768942600">"「零打擾」偏好設定"</string>
- <string name="zen_mode_priority_settings_title" msgid="2623117023031824309">"僅允許優先通知"</string>
+ <string name="zen_mode_settings_title" msgid="1066226840983908121">"零打擾"</string>
+ <string name="zen_mode_behavior_settings_title" msgid="1463303933529313969">"行為"</string>
+ <string name="zen_mode_behavior_allow_title" msgid="3845615648136218141">"只允許下列類型的音效與震動:"</string>
+ <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_automation_suggestion_title" msgid="5105443455143476201">"設定「零打擾」規則"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="4732808039946935657">"在特定時間禁用音效和震動"</string>
@@ -3024,13 +3028,14 @@
<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>
- <string name="zen_mode_alarms_summary" msgid="3774926045611788635">"鬧鐘一律可優先發出音效"</string>
+ <!-- no translation found for zen_mode_media_system_other (8900209390529859777) -->
+ <skip />
<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>
<string name="zen_mode_selected_callers" msgid="3127598874060615742">"所選來電者"</string>
<string name="zen_mode_repeat_callers" msgid="5019521886428322131">"重複來電者"</string>
- <string name="zen_mode_repeat_callers_summary" msgid="7192713032364140137">"如果同一個人在 <xliff:g id="MINUTES">%d</xliff:g> 分鐘的時間內第二次來電,即顯示通知"</string>
+ <string name="zen_mode_repeat_callers_summary" msgid="239685342222975733">"如果同一個人在 <xliff:g id="MINUTES">%d</xliff:g> 分鐘的時間內第二次來電"</string>
<string name="zen_mode_when" msgid="2767193283311106373">"自動開啟"</string>
<string name="zen_mode_when_never" msgid="8809494351918405602">"永遠不要"</string>
<string name="zen_mode_when_every_night" msgid="3122486110091921009">"每晚"</string>
@@ -3059,6 +3064,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"螢幕關閉時"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"螢幕開啟或關閉時"</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>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"輸入管理員 PIN 碼"</string>
<string name="switch_on_text" msgid="1124106706920572386">"開啟"</string>
@@ -3310,7 +3316,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"可以修改系統設定"</string>
<string name="write_system_settings" msgid="3482913590601096763">"修改系統設定"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"應用程式修改系統設定權限"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"允許修改系統設定"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"允許修改系統設定"</string>
<string name="write_settings_description" msgid="6868293938839954623">"這項權限允許應用程式修改系統設定。"</string>
<string name="write_settings_on" msgid="8230580416068832239">"可"</string>
<string name="write_settings_off" msgid="5156104383386336233">"否"</string>
@@ -3731,7 +3737,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"認識你的新平板電腦"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"認識你的新裝置"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"這個裝置不支援此功能"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"IMS 註冊狀態"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"已註冊"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"未註冊"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 11f1a96..473dfcf 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -1159,7 +1159,6 @@
<string name="status_wifi_mac_address" msgid="2202206684020765378">"Ikheli le-Wi-Fi MAC"</string>
<string name="status_bt_address" msgid="4195174192087439720">"Ikheli le-Bluetooth"</string>
<string name="status_serial_number" msgid="2257111183374628137">"Inombolo yomkhiqizo"</string>
- <string name="status_unavailable" msgid="7862009036663793314">"Ayitholakali"</string>
<string name="status_up_time" msgid="7294859476816760399">"Isikhathi esiphezulu"</string>
<string name="status_awake_time" msgid="2393949909051183652">"Isikhathi sokuphaphama"</string>
<string name="internal_memory" msgid="9129595691484260784">"Isitoreji sangaphakathi"</string>
@@ -2350,8 +2349,6 @@
<skip />
<string name="cant_sync_dialog_title" msgid="2777238588398046285">"Ayikwazi ukuvumelanisa ngesandla"</string>
<string name="cant_sync_dialog_message" msgid="1938380442159016449">"Ukuvumelanisa kwalentwana kuvimbelwe okwamanje. Ukushintsha okukhethwayo kwakho, vula idatha yasemuva nokuvumelanisa okuzenzakalelayo."</string>
- <string name="wimax_settings" msgid="2655139497028469039">"4G"</string>
- <string name="status_wimax_mac_address" msgid="8390791848661413416">"Ikheli le-4G MAC"</string>
<string name="enter_password" msgid="8035706727471334122">"Ukuze uqale i-Android, faka iphasiwedi yakho"</string>
<string name="enter_pin" msgid="5305333588093263790">"Ukuze uqale i-Android, faka iphinikhodi yakho"</string>
<string name="enter_pattern" msgid="4187435713036808566">"Ukuze uqale i-Android, dweba iphethini yakho"</string>
@@ -3056,6 +3053,7 @@
<string name="zen_mode_screen_off_visual_interruptions" msgid="4850792880144382633">"Uma isikrini sivaliwe"</string>
<string name="zen_mode_no_visual_interruptions" msgid="8742776003822778472">"Uma isikrini sivuliwe noma sivaliwe"</string>
<string name="notification_app_settings_button" msgid="6685640230371477485">"Izilungiselelo zesaziso"</string>
+ <string name="suggestion_button_text" msgid="3275010948381252006">"Kulungile"</string>
<string name="device_feedback" msgid="3238056036766293294">"Thumela impendulo mayelana nale divayisi"</string>
<string name="restr_pin_enter_admin_pin" msgid="1085834515677448072">"Faka iphinikhodi yomlawuli"</string>
<string name="switch_on_text" msgid="1124106706920572386">"Vuliwe"</string>
@@ -3307,7 +3305,7 @@
<string name="write_settings_title" msgid="4232152481902542284">"Ingashintsha izilungiselelo zesistimu"</string>
<string name="write_system_settings" msgid="3482913590601096763">"Shintsha izilungiselelo zesistimu"</string>
<string name="write_settings_preference" msgid="3407383041273067448">"Imvume yezilungiselelo zesistimu zokushintsha zohlelo lokusebenza"</string>
- <string name="permit_write_settings" msgid="6393779336656870080">"Vumela ukushintsha izilungiselelo zesistimu"</string>
+ <string name="permit_write_settings" msgid="658555006453212691">"Vumela izilungiselelo zesistimu yokushintsha"</string>
<string name="write_settings_description" msgid="6868293938839954623">"Le mvume ivumela uhlelo lokusebenza ukushintsha izilungiselelo zesistimu."</string>
<string name="write_settings_on" msgid="8230580416068832239">"Yebo"</string>
<string name="write_settings_off" msgid="5156104383386336233">"Cha"</string>
@@ -3728,7 +3726,4 @@
<string name="new_device_suggestion_summary" product="tablet" msgid="393751455688210956">"Thatha uhambo kuthebulethi yakho entsha"</string>
<string name="new_device_suggestion_summary" product="device" msgid="2939870049868336652">"Thatha uhambo lwedivayisi yakho entsha"</string>
<string name="disabled_low_ram_device" msgid="3751578499721173344">"Lesi sici asitholakali kule divayisi"</string>
- <string name="ims_reg_title" msgid="7609782759207241443">"Isimo sokubhaliswa se-IMS"</string>
- <string name="ims_reg_status_registered" msgid="933003316932739188">"Kubhalisiwe"</string>
- <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Akubhalisiwe"</string>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index f68323a..ad64069 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2251,9 +2251,6 @@
<string name="summary_placeholder" translatable="false"> </string>
<!-- DO NOT TRANSLATE Summary placeholder reserving 2 lines -->
<string name="summary_two_lines_placeholder" translatable="false"> \n </string>
-
- <!-- DO NOT TRANSLATE Empty summary for dynamic preferences -->
- <string name="summary_empty" translatable="false"></string>
<!-- Sound settings screen, volume title -->
<string name="all_volume_title">Volumes</string>
<!-- Sound settings screen, music effects title [CHAR LIMIT=30]-->
@@ -2371,8 +2368,15 @@
<string name="display_settings">Display</string>
<!-- Sound & display settings screen, accelerometer-based rotation check box label -->
<string name="accelerometer_title">Auto-rotate screen</string>
- <!-- Display settings screen, vivid (or vibrant or saturated) color mode switch label [CHAR LIMIT=30] -->
- <string name="color_mode_title">Vivid colors</string>
+ <!-- Display settings screen, Color mode settings title [CHAR LIMIT=30] -->
+ <string name="color_mode_title">Colors</string>
+ <!-- Display settings screen, Color mode option for "natural(sRGB) color" [CHAR LIMIT=45] -->
+ <string name="color_mode_option_natural">Natural</string>
+ <!-- Display settings screen, Color mode option for "Boosted(sRGB + 10%) color" [CHAR LIMIT=45] -->
+ <string name="color_mode_option_boosted">Boosted</string>
+ <!-- Display settings screen, Color mode option for "Saturated color" [CHAR LIMIT=45] -->
+ <string name="color_mode_option_saturated">Saturated</string>
+
<!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
<string name="accelerometer_summary_on" product="tablet">Switch orientation automatically when rotating tablet</string>
<!-- Sound & display settings screen, accelerometer-based rotation summary text when check box is selected -->
@@ -2622,6 +2626,8 @@
<string name="security_patch">Android security patch level</string>
<!-- About phone screen, status item label [CHAR LIMIT=40] -->
<string name="model_info">Model</string>
+ <!-- About phone screen, status item summary [CHAR LIMIT=40] -->
+ <string name="model_summary">Model: %1$s</string>
<!-- About phone screen, dialog title for showing hardware information such as model, serial number, etc.[CHAR LIMIT=60] -->
<string name="hardware_info">Model & hardware</string>
<!-- Label for device's hardware revision value [CHAR LIMIT=40] -->
@@ -2664,7 +2670,7 @@
<!-- About tablet, status item title. The Mobile Directory Number [CHAR LIMIT=30] -->
<string name="status_number" product="tablet">MDN</string>
<!-- About phone, status item title. The phone number of the current device [CHAR LIMIT=30] -->
- <string name="status_number" product="default">My phone number</string>
+ <string name="status_number" product="default">Phone number</string>
<!-- About phone, status item title. The phone MIN number of the current device.-->
<string name="status_min_number">MIN</string>
<!-- About phone, status item title. The phone MSID number of the current device.-->
@@ -2695,8 +2701,6 @@
<string name="status_bt_address">Bluetooth address</string>
<!-- About phone, status item title. The hardware serial number. [CHAR LIMIT=30]-->
<string name="status_serial_number">Serial number</string>
- <!-- About phone, status item value if the actual value is not available. -->
- <string name="status_unavailable">Unavailable</string>
<!-- About phone, status item title. How long the device has been running since its last reboot. -->
<string name="status_up_time">Up time</string>
<!-- About phone, status item title. How much time the device has had its main CPU awake. -->
@@ -5532,8 +5536,6 @@
<!-- Messaage shown in dialog when you can't manually sync -->
<string name="cant_sync_dialog_message">Sync for this item is currently disabled. To change this setting, temporarily turn on background data and automatic sync.</string>
- <string name="wimax_settings">4G</string>
- <string name="status_wimax_mac_address">4G MAC address</string>
<!-- This is displayed to the user when the device needs to be decrypted -->
<string name="enter_password">To start Android, enter your password</string>
<!-- Informational text on the pin entry screen prompting the user for their pin -->
@@ -6483,6 +6485,9 @@
<item quantity="other">Show %d hidden items</item>
</plurals>
+ <!-- Content description for suggestion footer button. Double tapping will cause suggestion list to collapse [CHAR LIMIT=NONE]-->
+ <string name="dashboard_suggestion_condition_footer_content_description">Collapse</string>
+
<!-- Title for setting tile leading to network and Internet settings [CHAR LIMIT=40]-->
<string name="network_dashboard_title">Network & Internet</string>
<!-- Summary for Network and Internet settings, explaining it contains mobile network setting [CHAR LIMIT=NONE]-->
@@ -6693,10 +6698,25 @@
</plurals>
<!-- Sound: Title for the Do not Disturb option and associated settings page. [CHAR LIMIT=50]-->
- <string name="zen_mode_settings_title">Do Not Disturb preferences</string>
+ <string name="zen_mode_settings_title">Do Not Disturb</string>
- <!-- Do not disturb: Title for the Priority interruptions option and associated settings page. [CHAR LIMIT=30] -->
- <string name="zen_mode_priority_settings_title">Priority only allows</string>
+ <!-- Do not disturb: Title for the behaviors option and associated settings page. [CHAR LIMIT=30] -->
+ <string name="zen_mode_behavior_settings_title">Behavior</string>
+
+ <!-- Do not disturb: Instructions indicating what types of sounds can bypass DND. [CHAR LIMIT=52] -->
+ <string name="zen_mode_behavior_allow_title">Allow sounds and vibrations from</string>
+
+ <!-- Do not disturb: Subtitle for DND behavior indicating no sound will get past DND. [CHAR LIMIT=30] -->
+ <string name="zen_mode_behavior_no_sound">No sound</string>
+
+ <!-- Do not disturb: Subtitle for DND behavior indicating no sound will get past DND due to user and/or API-invoked Total Silence mode. [CHAR LIMIT=40] -->
+ <string name="zen_mode_behavior_total_silence">No sound (Total Silence)</string>
+
+ <!-- Do not disturb: Used before specifying which sounds can bypass DND (ie: No sound except alarms and reminders). [CHAR LIMIT=40] -->
+ <string name="zen_mode_behavior_no_sound_except">No sound except <xliff:g id="categories" example="alarms, media and system feedback">%1$s</xliff:g></string>
+
+ <!-- Do not disturb: Specifies sounds that can bypass DND in user and/or API-invoked Alarms Only mode. [CHAR LIMIT=100] -->
+ <string name="zen_mode_behavior_alarms_only">No sound except alarms, media and system feedback (Alarms only)</string>
<!-- Do not disturb: Title for the zen mode automation listing. [CHAR LIMIT=30] -->
<string name="zen_mode_automation_settings_title">Automatic rules</string>
@@ -7231,8 +7251,8 @@
<!-- [CHAR LIMIT=50] Zen mode settings: Alarms option -->
<string name="zen_mode_alarms">Alarms</string>
- <!-- [CHAR LIMIT=50] Zen mode settings: Alarms option summary -->
- <string name="zen_mode_alarms_summary">Alarms are always a priority and make sound</string>
+ <!-- [CHAR LIMIT=50] Zen mode settings: Media and system sounds option -->
+ <string name="zen_mode_media_system_other">Media and system feedback</string>
<!-- [CHAR LIMIT=50] Zen mode settings: Reminders option -->
<string name="zen_mode_reminders">Reminders</string>
@@ -7250,7 +7270,7 @@
<string name="zen_mode_repeat_callers">Repeat callers</string>
<!-- [CHAR LIMIT=200] Zen mode settings: Repeat callers option summary -->
- <string name="zen_mode_repeat_callers_summary">If the same person calls a second time within a <xliff:g id="minutes">%d</xliff:g> minute period, allow it</string>
+ <string name="zen_mode_repeat_callers_summary">If the same person calls a second time within a <xliff:g id="minutes">%d</xliff:g> minute period</string>
<!-- [CHAR LIMIT=20] Zen mode settings: When option -->
<string name="zen_mode_when">Automatically turn on</string>
@@ -7998,7 +8018,7 @@
<!-- Link to the apps page for WRITE_SETTINGS settings [CHAR LIMIT=52] -->
<string name="write_settings_preference">App modify system settings permission</string>
<!-- Label for setting which controls whether app can write system settings [CHAR LIMIT=45] -->
- <string name="permit_write_settings">Allow modify system settings</string>
+ <string name="permit_write_settings">Allow modifying system settings</string>
<!-- Description of the write system settings [CHAR LIMIT=NONE] -->
<string name="write_settings_description">This permission allows an app to modify system settings.</string>
<!-- Summary of app allowed to write system settings [CHAR LIMIT=45] -->
@@ -9073,10 +9093,4 @@
<!-- Note displayed when certain features are not available on low ram devices. [CHAR LIMIT=NONE] -->
<string name="disabled_low_ram_device">This feature is not available on this device</string>
- <!--Label of IMS registration header -->
- <string name="ims_reg_title">"IMS registration state"</string>
- <!--Used when IMS registration state is registered -->
- <string name="ims_reg_status_registered">"Registered"</string>
- <!--Used when IMS registration state is not registered -->
- <string name="ims_reg_status_not_registered">"Not registered"</string>
</resources>
diff --git a/res/xml/accessibility_shortcut_service_settings.xml b/res/xml/accessibility_shortcut_service_settings.xml
new file mode 100644
index 0000000..573939a
--- /dev/null
+++ b/res/xml/accessibility_shortcut_service_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/accessibility_shortcut_service_title" />
diff --git a/res/xml/app_data_usage.xml b/res/xml/app_data_usage.xml
index 26a339a..3e94135 100644
--- a/res/xml/app_data_usage.xml
+++ b/res/xml/app_data_usage.xml
@@ -14,8 +14,9 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/data_usage_summary_title">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/data_usage_app_summary_title">
<com.android.settings.datausage.SpinnerPreference
android:key="cycle" />
diff --git a/res/xml/app_default_settings.xml b/res/xml/app_default_settings.xml
index 196ed9f..d2a1644 100644
--- a/res/xml/app_default_settings.xml
+++ b/res/xml/app_default_settings.xml
@@ -74,8 +74,8 @@
android:title="@string/domain_urls_title"
android:fragment="com.android.settings.applications.ManageDomainUrls" />
- <com.android.settings.WorkOnlyCategory
- android:key="work_defaults"
+ <com.android.settings.widget.WorkOnlyCategory
+ android:key="work_app_defaults"
android:title="@string/default_for_work">
<Preference
@@ -93,6 +93,6 @@
<extra android:name="for_work" android:value="true" />
</Preference>
- </com.android.settings.WorkOnlyCategory>
+ </com.android.settings.widget.WorkOnlyCategory>
</PreferenceScreen>
diff --git a/res/xml/app_storage_settings.xml b/res/xml/app_storage_settings.xml
index f3f2f75..ba18b1f 100644
--- a/res/xml/app_storage_settings.xml
+++ b/res/xml/app_storage_settings.xml
@@ -14,9 +14,10 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res-auto"
- android:title="@string/application_info_label">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/storage_label">
<com.android.settings.widget.ActionButtonPreference
android:key="header_view" />
diff --git a/res/xml/application_settings.xml b/res/xml/application_settings.xml
deleted file mode 100644
index 9987fc2..0000000
--- a/res/xml/application_settings.xml
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<!--
-
- This code is deprecated. This screen is no longer used in Settings.
- The ApplicationSettings class is kept in case an external app references it directly.
-
--->
-
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/applications_settings"
- android:summary="@string/applications_settings_summary"
- android:key="applications_settings">
-
- <Preference
- android:fragment="com.android.settings.applications.ManageApplications"
- android:title="@string/manageapplications_settings_title"
- android:summary="@string/manageapplications_settings_summary">
- </Preference>
-
- <Preference
- android:fragment="com.android.settings.applications.ManageApplications"
- android:title="@string/runningservices_settings_title"
- android:summary="@string/runningservices_settings_summary">
- <extra android:name="classname" android:value="com.android.settings.Settings$RunningServicesActivity" />
- </Preference>
-
- <Preference
- android:fragment="com.android.settings.applications.ManageApplications"
- android:title="@string/storageuse_settings_title"
- android:summary="@string/storageuse_settings_summary">
- <extra android:name="classname"
- android:value="com.android.settings.Settings$StorageUseActivity" />
- </Preference>
-
- <CheckBoxPreference
- android:key="toggle_advanced_settings"
- android:title="@string/advanced_settings"
- android:summaryOff="@string/advanced_settings_summary"
- android:summaryOn="@string/advanced_settings_summary" />
-
- <ListPreference
- android:key="app_install_location"
- android:title="@string/app_install_location_title"
- android:summary="@string/app_install_location_summary"
- android:entries="@array/app_install_location_entries"
- android:entryValues="@array/app_install_location_values"/>
-
-</PreferenceScreen>
-
diff --git a/res/xml/billing_cycle.xml b/res/xml/billing_cycle.xml
index 8c77ad6..7b61979 100644
--- a/res/xml/billing_cycle.xml
+++ b/res/xml/billing_cycle.xml
@@ -14,8 +14,9 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/data_usage_summary_title">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/billing_cycle">
<Preference
android:key="billing_cycle"
diff --git a/res/xml/bluetooth_device_details_fragment.xml b/res/xml/bluetooth_device_details_fragment.xml
index 5a8609c..c8f5c1b 100644
--- a/res/xml/bluetooth_device_details_fragment.xml
+++ b/res/xml/bluetooth_device_details_fragment.xml
@@ -16,7 +16,7 @@
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/bluetooth_device_advanced_title">
+ android:title="@string/device_details_title">
<com.android.settings.applications.LayoutPreference
android:key="bluetooth_device_header"
diff --git a/res/xml/bluetooth_pairing_detail.xml b/res/xml/bluetooth_pairing_detail.xml
index 30eaf09..e60da75 100644
--- a/res/xml/bluetooth_pairing_detail.xml
+++ b/res/xml/bluetooth_pairing_detail.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/bluetooth_settings">
+ android:title="@string/bluetooth_pairing_pref_title">
<Preference
android:key="device_name"/>
diff --git a/res/xml/current_dream_settings.xml b/res/xml/current_dream_settings.xml
new file mode 100644
index 0000000..d95e830
--- /dev/null
+++ b/res/xml/current_dream_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/screensaver_settings_current" />
diff --git a/res/xml/data_usage_list.xml b/res/xml/data_usage_list.xml
index 64df9c3..41fbff8 100644
--- a/res/xml/data_usage_list.xml
+++ b/res/xml/data_usage_list.xml
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/data_usage_summary_title">
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:key="usage_amount">
diff --git a/res/xml/data_usage_metered_prefs.xml b/res/xml/data_usage_metered_prefs.xml
index aca87fb..ef0faf2 100644
--- a/res/xml/data_usage_metered_prefs.xml
+++ b/res/xml/data_usage_metered_prefs.xml
@@ -15,7 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/display_settings">
+ android:title="@string/network_restrictions">
<PreferenceCategory
android:key="mobile"
diff --git a/res/xml/default_assist_settings.xml b/res/xml/default_assist_settings.xml
new file mode 100644
index 0000000..e1f5900
--- /dev/null
+++ b/res/xml/default_assist_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/default_assist_title" />
diff --git a/res/xml/default_autofill_settings.xml b/res/xml/default_autofill_settings.xml
new file mode 100644
index 0000000..ecf0877
--- /dev/null
+++ b/res/xml/default_autofill_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/autofill_app" />
diff --git a/res/xml/default_browser_settings.xml b/res/xml/default_browser_settings.xml
new file mode 100644
index 0000000..a319a7c
--- /dev/null
+++ b/res/xml/default_browser_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/default_browser_title" />
diff --git a/res/xml/default_emergency_settings.xml b/res/xml/default_emergency_settings.xml
new file mode 100644
index 0000000..db418eb
--- /dev/null
+++ b/res/xml/default_emergency_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/default_emergency_app" />
diff --git a/res/xml/default_home_settings.xml b/res/xml/default_home_settings.xml
new file mode 100644
index 0000000..136f8cc
--- /dev/null
+++ b/res/xml/default_home_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/home_app" />
diff --git a/res/xml/default_phone_settings.xml b/res/xml/default_phone_settings.xml
new file mode 100644
index 0000000..1ae3ab1
--- /dev/null
+++ b/res/xml/default_phone_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/default_phone_title" />
diff --git a/res/xml/default_sms_settings.xml b/res/xml/default_sms_settings.xml
new file mode 100644
index 0000000..0a8bcc3
--- /dev/null
+++ b/res/xml/default_sms_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/sms_application_title" />
diff --git a/res/xml/default_voice_settings.xml b/res/xml/default_voice_settings.xml
new file mode 100644
index 0000000..f75b5ed
--- /dev/null
+++ b/res/xml/default_voice_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/voice_input_settings_title" />
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index a49cfff..20482b7 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -18,6 +18,14 @@
xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
android:key="development_prefs_screen"
android:title="@string/development_settings_title">
+
+ <Preference
+ android:key="memory"
+ android:icon="@drawable/ic_settings_memory"
+ android:title="@string/memory_settings_title"
+ android:summary="@string/summary_empty"
+ android:fragment="com.android.settings.applications.ProcessStatsSummary" />
+
<com.android.settings.BugreportPreference
android:key="bugreport"
android:title="@*android:string/bugreport_title"
@@ -97,11 +105,8 @@
<Preference
android:key="quick_settings_tiles"
- android:title="@string/quick_settings_developer_tiles">
- <intent
- android:targetPackage="com.android.settings"
- android:targetClass="com.android.settings.qstile.DevelopmentTileConfigActivity" />
- </Preference>
+ android:title="@string/quick_settings_developer_tiles"
+ android:fragment="com.android.settings.development.qstile.DevelopmentTileConfigFragment" />
<PreferenceCategory android:key="debug_debugging_category"
android:title="@string/debug_debugging_category">
@@ -275,6 +280,11 @@
android:entries="@array/bluetooth_a2dp_codec_ldac_playback_quality_titles"
android:entryValues="@array/bluetooth_a2dp_codec_ldac_playback_quality_values" />
+ <SwitchPreference
+ android:key="dns_tls"
+ android:title="@string/dns_tls"
+ android:summary="@string/dns_tls_summary" />
+
</PreferenceCategory>
<PreferenceCategory android:key="debug_input_category"
diff --git a/res/xml/development_tile_settings.xml b/res/xml/development_tile_settings.xml
new file mode 100644
index 0000000..f0f71c0
--- /dev/null
+++ b/res/xml/development_tile_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/quick_settings_developer_tiles" />
diff --git a/res/xml/device_info_settings_v2.xml b/res/xml/device_info_settings_v2.xml
new file mode 100644
index 0000000..0553f1e
--- /dev/null
+++ b/res/xml/device_info_settings_v2.xml
@@ -0,0 +1,103 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ android:key="device_info_pref_screen"
+ android:title="@string/about_settings"
+ settings:initialExpandedChildrenCount="6">
+
+ <!-- Phone number -->
+ <Preference
+ android:key="phone_number"
+ android:title="@string/status_number"
+ android:summary="@string/summary_placeholder"/>
+
+ <!-- SIM status -->
+ <Preference
+ android:key="sim_status"
+ android:title="@string/sim_status_title"
+ android:summary="@string/summary_placeholder"/>
+
+ <!-- Model & hardware -->
+ <Preference
+ android:key="device_model"
+ android:title="@string/hardware_info"
+ android:summary="@string/summary_placeholder"/>
+
+ <!-- IMEI -->
+ <Preference
+ android:key="imei_info"
+ android:title="@string/status_imei"
+ android:summary="@string/summary_placeholder"/>
+
+ <!-- Android version -->
+ <Preference
+ android:key="firmware_version"
+ android:title="@string/firmware_version"
+ android:summary="@string/summary_placeholder"/>
+
+ <!--IP address -->
+ <Preference
+ android:key="ip_address"
+ android:title="@string/wifi_ip_address"
+ android:summary="@string/summary_placeholder"
+ settings:allowDividerAbove="true"/>
+
+ <!-- Wi-Fi MAC address -->
+ <Preference
+ android:key="mac_address"
+ android:title="@string/status_wifi_mac_address"
+ android:summary="@string/summary_placeholder"/>
+
+ <!-- Bluetooth address -->
+ <Preference
+ android:key="bluetooth_address"
+ android:title="@string/status_bt_address"
+ android:summary="@string/summary_placeholder"/>
+
+
+ <!-- Legal information -->
+ <Preference
+ android:key="legal_container"
+ android:title="@string/legal_information"
+ android:fragment="com.android.settings.LegalSettings"
+ settings:allowDividerAbove="true"/>
+
+ <!-- Regulatory labels -->
+ <Preference
+ android:key="regulatory_info"
+ android:title="@string/regulatory_labels">
+ <intent android:action="android.settings.SHOW_REGULATORY_INFO"/>
+ </Preference>
+
+ <!-- Safety & regulatory manual -->
+ <Preference
+ android:key="safety_info"
+ android:title="@string/safety_and_regulatory_info">
+ <intent android:action="android.settings.SHOW_SAFETY_AND_REGULATORY_INFO"/>
+ </Preference>
+
+ <!-- Build number -->
+ <Preference
+ android:key="build_number"
+ android:title="@string/build_number"
+ android:summary="@string/summary_placeholder"
+ settings:allowDividerAbove="true"/>
+
+</PreferenceScreen>
\ No newline at end of file
diff --git a/res/xml/device_info_status.xml b/res/xml/device_info_status.xml
index 3456f91..07bbc4e 100644
--- a/res/xml/device_info_status.xml
+++ b/res/xml/device_info_status.xml
@@ -83,13 +83,6 @@
android:summary="@string/summary_placeholder"
android:persistent="false" />
<Preference
- android:key="wimax_mac_address"
- android:enabled="false"
- android:shouldDisableView="false"
- android:title="@string/status_wimax_mac_address"
- android:summary="@string/summary_placeholder"
- android:persistent="false" />
- <Preference
android:key="ims_reg_state"
android:enabled="false"
android:shouldDisableView="false"
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index 27ef869..87d3e5e 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -64,9 +64,11 @@
android:key="auto_rotate"
android:title="@string/accelerometer_title" />
- <SwitchPreference
+ <Preference
android:key="color_mode"
- android:title="@string/color_mode_title" />
+ android:title="@string/color_mode_title"
+ android:fragment="com.android.settings.display.ColorModePreferenceFragment"
+ settings:keywords="@string/keywords_color_mode" />
<Preference
android:key="font_size"
diff --git a/res/xml/feature_flags_settings.xml b/res/xml/feature_flags_settings.xml
new file mode 100644
index 0000000..db652ff
--- /dev/null
+++ b/res/xml/feature_flags_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/feature_flags_dashboard_title" />
diff --git a/res/xml/inactive_apps.xml b/res/xml/inactive_apps.xml
index 27fda55..6f93bdb 100644
--- a/res/xml/inactive_apps.xml
+++ b/res/xml/inactive_apps.xml
@@ -4,9 +4,9 @@
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.
@@ -14,7 +14,9 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/inactive_apps_title">
</PreferenceScreen>
diff --git a/res/xml/installed_app_launch_settings.xml b/res/xml/installed_app_launch_settings.xml
index ac77be1..a2a0ca4 100644
--- a/res/xml/installed_app_launch_settings.xml
+++ b/res/xml/installed_app_launch_settings.xml
@@ -14,8 +14,9 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/application_info_label">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/launch_by_default">
<PreferenceCategory android:key="app_launch_domain_links"
android:title="@string/app_launch_domain_links_title">
diff --git a/res/xml/manage_assist.xml b/res/xml/manage_assist.xml
index a96fb6b..120309a 100644
--- a/res/xml/manage_assist.xml
+++ b/res/xml/manage_assist.xml
@@ -22,7 +22,7 @@
<com.android.settings.widget.GearPreference
android:key="default_assist"
android:title="@string/default_assist_title"
- android:summary="@string/app_list_preference_none"
+ android:summary="@string/summary_placeholder"
android:fragment="com.android.settings.applications.assist.DefaultAssistPicker"/>
<Preference
diff --git a/res/xml/manage_domain_url_settings.xml b/res/xml/manage_domain_url_settings.xml
new file mode 100644
index 0000000..e4e4e47
--- /dev/null
+++ b/res/xml/manage_domain_url_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/domain_urls_title" />
diff --git a/res/xml/nfc_payment_settings.xml b/res/xml/nfc_payment_settings.xml
index 9b47dda..9a5185c 100644
--- a/res/xml/nfc_payment_settings.xml
+++ b/res/xml/nfc_payment_settings.xml
@@ -14,5 +14,7 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/nfc_payment_settings_title">
</PreferenceScreen>
diff --git a/res/xml/notification_access_settings.xml b/res/xml/notification_access_settings.xml
new file mode 100644
index 0000000..1300140
--- /dev/null
+++ b/res/xml/notification_access_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/manage_notification_access_title" />
diff --git a/res/xml/picture_in_picture_settings.xml b/res/xml/picture_in_picture_settings.xml
new file mode 100644
index 0000000..b7091df
--- /dev/null
+++ b/res/xml/picture_in_picture_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/picture_in_picture_title" />
diff --git a/res/xml/premium_sms_settings.xml b/res/xml/premium_sms_settings.xml
new file mode 100644
index 0000000..7bcf11e
--- /dev/null
+++ b/res/xml/premium_sms_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/premium_sms_access" />
diff --git a/res/xml/process_stats_ui.xml b/res/xml/process_stats_ui.xml
index ba9066e..84dccab 100644
--- a/res/xml/process_stats_ui.xml
+++ b/res/xml/process_stats_ui.xml
@@ -16,7 +16,7 @@
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/app_memory_use">
+ android:title="@string/memory_usage_apps">
<PreferenceCategory
android:key="app_list"
diff --git a/res/xml/security_settings_advanced_button.xml b/res/xml/security_settings_advanced_button.xml
new file mode 100644
index 0000000..787b64e
--- /dev/null
+++ b/res/xml/security_settings_advanced_button.xml
@@ -0,0 +1,25 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
+ android:key="security_dashboard_page"
+ android:title="@string/security_settings_title"
+ settings:initialExpandedChildrenCount="9">
+
+</PreferenceScreen>
diff --git a/res/xml/security_settings_misc.xml b/res/xml/security_settings_misc.xml
index 7946dd9..94a4fea 100644
--- a/res/xml/security_settings_misc.xml
+++ b/res/xml/security_settings_misc.xml
@@ -76,7 +76,7 @@
<Preference android:key="usage_access"
android:title="@string/usage_access_title"
- android:fragment="com.android.settings.applications.ManageApplications">
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications">
<extra
android:name="classname"
android:value="com.android.settings.Settings$UsageAccessSettingsActivity" />
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index b0aff02..4d19099 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -70,24 +70,27 @@
android:ringtoneType="ringtone"
settings:allowDividerAbove="true" />
- <!-- Default notification ringtone -->
- <com.android.settings.DefaultRingtonePreference
- android:key="notification_ringtone"
- android:title="@string/notification_ringtone_title"
- android:dialogTitle="@string/notification_ringtone_title"
- android:summary="@string/summary_placeholder"
- android:ringtoneType="notification" />
-
- <!-- Default alarm ringtone -->
- <com.android.settings.DefaultRingtonePreference
- android:key="alarm_ringtone"
- android:title="@string/alarm_ringtone_title"
- android:dialogTitle="@string/alarm_ringtone_title"
- android:summary="@string/summary_placeholder"
- android:persistent="false"
- android:ringtoneType="alarm" />
</PreferenceCategory>
+ <!-- Default notification ringtone -->
+ <com.android.settings.DefaultRingtonePreference
+ android:key="notification_ringtone"
+ android:title="@string/notification_ringtone_title"
+ android:dialogTitle="@string/notification_ringtone_title"
+ android:summary="@string/summary_placeholder"
+ android:ringtoneType="notification"
+ android:order="-99"/>
+
+ <!-- Default alarm ringtone -->
+ <com.android.settings.DefaultRingtonePreference
+ android:key="alarm_ringtone"
+ android:title="@string/alarm_ringtone_title"
+ android:dialogTitle="@string/alarm_ringtone_title"
+ android:summary="@string/summary_placeholder"
+ android:persistent="false"
+ android:ringtoneType="alarm"
+ android:order="-98"/>
+
<!-- Other sounds -->
<PreferenceCategory
android:title="@string/other_sound_category_preference_title"
@@ -153,7 +156,7 @@
android:targetClass="com.android.cellbroadcastreceiver.CellBroadcastSettings" />
</com.android.settingslib.RestrictedPreference>
- <com.android.settings.WorkOnlyCategory
+ <com.android.settings.widget.WorkOnlyCategory
android:key="sound_work_settings_section"
android:title="@string/sound_work_settings"
android:order="100">
@@ -190,5 +193,5 @@
android:ringtoneType="alarm"
android:dependency="work_use_personal_sounds" />
- </com.android.settings.WorkOnlyCategory>
+ </com.android.settings.widget.WorkOnlyCategory>
</PreferenceScreen>
diff --git a/res/xml/sound_settings_new_advance_button.xml b/res/xml/sound_settings_new_advance_button.xml
index 6b0ba0e..a1e1a32 100644
--- a/res/xml/sound_settings_new_advance_button.xml
+++ b/res/xml/sound_settings_new_advance_button.xml
@@ -154,7 +154,7 @@
android:targetClass="com.android.cellbroadcastreceiver.CellBroadcastSettings" />
</com.android.settingslib.RestrictedPreference>
- <com.android.settings.WorkOnlyCategory
+ <com.android.settings.widget.WorkOnlyCategory
android:key="sound_work_settings_section"
android:title="@string/sound_work_settings"
android:order="100">
@@ -191,5 +191,5 @@
android:ringtoneType="alarm"
android:dependency="work_use_personal_sounds" />
- </com.android.settings.WorkOnlyCategory>
+ </com.android.settings.widget.WorkOnlyCategory>
</PreferenceScreen>
diff --git a/res/xml/special_access.xml b/res/xml/special_access.xml
index 6eaede9..32dcf8e 100644
--- a/res/xml/special_access.xml
+++ b/res/xml/special_access.xml
@@ -22,7 +22,7 @@
<Preference
android:key="high_power_apps"
android:title="@string/high_power_apps"
- android:fragment="com.android.settings.applications.ManageApplications"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
settings:keywords="@string/keywords_ignore_optimizations">
<extra
android:name="classname"
@@ -35,14 +35,9 @@
android:fragment="com.android.settings.DeviceAdminSettings" />
<Preference
- android:key="zen_access"
- android:title="@string/manage_zen_access_title"
- android:fragment="com.android.settings.notification.ZenAccessSettings" />
-
- <Preference
android:key="system_alert_window"
android:title="@string/system_alert_window_settings"
- android:fragment="com.android.settings.applications.ManageApplications"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
settings:keywords="@string/keywords_system_alert_window">
<extra
android:name="classname"
@@ -50,19 +45,14 @@
</Preference>
<Preference
- android:key="enabled_vr_listeners"
- android:title="@string/vr_listeners_title"
- android:fragment="com.android.settings.applications.VrListenerSettings"
- settings:keywords="@string/keywords_vr_listener">
- <extra
- android:name="classname"
- android:value="com.android.settings.Settings$VrListenersSettingsActivity" />
- </Preference>
+ android:key="zen_access"
+ android:title="@string/manage_zen_access_title"
+ android:fragment="com.android.settings.notification.ZenAccessSettings" />
<Preference
android:key="write_settings_apps"
android:title="@string/write_settings"
- android:fragment="com.android.settings.applications.ManageApplications"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
settings:keywords="@string/keywords_write_settings">
<extra
android:name="classname"
@@ -91,9 +81,19 @@
android:fragment="com.android.settings.datausage.UnrestrictedDataAccess" />
<Preference
+ android:key="manage_external_sources"
+ android:title="@string/install_other_apps"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
+ settings:keywords="@string/keywords_install_other_apps">
+ <extra
+ android:name="classname"
+ android:value="com.android.settings.Settings$ManageExternalSourcesActivity" />
+ </Preference>
+
+ <Preference
android:key="usage_access"
android:title="@string/usage_access"
- android:fragment="com.android.settings.applications.ManageApplications"
+ android:fragment="com.android.settings.applications.manageapplications.ManageApplications"
settings:keywords="@string/keywords_write_settings">
<extra
android:name="classname"
@@ -101,13 +101,13 @@
</Preference>
<Preference
- android:key="manage_external_sources"
- android:title="@string/install_other_apps"
- android:fragment="com.android.settings.applications.ManageApplications"
- settings:keywords="@string/keywords_install_other_apps">
+ android:key="enabled_vr_listeners"
+ android:title="@string/vr_listeners_title"
+ android:fragment="com.android.settings.applications.VrListenerSettings"
+ settings:keywords="@string/keywords_vr_listener">
<extra
android:name="classname"
- android:value="com.android.settings.Settings$ManageExternalSourcesActivity" />
+ android:value="com.android.settings.Settings$VrListenersSettingsActivity" />
</Preference>
</PreferenceScreen>
diff --git a/res/xml/tether_prefs.xml b/res/xml/tether_prefs.xml
index 1378bba..ce22ad7 100644
--- a/res/xml/tether_prefs.xml
+++ b/res/xml/tether_prefs.xml
@@ -14,8 +14,10 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res-auto">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:title="@string/tether_settings_title_all">
<com.android.settings.widget.MasterSwitchPreference
android:key="wifi_tether"
diff --git a/res/xml/unrestricted_data_access_settings.xml b/res/xml/unrestricted_data_access_settings.xml
new file mode 100644
index 0000000..da8ff0c
--- /dev/null
+++ b/res/xml/unrestricted_data_access_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/unrestricted_data_saver" />
diff --git a/res/xml/vpn_app_management.xml b/res/xml/vpn_app_management.xml
index c044a58..2cf1498 100644
--- a/res/xml/vpn_app_management.xml
+++ b/res/xml/vpn_app_management.xml
@@ -15,8 +15,7 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
- android:title="@string/vpn_title">
+ xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
<Preference
android:key="version"
diff --git a/res/xml/vr_display_settings.xml b/res/xml/vr_display_settings.xml
new file mode 100644
index 0000000..d04435a
--- /dev/null
+++ b/res/xml/vr_display_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/display_vr_pref_title" />
diff --git a/res/xml/vr_listeners_settings.xml b/res/xml/vr_listeners_settings.xml
new file mode 100644
index 0000000..1954596
--- /dev/null
+++ b/res/xml/vr_listeners_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/vr_listeners_title" />
diff --git a/res/xml/webview_app_settings.xml b/res/xml/webview_app_settings.xml
new file mode 100644
index 0000000..c7a611a
--- /dev/null
+++ b/res/xml/webview_app_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/select_webview_provider_title" />
diff --git a/res/xml/when_to_dream_settings.xml b/res/xml/when_to_dream_settings.xml
new file mode 100644
index 0000000..7b91a34
--- /dev/null
+++ b/res/xml/when_to_dream_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/screensaver_settings_when_to_dream" />
diff --git a/res/xml/wifi_display_settings.xml b/res/xml/wifi_display_settings.xml
index 81fb701..2be31d2 100644
--- a/res/xml/wifi_display_settings.xml
+++ b/res/xml/wifi_display_settings.xml
@@ -15,6 +15,6 @@
-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
- android:title="@string/wifi_saved_access_points_titlebar">
+ android:title="@string/wifi_display_settings_title">
</PreferenceScreen>
diff --git a/res/xml/wifi_p2p_settings.xml b/res/xml/wifi_p2p_settings.xml
index 0bdc1cf..405d081 100644
--- a/res/xml/wifi_p2p_settings.xml
+++ b/res/xml/wifi_p2p_settings.xml
@@ -14,7 +14,9 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/wifi_p2p_settings_title">
<Preference
android:key="p2p_this_device"
android:selectable="false" />
diff --git a/res/xml/wifi_tether_settings.xml b/res/xml/wifi_tether_settings.xml
index feed268..d6b8a25 100644
--- a/res/xml/wifi_tether_settings.xml
+++ b/res/xml/wifi_tether_settings.xml
@@ -15,7 +15,9 @@
limitations under the License.
-->
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/wifi_hotspot_checkbox_text">
<com.android.settings.widget.ValidatedEditTextPreference
android:key="wifi_tether_network_name"
diff --git a/res/xml/zen_access_settings.xml b/res/xml/zen_access_settings.xml
new file mode 100644
index 0000000..35cfdb8
--- /dev/null
+++ b/res/xml/zen_access_settings.xml
@@ -0,0 +1,20 @@
+<?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.
+ -->
+
+<PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:title="@string/manage_zen_access_title" />
diff --git a/res/xml/zen_mode_behavior_settings.xml b/res/xml/zen_mode_behavior_settings.xml
new file mode 100644
index 0000000..8281f65
--- /dev/null
+++ b/res/xml/zen_mode_behavior_settings.xml
@@ -0,0 +1,65 @@
+<?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.
+-->
+
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+ android:key="zen_mode_behavior_settings_page"
+ android:title="@string/zen_mode_behavior_settings_title" >
+
+ <PreferenceCategory
+ android:title="@string/zen_mode_behavior_allow_title"
+ android:key="zen_mode_behavior_allow_preferences">
+
+ <!-- Alarms -->
+ <SwitchPreference
+ android:key="zen_mode_alarms"
+ android:title="@string/zen_mode_alarms"/>
+
+ <!-- Media -->
+ <SwitchPreference
+ android:key="zen_mode_media"
+ android:title="@string/zen_mode_media_system_other"/>
+
+ <!-- Reminders -->
+ <SwitchPreference
+ android:key="zen_mode_reminders"
+ android:title="@string/zen_mode_reminders"/>
+
+ <!-- Events -->
+ <SwitchPreference
+ android:key="zen_mode_events"
+ android:title="@string/zen_mode_events"/>
+
+ <!-- Messages -->
+ <DropDownPreference
+ android:key="zen_mode_messages"
+ android:title="@string/zen_mode_messages"
+ android:summary="%s" />
+
+ <!-- Calls -->
+ <DropDownPreference
+ android:key="zen_mode_calls"
+ android:title="@string/zen_mode_calls"
+ android:summary="%s" />
+
+ <!-- Repeat callers -->
+ <SwitchPreference
+ android:key="zen_mode_repeat_callers"
+ android:title="@string/zen_mode_repeat_callers"/>
+
+ </PreferenceCategory>
+
+</PreferenceScreen>
diff --git a/res/xml/zen_mode_priority_settings.xml b/res/xml/zen_mode_priority_settings.xml
deleted file mode 100644
index e4f8f5e..0000000
--- a/res/xml/zen_mode_priority_settings.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2015 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="zen_mode_priority_settings"
- android:title="@string/zen_mode_priority_settings_title" >
-
- <!-- Reminders -->
- <SwitchPreference
- android:key="reminders"
- android:title="@string/zen_mode_reminders"/>
-
- <!-- Events -->
- <SwitchPreference
- android:key="events"
- android:title="@string/zen_mode_events"/>
-
- <!-- Alarms -->
- <SwitchPreference
- android:key="alarms"
- android:title="@string/zen_mode_alarms"
- android:summary="@string/zen_mode_alarms_summary"
- android:enabled="false"
- android:defaultValue="true"/>
-
- <!-- Messages -->
- <DropDownPreference
- android:key="messages"
- android:title="@string/zen_mode_messages"
- android:summary="%s" />
-
- <!-- Calls -->
- <DropDownPreference
- android:key="calls"
- android:title="@string/zen_mode_calls"
- android:summary="%s" />
-
- <!-- Repeat callers -->
- <SwitchPreference
- android:key="repeat_callers"
- android:title="@string/zen_mode_repeat_callers"/>
-
-</PreferenceScreen>
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index 5fc72aa..b8ee41d 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -19,20 +19,19 @@
android:key="zen_mode_settings"
android:title="@string/zen_mode_settings_title" >
- <!-- Priority only allows -->
<Preference
- android:key="priority_settings"
- android:title="@string/zen_mode_priority_settings_title"
- android:fragment="com.android.settings.notification.ZenModePrioritySettings" />
+ android:key="zen_mode_behavior_settings"
+ android:title="@string/zen_mode_behavior_settings_title"
+ android:fragment="com.android.settings.notification.ZenModeBehaviorSettings" />
<!-- Visual interruptions -->
<Preference
- android:key="visual_interruptions_settings"
+ android:key="zen_mode_visual_interruptions_settings"
android:title="@string/zen_mode_visual_interruptions_settings_title"
android:fragment="com.android.settings.notification.ZenModeVisualInterruptionSettings" />
<!-- Automatic rules -->
<PreferenceCategory
- android:key="automatic_rules"
+ android:key="zen_mode_automatic_rules"
android:title="@string/zen_mode_automation_settings_title" />
</PreferenceScreen>
diff --git a/src/com/android/settings/ApplicationSettings.java b/src/com/android/settings/ApplicationSettings.java
deleted file mode 100644
index f005124..0000000
--- a/src/com/android/settings/ApplicationSettings.java
+++ /dev/null
@@ -1,143 +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;
-
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.Settings;
-import android.support.v7.preference.CheckBoxPreference;
-import android.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceChangeListener;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-
-public class ApplicationSettings extends SettingsPreferenceFragment {
-
- private static final String KEY_TOGGLE_ADVANCED_SETTINGS = "toggle_advanced_settings";
- private static final String KEY_APP_INSTALL_LOCATION = "app_install_location";
-
- // App installation location. Default is ask the user.
- private static final int APP_INSTALL_AUTO = 0;
- private static final int APP_INSTALL_DEVICE = 1;
- private static final int APP_INSTALL_SDCARD = 2;
-
- private static final String APP_INSTALL_DEVICE_ID = "device";
- private static final String APP_INSTALL_SDCARD_ID = "sdcard";
- private static final String APP_INSTALL_AUTO_ID = "auto";
-
- private CheckBoxPreference mToggleAdvancedSettings;
- private ListPreference mInstallLocation;
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.APPLICATION;
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- addPreferencesFromResource(R.xml.application_settings);
-
- mToggleAdvancedSettings = (CheckBoxPreference)findPreference(
- KEY_TOGGLE_ADVANCED_SETTINGS);
- mToggleAdvancedSettings.setChecked(isAdvancedSettingsEnabled());
- getPreferenceScreen().removePreference(mToggleAdvancedSettings);
-
- // not ready for prime time yet
- if (false) {
- getPreferenceScreen().removePreference(mInstallLocation);
- }
-
- mInstallLocation = (ListPreference) findPreference(KEY_APP_INSTALL_LOCATION);
- // Is app default install location set?
- boolean userSetInstLocation = (Settings.Global.getInt(getContentResolver(),
- Settings.Global.SET_INSTALL_LOCATION, 0) != 0);
- if (!userSetInstLocation) {
- getPreferenceScreen().removePreference(mInstallLocation);
- } else {
- mInstallLocation.setValue(getAppInstallLocation());
- mInstallLocation.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- String value = (String) newValue;
- handleUpdateAppInstallLocation(value);
- return false;
- }
- });
- }
- }
-
- protected void handleUpdateAppInstallLocation(final String value) {
- if(APP_INSTALL_DEVICE_ID.equals(value)) {
- Settings.Global.putInt(getContentResolver(),
- Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_DEVICE);
- } else if (APP_INSTALL_SDCARD_ID.equals(value)) {
- Settings.Global.putInt(getContentResolver(),
- Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_SDCARD);
- } else if (APP_INSTALL_AUTO_ID.equals(value)) {
- Settings.Global.putInt(getContentResolver(),
- Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
- } else {
- // Should not happen, default to prompt...
- Settings.Global.putInt(getContentResolver(),
- Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
- }
- mInstallLocation.setValue(value);
- }
-
- @Override
- public boolean onPreferenceTreeClick(Preference preference) {
- if (preference == mToggleAdvancedSettings) {
- boolean value = mToggleAdvancedSettings.isChecked();
- setAdvancedSettingsEnabled(value);
- }
-
- return super.onPreferenceTreeClick(preference);
- }
-
- private boolean isAdvancedSettingsEnabled() {
- return Settings.System.getInt(getContentResolver(),
- Settings.System.ADVANCED_SETTINGS,
- Settings.System.ADVANCED_SETTINGS_DEFAULT) > 0;
- }
-
- private void setAdvancedSettingsEnabled(boolean enabled) {
- int value = enabled ? 1 : 0;
- // Change the system setting
- Settings.Secure.putInt(getContentResolver(), Settings.System.ADVANCED_SETTINGS, value);
- // TODO: the settings thing should broadcast this for thread safety purposes.
- Intent intent = new Intent(Intent.ACTION_ADVANCED_SETTINGS_CHANGED);
- intent.putExtra("state", value);
- getActivity().sendBroadcast(intent);
- }
-
- private String getAppInstallLocation() {
- int selectedLocation = Settings.Global.getInt(getContentResolver(),
- Settings.Global.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO);
- if (selectedLocation == APP_INSTALL_DEVICE) {
- return APP_INSTALL_DEVICE_ID;
- } else if (selectedLocation == APP_INSTALL_SDCARD) {
- return APP_INSTALL_SDCARD_ID;
- } else if (selectedLocation == APP_INSTALL_AUTO) {
- return APP_INSTALL_AUTO_ID;
- } else {
- // Default value, should not happen.
- return APP_INSTALL_AUTO_ID;
- }
- }
-}
diff --git a/src/com/android/settings/DeviceAdminSettings.java b/src/com/android/settings/DeviceAdminSettings.java
index 4ae900a..00f4d9c 100644
--- a/src/com/android/settings/DeviceAdminSettings.java
+++ b/src/com/android/settings/DeviceAdminSettings.java
@@ -49,6 +49,7 @@
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.instrumentation.Instrumentable;
import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
@@ -136,6 +137,9 @@
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
Utils.forceCustomPadding(getListView(), true /* additive padding */);
+ if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+ getActivity().setTitle(R.string.manage_device_admin);
+ }
}
@Override
diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java
index abf68f2..630b67e 100644
--- a/src/com/android/settings/DeviceInfoSettings.java
+++ b/src/com/android/settings/DeviceInfoSettings.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.Intent;
import android.provider.SearchIndexableResource;
+import android.util.FeatureFlagUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.dashboard.DashboardFragment;
@@ -48,6 +49,8 @@
public class DeviceInfoSettings extends DashboardFragment implements Indexable {
+ public static final String DEVICE_INFO_V2_FEATURE_FLAG = "device_info_v2";
+
private static final String LOG_TAG = "DeviceInfoSettings";
private static final String KEY_LEGAL_CONTAINER = "legal_container";
@@ -79,7 +82,8 @@
@Override
protected int getPreferenceScreenResId() {
- return R.xml.device_info_settings;
+ return FeatureFlagUtils.isEnabled(DEVICE_INFO_V2_FEATURE_FLAG)
+ ? R.xml.device_info_settings_v2 : R.xml.device_info_settings;
}
@Override
@@ -115,6 +119,37 @@
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
Activity activity, Fragment fragment, Lifecycle lifecycle) {
+ if (FeatureFlagUtils.isEnabled(DEVICE_INFO_V2_FEATURE_FLAG)) {
+ final List<AbstractPreferenceController> controllers = new ArrayList<>();
+
+ // Device name
+
+ // Phone number
+
+ // SIM status
+
+ controllers.add(new DeviceModelPreferenceController(context, fragment));
+
+ // IMEI
+
+ // Android version
+
+ // IP address
+
+ // Wifi MAC address
+
+ // Bluetooth Address
+
+ controllers.add(new RegulatoryInfoPreferenceController(context));
+
+ controllers.add(new SafetyInfoPreferenceController(context));
+
+ controllers.add(
+ new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
+
+ return controllers;
+ }
+
final List<AbstractPreferenceController> controllers = new ArrayList<>();
controllers.add(
new BuildNumberPreferenceController(context, activity, fragment, lifecycle));
@@ -147,7 +182,8 @@
}
@Override
- public List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ public List<AbstractPreferenceController> getPreferenceControllers(
+ Context context) {
return buildPreferenceControllers(context, null /*activity */,
null /* fragment */, null /* lifecycle */);
}
diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java
index 3e139e1..1ae9711 100644
--- a/src/com/android/settings/IccLockSettings.java
+++ b/src/com/android/settings/IccLockSettings.java
@@ -30,10 +30,12 @@
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.EditText;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
@@ -333,6 +335,11 @@
setDialogValues();
mPinDialog.showPinDialog();
+
+ final EditText editText = mPinDialog.getEditText();
+ if (!TextUtils.isEmpty(mPin) && editText != null) {
+ editText.setSelection(mPin.length());
+ }
}
private void setDialogValues() {
diff --git a/src/com/android/settings/MasterClear.java b/src/com/android/settings/MasterClear.java
index 2c97018..bac0a61 100644
--- a/src/com/android/settings/MasterClear.java
+++ b/src/com/android/settings/MasterClear.java
@@ -21,6 +21,7 @@
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AuthenticatorDescription;
+import android.annotation.StringRes;
import android.app.Activity;
import android.content.ComponentName;
import android.content.ContentResolver;
@@ -91,6 +92,12 @@
}
};
+ @Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.master_clear_title;
+ }
+
/**
* Keyguard validation is run using the standard {@link ConfirmLockPattern}
* component as a subactivity
diff --git a/src/com/android/settings/OwnerInfoSettings.java b/src/com/android/settings/OwnerInfoSettings.java
index 18cfb8e..3128dfe 100644
--- a/src/com/android/settings/OwnerInfoSettings.java
+++ b/src/com/android/settings/OwnerInfoSettings.java
@@ -67,6 +67,7 @@
mOwnerInfo = (EditText) mView.findViewById(R.id.owner_info_edit_text);
if (!TextUtils.isEmpty(info)) {
mOwnerInfo.setText(info);
+ mOwnerInfo.setSelection(info.length());
}
}
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 1529e77..b5b8a18 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -16,6 +16,7 @@
package com.android.settings;
+import android.annotation.StringRes;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
@@ -63,6 +64,12 @@
private Spinner mSubscriptionSpinner;
private Button mInitiateButton;
+ @Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.reset_network_title;
+ }
+
/**
* Keyguard validation is run using the standard {@link ConfirmLockPattern}
* component as a subactivity
diff --git a/src/com/android/settings/ScreenPinningSettings.java b/src/com/android/settings/ScreenPinningSettings.java
index 5209cc7..68050b1 100644
--- a/src/com/android/settings/ScreenPinningSettings.java
+++ b/src/com/android/settings/ScreenPinningSettings.java
@@ -65,6 +65,9 @@
super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity();
+ if (usePreferenceScreenTitle()) {
+ activity.setTitle(R.string.screen_pinning_title);
+ }
mLockPatternUtils = new LockPatternUtils(activity);
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 55f21fd..26a9ecb 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -59,6 +59,7 @@
import com.android.settings.TrustAgentUtils.TrustAgentComponentInfo;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.dashboard.DashboardFeatureProvider;
+import com.android.settings.dashboard.ProgressiveDisclosureMixin;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
import com.android.settings.enterprise.ManageDeviceAdminPreferenceController;
@@ -275,7 +276,11 @@
if (root != null) {
root.removeAll();
}
- addPreferencesFromResource(R.xml.security_settings);
+ if (ProgressiveDisclosureMixin.isV2Enabled()) {
+ addPreferencesFromResource(R.xml.security_settings_advanced_button);
+ } else {
+ addPreferencesFromResource(R.xml.security_settings);
+ }
root = getPreferenceScreen();
// Add category for security status
@@ -829,6 +834,8 @@
private static class SecuritySearchIndexProvider extends BaseSearchIndexProvider {
+ // TODO (b/68001777) Refactor indexing to include all XML and block other settings.
+
@Override
public List<SearchIndexableResource> getXmlResourcesToIndex(
Context context, boolean enabled) {
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 089ffac..eac3801 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -56,7 +56,6 @@
public static class ApplicationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ManageApplicationsActivity extends SettingsActivity { /* empty */ }
public static class ManageAssistActivity extends SettingsActivity { /* empty */ }
- public static class AllApplicationsActivity extends SettingsActivity { /* empty */ }
public static class HighPowerApplicationsActivity extends SettingsActivity { /* empty */ }
public static class AppOpsSummaryActivity extends SettingsActivity {
@Override
@@ -74,12 +73,12 @@
* @deprecated in favor of {@link DevelopmentSettingsDashboardActivity}.
*/
@Deprecated
- public static class DevelopmentSettingsActivity extends SettingsActivity { /* empty */ }
- public static class DevelopmentSettingsDashboardActivity extends SettingsActivity {
+ public static class DevelopmentSettingsActivity extends SettingsActivity {
public static final boolean isEnabled() {
- return FeatureFlagUtils.isEnabled("dev_option_v2");
+ return FeatureFlagUtils.isEnabled("dev_option_v1");
}
}
+ public static class DevelopmentSettingsDashboardActivity extends SettingsActivity { /* empty */ }
public static class AccessibilitySettingsActivity extends SettingsActivity { /* empty */ }
public static class CaptioningSettingsActivity extends SettingsActivity { /* empty */ }
public static class AccessibilityInversionSettingsActivity extends SettingsActivity { /* empty */ }
@@ -121,7 +120,7 @@
public static class PrintSettingsActivity extends SettingsActivity { /* empty */ }
public static class PrintJobSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeSettingsActivity extends SettingsActivity { /* empty */ }
- public static class ZenModePrioritySettingsActivity extends SettingsActivity { /* empty */ }
+ public static class ZenModeBehaviorSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeAutomationSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeScheduleRuleSettingsActivity extends SettingsActivity { /* empty */ }
public static class ZenModeEventRuleSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index c927889..7203e24 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -53,7 +53,9 @@
import com.android.internal.util.ArrayUtils;
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;
@@ -208,8 +210,12 @@
@Override
public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) {
- startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
- null, 0);
+ if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+ startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, null, null, 0);
+ } else {
+ startPreferencePanel(caller, pref.getFragment(), pref.getExtras(), -1, pref.getTitle(),
+ null, 0);
+ }
return true;
}
@@ -594,11 +600,10 @@
String intentClass = intent.getComponent().getClassName();
if (intentClass.equals(getClass().getName())) return null;
- if ("com.android.settings.ManageApplications".equals(intentClass)
- || "com.android.settings.RunningServices".equals(intentClass)
+ if ("com.android.settings.RunningServices".equals(intentClass)
|| "com.android.settings.applications.StorageUse".equals(intentClass)) {
// Old names of manage apps.
- intentClass = com.android.settings.applications.ManageApplications.class.getName();
+ intentClass = ManageApplications.class.getName();
}
return intentClass;
@@ -629,7 +634,7 @@
if (titleRes < 0) {
if (titleText != null) {
title = titleText.toString();
- } else {
+ } else if (!InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
// There not much we can do in that case
title = "";
}
@@ -832,16 +837,16 @@
final boolean showDev = DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(this)
&& !um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES);
- final boolean useDevOptionV2 = Settings.DevelopmentSettingsDashboardActivity.isEnabled();
+ final boolean useDevOptionV1 = Settings.DevelopmentSettingsActivity.isEnabled();
// Enable old Dev option if v2 is disabled
somethingChanged = setTileEnabled(new ComponentName(packageName,
Settings.DevelopmentSettingsActivity.class.getName()),
- showDev && !useDevOptionV2, isAdmin)
+ showDev && useDevOptionV1, isAdmin)
|| somethingChanged;
// Enable new Dev option if v2 is enable
somethingChanged = setTileEnabled(new ComponentName(packageName,
Settings.DevelopmentSettingsDashboardActivity.class.getName()),
- showDev && useDevOptionV2, isAdmin)
+ showDev && !useDevOptionV1, isAdmin)
|| somethingChanged;
// Enable/disable backup settings depending on whether the user is admin.
diff --git a/src/com/android/settings/TrustedCredentialsSettings.java b/src/com/android/settings/TrustedCredentialsSettings.java
index 587e814..12524b9 100644
--- a/src/com/android/settings/TrustedCredentialsSettings.java
+++ b/src/com/android/settings/TrustedCredentialsSettings.java
@@ -20,6 +20,7 @@
import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT;
import android.animation.LayoutTransition;
+import android.annotation.StringRes;
import android.annotation.UiThread;
import android.app.Activity;
import android.app.KeyguardManager;
@@ -91,6 +92,12 @@
private static final int REQUEST_CONFIRM_CREDENTIALS = 1;
@Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.trusted_credentials;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsEvent.TRUSTED_CREDENTIALS;
}
diff --git a/src/com/android/settings/UserCredentialsSettings.java b/src/com/android/settings/UserCredentialsSettings.java
index 6cf1ae0..f34b7a7 100644
--- a/src/com/android/settings/UserCredentialsSettings.java
+++ b/src/com/android/settings/UserCredentialsSettings.java
@@ -18,6 +18,7 @@
import android.annotation.LayoutRes;
import android.annotation.Nullable;
+import android.annotation.StringRes;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
@@ -84,6 +85,12 @@
}
}
+ @Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.user_credentials;
+ }
+
protected void announceRemoval(String alias) {
if (!isAdded()) {
return;
diff --git a/src/com/android/settings/Utils.java b/src/com/android/settings/Utils.java
index 3b2ea1a..b108c62 100644
--- a/src/com/android/settings/Utils.java
+++ b/src/com/android/settings/Utils.java
@@ -25,7 +25,6 @@
import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.AppGlobals;
-import android.app.AppOpsManager;
import android.app.Dialog;
import android.app.Fragment;
import android.app.IActivityManager;
@@ -50,6 +49,9 @@
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
import android.hardware.fingerprint.FingerprintManager;
import android.icu.text.MeasureFormat;
import android.icu.text.RelativeDateTimeFormatter;
@@ -100,9 +102,6 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.animation.Animation;
-import android.view.animation.Animation.AnimationListener;
-import android.view.animation.AnimationUtils;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TabWidget;
@@ -111,8 +110,8 @@
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.UserIcons;
import com.android.internal.widget.LockPatternUtils;
-import com.android.settings.wrapper.FingerprintManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
+import com.android.settings.wrapper.FingerprintManagerWrapper;
import java.io.IOException;
import java.io.InputStream;
@@ -239,12 +238,6 @@
return telephony != null && telephony.isVoiceCapable();
}
- public static boolean isWifiOnly(Context context) {
- ConnectivityManager cm = (ConnectivityManager)context.getSystemService(
- Context.CONNECTIVITY_SERVICE);
- return (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false);
- }
-
/**
* Returns the WIFI IP Addresses, if any, taking into account IPv4 and IPv6 style addresses.
* @param context the application context
@@ -1366,4 +1359,50 @@
public static void setEditTextCursorPosition(EditText editText) {
editText.setSelection(editText.getText().length());
}
+
+ /**
+ * Sets the preference icon with a drawable that is scaled down to to avoid crashing Settings if
+ * it's too big.
+ */
+ public static void setSafeIcon(Preference pref, Drawable icon) {
+ Drawable safeIcon = icon;
+ if (icon != null) {
+ safeIcon = getSafeDrawable(icon, 500, 500);
+ }
+ pref.setIcon(safeIcon);
+ }
+
+ /**
+ * Gets a drawable with a limited size to avoid crashing Settings if it's too big.
+ *
+ * @param original original drawable, typically an app icon.
+ * @param maxWidth maximum width, in pixels.
+ * @param maxHeight maximum height, in pixels.
+ */
+ public static Drawable getSafeDrawable(Drawable original, int maxWidth, int maxHeight) {
+ final int actualWidth = original.getMinimumWidth();
+ final int actualHeight = original.getMinimumHeight();
+
+ if (actualWidth <= maxWidth && actualHeight <= maxHeight) {
+ return original;
+ }
+
+ float scaleWidth = ((float) maxWidth) / actualWidth;
+ float scaleHeight = ((float) maxHeight) / actualHeight;
+ float scale = Math.min(scaleWidth, scaleHeight);
+ final int width = (int) (actualWidth * scale);
+ final int height = (int) (actualHeight * scale);
+
+ final Bitmap bitmap;
+ if (original instanceof BitmapDrawable) {
+ bitmap = Bitmap.createScaledBitmap(((BitmapDrawable) original).getBitmap(), width,
+ height, false);
+ } else {
+ bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+ final Canvas canvas = new Canvas(bitmap);
+ original.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ original.draw(canvas);
+ }
+ return new BitmapDrawable(null, bitmap);
+ }
}
diff --git a/src/com/android/settings/WifiCallingSettings.java b/src/com/android/settings/WifiCallingSettings.java
index cb661ed..e872fb8 100644
--- a/src/com/android/settings/WifiCallingSettings.java
+++ b/src/com/android/settings/WifiCallingSettings.java
@@ -16,190 +16,38 @@
package com.android.settings;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
+import android.app.Fragment;
+import android.app.FragmentManager;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
import android.os.Bundle;
-import android.os.PersistableBundle;
-import android.support.v7.preference.ListPreference;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.Preference.OnPreferenceClickListener;
-import android.support.v7.preference.PreferenceScreen;
-import android.telephony.CarrierConfigManager;
-import android.telephony.PhoneStateListener;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
+import android.support.v13.app.FragmentPagerAdapter;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
import android.util.Log;
-import android.widget.Switch;
-import android.widget.TextView;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
import com.android.ims.ImsConfig;
import com.android.ims.ImsManager;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.telephony.Phone;
-import com.android.settings.widget.SwitchBar;
+import com.android.settings.widget.RtlCompatibleViewPager;
+import com.android.settings.widget.SlidingTabLayout;
+
+import java.util.List;
/**
- * "Wi-Fi Calling settings" screen. This preference screen lets you
- * enable/disable Wi-Fi Calling and change Wi-Fi Calling mode.
+ * "Wi-Fi Calling settings" screen. This is the container fragment which holds
+ * {@link WifiCallingSettingsForSub} fragments.
*/
-public class WifiCallingSettings extends SettingsPreferenceFragment
- implements SwitchBar.OnSwitchChangeListener,
- Preference.OnPreferenceChangeListener {
-
+public class WifiCallingSettings extends SettingsPreferenceFragment {
private static final String TAG = "WifiCallingSettings";
-
- //String keys for preference lookup
- private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
- private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
- private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key";
-
- private static final int REQUEST_CHECK_WFC_EMERGENCY_ADDRESS = 1;
-
- public static final String EXTRA_LAUNCH_CARRIER_APP = "EXTRA_LAUNCH_CARRIER_APP";
-
- public static final int LAUCH_APP_ACTIVATE = 0;
- public static final int LAUCH_APP_UPDATE = 1;
+ private List<SubscriptionInfo> mSil;
//UI objects
- private SwitchBar mSwitchBar;
- private Switch mSwitch;
- private ListPreference mButtonWfcMode;
- private ListPreference mButtonWfcRoamingMode;
- private Preference mUpdateAddress;
- private TextView mEmptyView;
-
- private boolean mValidListener = false;
- private boolean mEditableWfcMode = true;
- private boolean mEditableWfcRoamingMode = true;
-
- private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
- /*
- * Enable/disable controls when in/out of a call and depending on
- * TTY mode and TTY support over VoLTE.
- * @see android.telephony.PhoneStateListener#onCallStateChanged(int,
- * java.lang.String)
- */
- @Override
- public void onCallStateChanged(int state, String incomingNumber) {
- final SettingsActivity activity = (SettingsActivity) getActivity();
- boolean isNonTtyOrTtyOnVolteEnabled = ImsManager
- .isNonTtyOrTtyOnVolteEnabled(activity);
- final SwitchBar switchBar = activity.getSwitchBar();
- boolean isWfcEnabled = switchBar.getSwitch().isChecked()
- && isNonTtyOrTtyOnVolteEnabled;
-
- switchBar.setEnabled((state == TelephonyManager.CALL_STATE_IDLE)
- && isNonTtyOrTtyOnVolteEnabled);
-
- boolean isWfcModeEditable = true;
- boolean isWfcRoamingModeEditable = false;
- final CarrierConfigManager configManager = (CarrierConfigManager)
- activity.getSystemService(Context.CARRIER_CONFIG_SERVICE);
- if (configManager != null) {
- PersistableBundle b = configManager.getConfig();
- if (b != null) {
- isWfcModeEditable = b.getBoolean(
- CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
- isWfcRoamingModeEditable = b.getBoolean(
- CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
- }
- }
-
- Preference pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE);
- if (pref != null) {
- pref.setEnabled(isWfcEnabled && isWfcModeEditable
- && (state == TelephonyManager.CALL_STATE_IDLE));
- }
- Preference pref_roam = getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE);
- if (pref_roam != null) {
- pref_roam.setEnabled(isWfcEnabled && isWfcRoamingModeEditable
- && (state == TelephonyManager.CALL_STATE_IDLE));
- }
- }
- };
-
- private final OnPreferenceClickListener mUpdateAddressListener =
- new OnPreferenceClickListener() {
- /*
- * Launch carrier emergency address managemnent activity
- */
- @Override
- public boolean onPreferenceClick(Preference preference) {
- final Context context = getActivity();
- Intent carrierAppIntent = getCarrierActivityIntent(context);
- if (carrierAppIntent != null) {
- carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_UPDATE);
- startActivity(carrierAppIntent);
- }
- return true;
- }
- };
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- final SettingsActivity activity = (SettingsActivity) getActivity();
-
- mSwitchBar = activity.getSwitchBar();
- mSwitch = mSwitchBar.getSwitch();
- mSwitchBar.show();
-
- mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
- setEmptyView(mEmptyView);
- String emptyViewText = activity.getString(R.string.wifi_calling_off_explanation)
- + activity.getString(R.string.wifi_calling_off_explanation_2);
- mEmptyView.setText(emptyViewText);
- }
-
- @Override
- public void onDestroyView() {
- super.onDestroyView();
- mSwitchBar.hide();
- }
-
- private void showAlert(Intent intent) {
- Context context = getActivity();
-
- CharSequence title = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_TITLE);
- CharSequence message = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_MESSAGE);
-
- AlertDialog.Builder builder = new AlertDialog.Builder(context);
- builder.setMessage(message)
- .setTitle(title)
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setPositiveButton(android.R.string.ok, null);
- AlertDialog dialog = builder.create();
- dialog.show();
- }
-
- private IntentFilter mIntentFilter;
-
- private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (action.equals(ImsManager.ACTION_IMS_REGISTRATION_ERROR)) {
- // If this fragment is active then we are immediately
- // showing alert on screen. There is no need to add
- // notification in this case.
- //
- // In order to communicate to ImsPhone that it should
- // not show notification, we are changing result code here.
- setResultCode(Activity.RESULT_CANCELED);
-
- // UX requirement is to disable WFC in case of "permanent" registration failures.
- mSwitch.setChecked(false);
-
- showAlert(intent);
- }
- }
- };
+ private RtlCompatibleViewPager mViewPager;
+ private WifiCallingViewPagerAdapter mPagerAdapter;
+ private SlidingTabLayout mTabLayout;
@Override
public int getMetricsCategory() {
@@ -207,242 +55,81 @@
}
@Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View view = inflater.inflate(R.layout.wifi_calling_settings_tabs, container, false);
- addPreferencesFromResource(R.xml.wifi_calling_settings);
+ mTabLayout = view.findViewById(R.id.sliding_tabs);
+ mViewPager = (RtlCompatibleViewPager) view.findViewById(R.id.view_pager);
- mButtonWfcMode = (ListPreference) findPreference(BUTTON_WFC_MODE);
- mButtonWfcMode.setOnPreferenceChangeListener(this);
+ mPagerAdapter = new WifiCallingViewPagerAdapter(getChildFragmentManager(), mViewPager);
+ mViewPager.setAdapter(mPagerAdapter);
- mButtonWfcRoamingMode = (ListPreference) findPreference(BUTTON_WFC_ROAMING_MODE);
- mButtonWfcRoamingMode.setOnPreferenceChangeListener(this);
-
- mUpdateAddress = (Preference) findPreference(PREFERENCE_EMERGENCY_ADDRESS);
- mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener);
-
- mIntentFilter = new IntentFilter();
- mIntentFilter.addAction(ImsManager.ACTION_IMS_REGISTRATION_ERROR);
-
- CarrierConfigManager configManager = (CarrierConfigManager)
- getSystemService(Context.CARRIER_CONFIG_SERVICE);
- boolean isWifiOnlySupported = true;
- if (configManager != null) {
- PersistableBundle b = configManager.getConfig();
- if (b != null) {
- mEditableWfcMode = b.getBoolean(CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
- mEditableWfcRoamingMode = b.getBoolean(
- CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
- isWifiOnlySupported = b.getBoolean(
- CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true);
- }
- }
-
- if (!isWifiOnlySupported) {
- mButtonWfcMode.setEntries(R.array.wifi_calling_mode_choices_without_wifi_only);
- mButtonWfcMode.setEntryValues(R.array.wifi_calling_mode_values_without_wifi_only);
- mButtonWfcRoamingMode.setEntries(
- R.array.wifi_calling_mode_choices_v2_without_wifi_only);
- mButtonWfcRoamingMode.setEntryValues(
- R.array.wifi_calling_mode_values_without_wifi_only);
- }
+ return view;
}
@Override
- public void onResume() {
- super.onResume();
-
- final Context context = getActivity();
-
- // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
- boolean wfcEnabled = ImsManager.isWfcEnabledByUser(context)
- && ImsManager.isNonTtyOrTtyOnVolteEnabled(context);
- mSwitch.setChecked(wfcEnabled);
- int wfcMode = ImsManager.getWfcMode(context, false);
- int wfcRoamingMode = ImsManager.getWfcMode(context, true);
- mButtonWfcMode.setValue(Integer.toString(wfcMode));
- mButtonWfcRoamingMode.setValue(Integer.toString(wfcRoamingMode));
- updateButtonWfcMode(context, wfcEnabled, wfcMode, wfcRoamingMode);
-
- if (ImsManager.isWfcEnabledByPlatform(context)) {
- TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
-
- mSwitchBar.addOnSwitchChangeListener(this);
-
- mValidListener = true;
- }
-
- context.registerReceiver(mIntentReceiver, mIntentFilter);
-
- Intent intent = getActivity().getIntent();
- if (intent.getBooleanExtra(Phone.EXTRA_KEY_ALERT_SHOW, false)) {
- showAlert(intent);
- }
+ public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ // TODO: besides in onCreate, we should also update subList when SIM / Sub status
+ // changes.
+ updateSubList();
}
@Override
- public void onPause() {
- super.onPause();
+ public void onStart() {
+ super.onStart();
- final Context context = getActivity();
-
- if (mValidListener) {
- mValidListener = false;
-
- TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
-
- mSwitchBar.removeOnSwitchChangeListener(this);
- }
-
- context.unregisterReceiver(mIntentReceiver);
- }
-
- /**
- * Listens to the state change of the switch.
- */
- @Override
- public void onSwitchChanged(Switch switchView, boolean isChecked) {
- final Context context = getActivity();
- Log.d(TAG, "onSwitchChanged(" + isChecked + ")");
-
- if (!isChecked) {
- updateWfcMode(context, false);
- return;
- }
-
- // Call address management activity before turning on WFC
- Intent carrierAppIntent = getCarrierActivityIntent(context);
- if (carrierAppIntent != null) {
- carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_ACTIVATE);
- startActivityForResult(carrierAppIntent, REQUEST_CHECK_WFC_EMERGENCY_ADDRESS);
+ if (mSil != null && mSil.size() > 1) {
+ mTabLayout.setViewPager(mViewPager);
} else {
- updateWfcMode(context, true);
+ mTabLayout.setVisibility(View.GONE);
}
}
- /*
- * Get the Intent to launch carrier emergency address management activity.
- * Return null when no activity found.
- */
- private static Intent getCarrierActivityIntent(Context context) {
- // Retrive component name from carrirt config
- CarrierConfigManager configManager = context.getSystemService(CarrierConfigManager.class);
- if (configManager == null) return null;
+ private final class WifiCallingViewPagerAdapter extends FragmentPagerAdapter {
+ private final RtlCompatibleViewPager mViewPager;
- PersistableBundle bundle = configManager.getConfig();
- if (bundle == null) return null;
-
- String carrierApp = bundle.getString(
- CarrierConfigManager.KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING);
- if (TextUtils.isEmpty(carrierApp)) return null;
-
- ComponentName componentName = ComponentName.unflattenFromString(carrierApp);
- if (componentName == null) return null;
-
- // Build and return intent
- Intent intent = new Intent();
- intent.setComponent(componentName);
- return intent;
- }
-
- /*
- * Turn on/off WFC mode with ImsManager and update UI accordingly
- */
- private void updateWfcMode(Context context, boolean wfcEnabled) {
- Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
- ImsManager.setWfcSetting(context, wfcEnabled);
-
- int wfcMode = ImsManager.getWfcMode(context, false);
- int wfcRoamingMode = ImsManager.getWfcMode(context, true);
- updateButtonWfcMode(context, wfcEnabled, wfcMode, wfcRoamingMode);
- if (wfcEnabled) {
- mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), wfcMode);
- } else {
- mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), -1);
+ public WifiCallingViewPagerAdapter(FragmentManager fragmentManager,
+ RtlCompatibleViewPager viewPager) {
+ super(fragmentManager);
+ mViewPager = viewPager;
}
- }
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- final Context context = getActivity();
-
- if (requestCode == REQUEST_CHECK_WFC_EMERGENCY_ADDRESS) {
- Log.d(TAG, "WFC emergency address activity result = " + resultCode);
-
- if (resultCode == Activity.RESULT_OK) {
- updateWfcMode(context, true);
- }
+ @Override
+ public CharSequence getPageTitle(int position) {
+ return String.valueOf(mSil.get(position).getDisplayName());
}
- }
- private void updateButtonWfcMode(Context context, boolean wfcEnabled,
- int wfcMode, int wfcRoamingMode) {
- mButtonWfcMode.setSummary(getWfcModeSummary(context, wfcMode));
- mButtonWfcMode.setEnabled(wfcEnabled && mEditableWfcMode);
- // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
- mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode);
+ @Override
+ public Fragment getItem(int position) {
+ Log.d(TAG, "Adapter getItem " + position);
+ final Bundle args = new Bundle();
+ args.putInt(WifiCallingSettingsForSub.FRAGMENT_BUNDLE_SUBID,
+ mSil.get(position).getSubscriptionId());
+ WifiCallingSettingsForSub fragment = new WifiCallingSettingsForSub();
+ fragment.setArguments(args);
- final PreferenceScreen preferenceScreen = getPreferenceScreen();
- boolean updateAddressEnabled = (getCarrierActivityIntent(context) != null);
- if (wfcEnabled) {
- if (mEditableWfcMode) {
- preferenceScreen.addPreference(mButtonWfcMode);
+ return fragment;
+ }
+
+ @Override
+ public Object instantiateItem(ViewGroup container, int position) {
+ Log.d(TAG, "Adapter instantiateItem " + position);
+ return super.instantiateItem(container,
+ mViewPager.getRtlAwareIndex(position));
+ }
+
+ @Override
+ public int getCount() {
+ if (mSil == null) {
+ Log.d(TAG, "Adapter getCount null mSil ");
+ return 0;
} else {
- // Don't show WFC (home) preference if it's not editable.
- preferenceScreen.removePreference(mButtonWfcMode);
- }
- if (mEditableWfcRoamingMode) {
- preferenceScreen.addPreference(mButtonWfcRoamingMode);
- } else {
- // Don't show WFC roaming preference if it's not editable.
- preferenceScreen.removePreference(mButtonWfcRoamingMode);
- }
- if (updateAddressEnabled) {
- preferenceScreen.addPreference(mUpdateAddress);
- } else {
- preferenceScreen.removePreference(mUpdateAddress);
- }
- } else {
- preferenceScreen.removePreference(mButtonWfcMode);
- preferenceScreen.removePreference(mButtonWfcRoamingMode);
- preferenceScreen.removePreference(mUpdateAddress);
- }
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final Context context = getActivity();
- if (preference == mButtonWfcMode) {
- mButtonWfcMode.setValue((String) newValue);
- int buttonMode = Integer.valueOf((String) newValue);
- int currentWfcMode = ImsManager.getWfcMode(context, false);
- if (buttonMode != currentWfcMode) {
- ImsManager.setWfcMode(context, buttonMode, false);
- mButtonWfcMode.setSummary(getWfcModeSummary(context, buttonMode));
- mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
- }
- if (!mEditableWfcRoamingMode) {
- int currentWfcRoamingMode = ImsManager.getWfcMode(context, true);
- if (buttonMode != currentWfcRoamingMode) {
- ImsManager.setWfcMode(context, buttonMode, true);
- // mButtonWfcRoamingMode.setSummary is not needed; summary is selected value
- }
- }
- } else if (preference == mButtonWfcRoamingMode) {
- mButtonWfcRoamingMode.setValue((String) newValue);
- int buttonMode = Integer.valueOf((String) newValue);
- int currentMode = ImsManager.getWfcMode(context, true);
- if (buttonMode != currentMode) {
- ImsManager.setWfcMode(context, buttonMode, true);
- // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
- mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
+ Log.d(TAG, "Adapter getCount " + mSil.size());
+ return mSil.size();
}
}
- return true;
}
public static int getWfcModeSummary(Context context, int wfcMode) {
@@ -464,4 +151,22 @@
}
return resId;
}
+
+ private void updateSubList() {
+ mSil = SubscriptionManager.from(getActivity()).getActiveSubscriptionInfoList();
+
+ // Only config Wfc if it's enabled by platform.
+ if (mSil == null) {
+ return;
+ }
+ for (int i = 0; i < mSil.size();) {
+ ImsManager imsManager = ImsManager.getInstance(getActivity(),
+ mSil.get(i).getSimSlotIndex());
+ if (!imsManager.isWfcEnabledByPlatform()) {
+ mSil.remove(i);
+ } else {
+ i++;
+ }
+ }
+ }
}
diff --git a/src/com/android/settings/WifiCallingSettingsForSub.java b/src/com/android/settings/WifiCallingSettingsForSub.java
new file mode 100644
index 0000000..57a4ab2
--- /dev/null
+++ b/src/com/android/settings/WifiCallingSettingsForSub.java
@@ -0,0 +1,521 @@
+/*
+ * 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.Activity;
+import android.app.AlertDialog;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.os.PersistableBundle;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.Preference.OnPreferenceClickListener;
+import android.support.v7.preference.PreferenceScreen;
+import android.telephony.CarrierConfigManager;
+import android.telephony.PhoneStateListener;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Switch;
+import android.widget.TextView;
+
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsManager;
+import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.internal.telephony.Phone;
+import com.android.settings.widget.SwitchBar;
+
+/**
+ * This is the inner class of {@link WifiCallingSettings} fragment.
+ * The preference screen lets you enable/disable Wi-Fi Calling and change Wi-Fi Calling mode.
+ */
+public class WifiCallingSettingsForSub extends SettingsPreferenceFragment
+ implements SwitchBar.OnSwitchChangeListener,
+ Preference.OnPreferenceChangeListener {
+ private static final String TAG = "WifiCallingSettingsForSub";
+
+ //String keys for preference lookup
+ private static final String BUTTON_WFC_MODE = "wifi_calling_mode";
+ private static final String BUTTON_WFC_ROAMING_MODE = "wifi_calling_roaming_mode";
+ private static final String PREFERENCE_EMERGENCY_ADDRESS = "emergency_address_key";
+
+ private static final int REQUEST_CHECK_WFC_EMERGENCY_ADDRESS = 1;
+
+ public static final String EXTRA_LAUNCH_CARRIER_APP = "EXTRA_LAUNCH_CARRIER_APP";
+
+ protected static final String FRAGMENT_BUNDLE_SUBID = "subId";
+
+ public static final int LAUCH_APP_ACTIVATE = 0;
+ public static final int LAUCH_APP_UPDATE = 1;
+
+ //UI objects
+ private SwitchBar mSwitchBar;
+ private Switch mSwitch;
+ private ListPreference mButtonWfcMode;
+ private ListPreference mButtonWfcRoamingMode;
+ private Preference mUpdateAddress;
+ private TextView mEmptyView;
+
+ private boolean mValidListener = false;
+ private boolean mEditableWfcMode = true;
+ private boolean mEditableWfcRoamingMode = true;
+
+ private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
+ private ImsManager mImsManager;
+
+ private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
+ /*
+ * Enable/disable controls when in/out of a call and depending on
+ * TTY mode and TTY support over VoLTE.
+ * @see android.telephony.PhoneStateListener#onCallStateChanged(int,
+ * java.lang.String)
+ */
+ @Override
+ public void onCallStateChanged(int state, String incomingNumber) {
+ final SettingsActivity activity = (SettingsActivity) getActivity();
+ boolean isNonTtyOrTtyOnVolteEnabled = mImsManager.isNonTtyOrTtyOnVolteEnabled();
+ boolean isWfcEnabled = mSwitchBar.isChecked()
+ && isNonTtyOrTtyOnVolteEnabled;
+
+ mSwitchBar.setEnabled((state == TelephonyManager.CALL_STATE_IDLE)
+ && isNonTtyOrTtyOnVolteEnabled);
+
+ boolean isWfcModeEditable = true;
+ boolean isWfcRoamingModeEditable = false;
+ final CarrierConfigManager configManager = (CarrierConfigManager)
+ activity.getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ if (configManager != null) {
+ PersistableBundle b = configManager.getConfigForSubId(mSubId);
+ if (b != null) {
+ isWfcModeEditable = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
+ isWfcRoamingModeEditable = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
+ }
+ }
+
+ Preference pref = getPreferenceScreen().findPreference(BUTTON_WFC_MODE);
+ if (pref != null) {
+ pref.setEnabled(isWfcEnabled && isWfcModeEditable
+ && (state == TelephonyManager.CALL_STATE_IDLE));
+ }
+ Preference pref_roam =
+ getPreferenceScreen().findPreference(BUTTON_WFC_ROAMING_MODE);
+ if (pref_roam != null) {
+ pref_roam.setEnabled(isWfcEnabled && isWfcRoamingModeEditable
+ && (state == TelephonyManager.CALL_STATE_IDLE));
+ }
+ }
+ };
+
+ @Override
+ protected int getHelpResource() {
+ // Helper resource is already defined in the container fragment.
+ return 0;
+ }
+
+ private final OnPreferenceClickListener mUpdateAddressListener =
+ new OnPreferenceClickListener() {
+ /*
+ * Launch carrier emergency address managemnent activity
+ */
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Intent carrierAppIntent = getCarrierActivityIntent();
+ if (carrierAppIntent != null) {
+ carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_UPDATE);
+ startActivity(carrierAppIntent);
+ }
+ return true;
+ }
+ };
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+
+ final SettingsActivity activity = (SettingsActivity) getActivity();
+
+ mEmptyView = (TextView) getView().findViewById(android.R.id.empty);
+ setEmptyView(mEmptyView);
+ String emptyViewText = activity.getString(R.string.wifi_calling_off_explanation)
+ + activity.getString(R.string.wifi_calling_off_explanation_2);
+ mEmptyView.setText(emptyViewText);
+
+ mSwitchBar = getView().findViewById(R.id.switch_bar);
+ mSwitchBar.show();
+ mSwitch = mSwitchBar.getSwitch();
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ mSwitchBar.hide();
+ }
+
+ private void showAlert(Intent intent) {
+ Context context = getActivity();
+
+ CharSequence title = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_TITLE);
+ CharSequence message = intent.getCharSequenceExtra(Phone.EXTRA_KEY_ALERT_MESSAGE);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setMessage(message)
+ .setTitle(title)
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setPositiveButton(android.R.string.ok, null);
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
+
+ private IntentFilter mIntentFilter;
+
+ private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (action.equals(ImsManager.ACTION_IMS_REGISTRATION_ERROR)) {
+ // If this fragment is active then we are immediately
+ // showing alert on screen. There is no need to add
+ // notification in this case.
+ //
+ // In order to communicate to ImsPhone that it should
+ // not show notification, we are changing result code here.
+ setResultCode(Activity.RESULT_CANCELED);
+
+ // UX requirement is to disable WFC in case of "permanent" registration failures.
+ mSwitch.setChecked(false);
+
+ showAlert(intent);
+ }
+ }
+ };
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsEvent.WIFI_CALLING_FOR_SUB;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.wifi_calling_settings);
+
+ // SubId should always be specified when creating this fragment. Either through
+ // fragment.setArguments() or through savedInstanceState.
+ if (getArguments() != null && getArguments().containsKey(FRAGMENT_BUNDLE_SUBID))
+ {
+ mSubId = getArguments().getInt(FRAGMENT_BUNDLE_SUBID);
+ } else if (savedInstanceState != null) {
+ mSubId = savedInstanceState.getInt(
+ FRAGMENT_BUNDLE_SUBID, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+ }
+
+ mImsManager = ImsManager.getInstance(
+ getActivity(), SubscriptionManager.getPhoneId(mSubId));
+
+ mButtonWfcMode = (ListPreference) findPreference(BUTTON_WFC_MODE);
+ mButtonWfcMode.setOnPreferenceChangeListener(this);
+
+ mButtonWfcRoamingMode = (ListPreference) findPreference(BUTTON_WFC_ROAMING_MODE);
+ mButtonWfcRoamingMode.setOnPreferenceChangeListener(this);
+
+ mUpdateAddress = (Preference) findPreference(PREFERENCE_EMERGENCY_ADDRESS);
+ mUpdateAddress.setOnPreferenceClickListener(mUpdateAddressListener);
+
+ mIntentFilter = new IntentFilter();
+ mIntentFilter.addAction(ImsManager.ACTION_IMS_REGISTRATION_ERROR);
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ outState.putInt(FRAGMENT_BUNDLE_SUBID, mSubId);
+ super.onSaveInstanceState(outState);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+
+ View view = inflater.inflate(
+ R.layout.wifi_calling_settings_preferences, container, false);
+
+ final ViewGroup prefs_container = view.findViewById(R.id.prefs_container);
+ Utils.prepareCustomPreferencesList(container, view, prefs_container, false);
+ View prefs = super.onCreateView(inflater, prefs_container, savedInstanceState);
+ prefs_container.addView(prefs);
+
+ return view;
+ }
+
+ private void updateBody() {
+ CarrierConfigManager configManager = (CarrierConfigManager)
+ getSystemService(Context.CARRIER_CONFIG_SERVICE);
+ boolean isWifiOnlySupported = true;
+
+ if (configManager != null) {
+ PersistableBundle b = configManager.getConfigForSubId(mSubId);
+ if (b != null) {
+ mEditableWfcMode = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_MODE_BOOL);
+ mEditableWfcRoamingMode = b.getBoolean(
+ CarrierConfigManager.KEY_EDITABLE_WFC_ROAMING_MODE_BOOL);
+ isWifiOnlySupported = b.getBoolean(
+ CarrierConfigManager.KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, true);
+ }
+ }
+
+ if (!isWifiOnlySupported) {
+ mButtonWfcMode.setEntries(R.array.wifi_calling_mode_choices_without_wifi_only);
+ mButtonWfcMode.setEntryValues(R.array.wifi_calling_mode_values_without_wifi_only);
+ mButtonWfcRoamingMode.setEntries(
+ R.array.wifi_calling_mode_choices_v2_without_wifi_only);
+ mButtonWfcRoamingMode.setEntryValues(
+ R.array.wifi_calling_mode_values_without_wifi_only);
+ }
+
+
+ // NOTE: Buttons will be enabled/disabled in mPhoneStateListener
+ boolean wfcEnabled = mImsManager.isWfcEnabledByUser()
+ && mImsManager.isNonTtyOrTtyOnVolteEnabled();
+ mSwitch.setChecked(wfcEnabled);
+ int wfcMode = mImsManager.getWfcMode(false);
+ int wfcRoamingMode = mImsManager.getWfcMode(true);
+ mButtonWfcMode.setValue(Integer.toString(wfcMode));
+ mButtonWfcRoamingMode.setValue(Integer.toString(wfcRoamingMode));
+ updateButtonWfcMode(wfcEnabled, wfcMode, wfcRoamingMode);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ final Context context = getActivity();
+
+ updateBody();
+
+ if (mImsManager.isWfcEnabledByPlatform()) {
+ TelephonyManager tm =
+ (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
+
+ mSwitchBar.addOnSwitchChangeListener(this);
+
+ mValidListener = true;
+ }
+
+ context.registerReceiver(mIntentReceiver, mIntentFilter);
+
+ Intent intent = getActivity().getIntent();
+ if (intent.getBooleanExtra(Phone.EXTRA_KEY_ALERT_SHOW, false)) {
+ showAlert(intent);
+ }
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+
+ final Context context = getActivity();
+
+ if (mValidListener) {
+ mValidListener = false;
+
+ TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+
+ mSwitchBar.removeOnSwitchChangeListener(this);
+ }
+
+ context.unregisterReceiver(mIntentReceiver);
+ }
+
+ /**
+ * Listens to the state change of the switch.
+ */
+ @Override
+ public void onSwitchChanged(Switch switchView, boolean isChecked) {
+ Log.d(TAG, "onSwitchChanged(" + isChecked + ")");
+
+ if (!isChecked) {
+ updateWfcMode(false);
+ return;
+ }
+
+ // Call address management activity before turning on WFC
+ Intent carrierAppIntent = getCarrierActivityIntent();
+ if (carrierAppIntent != null) {
+ carrierAppIntent.putExtra(EXTRA_LAUNCH_CARRIER_APP, LAUCH_APP_ACTIVATE);
+ startActivityForResult(carrierAppIntent, REQUEST_CHECK_WFC_EMERGENCY_ADDRESS);
+ } else {
+ updateWfcMode(true);
+ }
+ }
+
+ /*
+ * Get the Intent to launch carrier emergency address management activity.
+ * Return null when no activity found.
+ */
+ private Intent getCarrierActivityIntent() {
+ // Retrive component name from carrier config
+ CarrierConfigManager configManager =
+ getActivity().getSystemService(CarrierConfigManager.class);
+ if (configManager == null) return null;
+
+ PersistableBundle bundle = configManager.getConfigForSubId(mSubId);
+ if (bundle == null) return null;
+
+ String carrierApp = bundle.getString(
+ CarrierConfigManager.KEY_WFC_EMERGENCY_ADDRESS_CARRIER_APP_STRING);
+ if (TextUtils.isEmpty(carrierApp)) return null;
+
+ ComponentName componentName = ComponentName.unflattenFromString(carrierApp);
+ if (componentName == null) return null;
+
+ // Build and return intent
+ Intent intent = new Intent();
+ intent.setComponent(componentName);
+ return intent;
+ }
+
+ /*
+ * Turn on/off WFC mode with ImsManager and update UI accordingly
+ */
+ private void updateWfcMode(boolean wfcEnabled) {
+ Log.i(TAG, "updateWfcMode(" + wfcEnabled + ")");
+ mImsManager.setWfcSetting(wfcEnabled);
+
+ int wfcMode = mImsManager.getWfcMode(false);
+ int wfcRoamingMode = mImsManager.getWfcMode(true);
+ updateButtonWfcMode(wfcEnabled, wfcMode, wfcRoamingMode);
+ if (wfcEnabled) {
+ mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), wfcMode);
+ } else {
+ mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), -1);
+ }
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ final Context context = getActivity();
+
+ if (requestCode == REQUEST_CHECK_WFC_EMERGENCY_ADDRESS) {
+ Log.d(TAG, "WFC emergency address activity result = " + resultCode);
+
+ if (resultCode == Activity.RESULT_OK) {
+ updateWfcMode(true);
+ }
+ }
+ }
+
+ private void updateButtonWfcMode(boolean wfcEnabled,
+ int wfcMode, int wfcRoamingMode) {
+ mButtonWfcMode.setSummary(getWfcModeSummary(wfcMode));
+ mButtonWfcMode.setEnabled(wfcEnabled && mEditableWfcMode);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
+ mButtonWfcRoamingMode.setEnabled(wfcEnabled && mEditableWfcRoamingMode);
+
+ final PreferenceScreen preferenceScreen = getPreferenceScreen();
+ boolean updateAddressEnabled = (getCarrierActivityIntent() != null);
+ if (wfcEnabled) {
+ if (mEditableWfcMode) {
+ preferenceScreen.addPreference(mButtonWfcMode);
+ } else {
+ // Don't show WFC (home) preference if it's not editable.
+ preferenceScreen.removePreference(mButtonWfcMode);
+ }
+ if (mEditableWfcRoamingMode) {
+ preferenceScreen.addPreference(mButtonWfcRoamingMode);
+ } else {
+ // Don't show WFC roaming preference if it's not editable.
+ preferenceScreen.removePreference(mButtonWfcRoamingMode);
+ }
+ if (updateAddressEnabled) {
+ preferenceScreen.addPreference(mUpdateAddress);
+ } else {
+ preferenceScreen.removePreference(mUpdateAddress);
+ }
+ } else {
+ preferenceScreen.removePreference(mButtonWfcMode);
+ preferenceScreen.removePreference(mButtonWfcRoamingMode);
+ preferenceScreen.removePreference(mUpdateAddress);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (preference == mButtonWfcMode) {
+ Log.d(TAG, "onPreferenceChange mButtonWfcMode " + newValue);
+ mButtonWfcMode.setValue((String) newValue);
+ int buttonMode = Integer.valueOf((String) newValue);
+ int currentWfcMode = mImsManager.getWfcMode(false);
+ if (buttonMode != currentWfcMode) {
+ mImsManager.setWfcMode(buttonMode, false);
+ mButtonWfcMode.setSummary(getWfcModeSummary(buttonMode));
+ mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
+ }
+ if (!mEditableWfcRoamingMode) {
+ int currentWfcRoamingMode = mImsManager.getWfcMode(true);
+ if (buttonMode != currentWfcRoamingMode) {
+ mImsManager.setWfcMode(buttonMode, true);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is selected value
+ }
+ }
+ } else if (preference == mButtonWfcRoamingMode) {
+ mButtonWfcRoamingMode.setValue((String) newValue);
+ int buttonMode = Integer.valueOf((String) newValue);
+ int currentMode = mImsManager.getWfcMode(true);
+ if (buttonMode != currentMode) {
+ mImsManager.setWfcMode(buttonMode, true);
+ // mButtonWfcRoamingMode.setSummary is not needed; summary is just selected value.
+ mMetricsFeatureProvider.action(getActivity(), getMetricsCategory(), buttonMode);
+ }
+ }
+ return true;
+ }
+
+ private int getWfcModeSummary(int wfcMode) {
+ int resId = com.android.internal.R.string.wifi_calling_off_summary;
+ if (mImsManager.isWfcEnabledByUser()) {
+ switch (wfcMode) {
+ case ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY:
+ resId = com.android.internal.R.string.wfc_mode_wifi_only_summary;
+ break;
+ case ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED:
+ resId = com.android.internal.R.string.wfc_mode_cellular_preferred_summary;
+ break;
+ case ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED:
+ resId = com.android.internal.R.string.wfc_mode_wifi_preferred_summary;
+ break;
+ default:
+ Log.e(TAG, "Unexpected WFC mode value: " + wfcMode);
+ }
+ }
+ return resId;
+ }
+}
diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java
index a335c83..0fbf5fa 100644
--- a/src/com/android/settings/accessibility/AccessibilitySettings.java
+++ b/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -20,6 +20,7 @@
import android.app.admin.DevicePolicyManager;
import android.content.ComponentName;
import android.content.Context;
+import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
@@ -118,6 +119,7 @@
static final String EXTRA_PREFERENCE_KEY = "preference_key";
static final String EXTRA_CHECKED = "checked";
static final String EXTRA_TITLE = "title";
+ static final String EXTRA_RESOLVE_INFO = "resolve_info";
static final String EXTRA_SUMMARY = "summary";
static final String EXTRA_SETTINGS_TITLE = "settings_title";
static final String EXTRA_COMPONENT_NAME = "component_name";
@@ -464,28 +466,28 @@
}
for (int i = 0, count = installedServices.size(); i < count; ++i) {
- AccessibilityServiceInfo info = installedServices.get(i);
+ final AccessibilityServiceInfo info = installedServices.get(i);
+ final ResolveInfo resolveInfo = info.getResolveInfo();
RestrictedPreference preference =
new RestrictedPreference(downloadedServicesCategory.getContext());
- String title = info.getResolveInfo().loadLabel(getPackageManager()).toString();
+ final String title = resolveInfo.loadLabel(getPackageManager()).toString();
Drawable icon;
- if (info.getResolveInfo().getIconResource() == 0) {
+ if (resolveInfo.getIconResource() == 0) {
icon = ContextCompat.getDrawable(getContext(), R.mipmap.ic_accessibility_generic);
} else {
- icon = info.getResolveInfo().loadIcon(getPackageManager());
+ icon = resolveInfo.loadIcon(getPackageManager());
}
- ServiceInfo serviceInfo = info.getResolveInfo().serviceInfo;
+ ServiceInfo serviceInfo = resolveInfo.serviceInfo;
String packageName = serviceInfo.packageName;
ComponentName componentName = new ComponentName(packageName, serviceInfo.name);
- String componentNameKey = componentName.flattenToString();
preference.setKey(componentName.flattenToString());
preference.setTitle(title);
- preference.setIcon(icon);
+ Utils.setSafeIcon(preference, icon);
final boolean serviceEnabled = accessibilityEnabled
&& enabledServices.contains(componentName);
final String serviceState = serviceEnabled ?
@@ -520,6 +522,9 @@
extras.putString(EXTRA_PREFERENCE_KEY, preference.getKey());
extras.putBoolean(EXTRA_CHECKED, serviceEnabled);
extras.putString(EXTRA_TITLE, title);
+ if (usePreferenceScreenTitle()) {
+ extras.putParcelable(EXTRA_RESOLVE_INFO, resolveInfo);
+ }
String description = info.loadDescription(getPackageManager());
if (TextUtils.isEmpty(description)) {
diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
index 4e95cad..0f6bdd7 100644
--- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java
@@ -24,7 +24,6 @@
import android.provider.Settings;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
-import android.text.TextUtils;
import android.view.accessibility.AccessibilityManager;
import android.widget.Switch;
@@ -60,7 +59,9 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.accessibility_shortcut_settings);
+ if (!usePreferenceScreenTitle()) {
+ addPreferencesFromResource(R.xml.accessibility_shortcut_settings);
+ }
mServicePreference = findPreference(SHORTCUT_SERVICE_KEY);
mOnLockScreenSwitchPreference = (SwitchPreference) findPreference(ON_LOCK_SCREEN_KEY);
mOnLockScreenSwitchPreference.setOnPreferenceChangeListener((Preference p, Object o) -> {
@@ -80,6 +81,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.accessibility_shortcut_settings;
+ }
+
+ @Override
protected void onInstallSwitchBarToggleSwitch() {
super.onInstallSwitchBarToggleSwitch();
mSwitchBar.addOnSwitchChangeListener((Switch switchView, boolean enabled) -> {
diff --git a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
index 07f4c37..5b0e76d 100644
--- a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
+++ b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
@@ -23,6 +23,7 @@
import android.app.DialogFragment;
import android.app.Fragment;
import android.content.ComponentName;
+import android.content.Context;
import android.content.DialogInterface;
import android.os.Binder;
import android.os.Bundle;
@@ -33,6 +34,7 @@
import android.view.accessibility.AccessibilityManager;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.R;
import com.android.settings.applications.defaultapps.DefaultAppInfo;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
@@ -53,8 +55,14 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.accessibility_shortcut_service_settings;
+ }
+
+ @Override
protected List<? extends DefaultAppInfo> getCandidates() {
- final AccessibilityManager accessibilityManager = getContext()
+ final Context context = getContext();
+ final AccessibilityManager accessibilityManager = context
.getSystemService(AccessibilityManager.class);
final List<AccessibilityServiceInfo> installedServices =
accessibilityManager.getInstalledAccessibilityServiceList();
@@ -63,7 +71,7 @@
List<DefaultAppInfo> candidates = new ArrayList<>(numInstalledServices);
for (int i = 0; i < numInstalledServices; i++) {
AccessibilityServiceInfo installedServiceInfo = installedServices.get(i);
- candidates.add(new DefaultAppInfo(mPm,
+ candidates.add(new DefaultAppInfo(context, mPm,
UserHandle.myUserId(),
installedServiceInfo.getComponentName(),
(String) installedServiceInfo.loadSummary(mPm.getPackageManager()),
diff --git a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
index 16df03e..5fa38e1 100644
--- a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java
@@ -110,10 +110,17 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.accessibility_autoclick_settings;
+ }
+
+ @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.accessibility_autoclick_settings);
+ if (!usePreferenceScreenTitle()) {
+ addPreferencesFromResource(R.xml.accessibility_autoclick_settings);
+ }
int delay = Settings.Secure.getInt(
getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY,
@@ -153,7 +160,9 @@
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- setTitle(getString(R.string.accessibility_autoclick_preference_title));
+ if (!usePreferenceScreenTitle()) {
+ setTitle(getString(R.string.accessibility_autoclick_preference_title));
+ }
}
@Override
diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
index 64d38af..6ee7217 100644
--- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -50,7 +50,9 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.accessibility_daltonizer_settings);
+ if (!usePreferenceScreenTitle()) {
+ addPreferencesFromResource(R.xml.accessibility_daltonizer_settings);
+ }
mType = (ListPreference) findPreference("type");
@@ -62,6 +64,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.accessibility_daltonizer_settings;
+ }
+
+ @Override
protected void onPreferenceToggled(String preferenceKey, boolean enabled) {
Settings.Secure.putInt(getContentResolver(), ENABLED, enabled ? 1 : 0);
}
@@ -80,7 +87,9 @@
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- setTitle(getString(R.string.accessibility_display_daltonizer_preference_title));
+ if (!usePreferenceScreenTitle()) {
+ setTitle(getString(R.string.accessibility_display_daltonizer_preference_title));
+ }
}
@Override
diff --git a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
index f66fb4d..213e585 100644
--- a/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFeaturePreferenceFragment.java
@@ -17,6 +17,7 @@
package com.android.settings.accessibility;
import android.content.Intent;
+import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -49,9 +50,14 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
- getActivity());
- setPreferenceScreen(preferenceScreen);
+ final int resId = getPreferenceScreenResId();
+ if (usePreferenceScreenTitle() && resId > 0) {
+ addPreferencesFromResource(resId);
+ } else {
+ PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(
+ getActivity());
+ setPreferenceScreen(preferenceScreen);
+ }
}
@Override
@@ -98,6 +104,13 @@
// Implement this to reset a checked listener.
}
+ /**
+ * Get the res id for static preference xml for this fragment.
+ */
+ protected int getPreferenceScreenResId() {
+ return -1;
+ }
+
private void installActionBarToggleSwitch() {
mSwitchBar.show();
onInstallSwitchBarToggleSwitch();
@@ -124,7 +137,11 @@
}
// Title.
- if (arguments.containsKey(AccessibilitySettings.EXTRA_TITLE)) {
+ if (usePreferenceScreenTitle()
+ && arguments.containsKey(AccessibilitySettings.EXTRA_RESOLVE_INFO)) {
+ ResolveInfo info = arguments.getParcelable(AccessibilitySettings.EXTRA_RESOLVE_INFO);
+ getActivity().setTitle(info.loadLabel(getPackageManager()).toString());
+ } else if (arguments.containsKey(AccessibilitySettings.EXTRA_TITLE)) {
setTitle(arguments.getString(AccessibilitySettings.EXTRA_TITLE));
}
diff --git a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
index c200d17..dbd269a 100644
--- a/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleFontSizePreferenceFragment.java
@@ -17,6 +17,7 @@
package com.android.settings.accessibility;
import android.annotation.Nullable;
+import android.annotation.StringRes;
import android.content.ContentResolver;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -55,6 +56,12 @@
}
@Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.title_font_size;
+ }
+
+ @Override
protected Configuration createConfig(Configuration origConfig, int index) {
// Populate the sample layouts.
final Configuration config = new Configuration(origConfig);
diff --git a/src/com/android/settings/applications/AppInfoBase.java b/src/com/android/settings/applications/AppInfoBase.java
index ddf3bf5..f20944d 100644
--- a/src/com/android/settings/applications/AppInfoBase.java
+++ b/src/com/android/settings/applications/AppInfoBase.java
@@ -16,6 +16,8 @@
package com.android.settings.applications;
+import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -42,6 +44,7 @@
import com.android.settings.SettingsActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
@@ -51,8 +54,6 @@
import java.util.ArrayList;
-import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
-
public abstract class AppInfoBase extends SettingsPreferenceFragment
implements ApplicationsState.Callbacks {
diff --git a/src/com/android/settings/applications/AppOpsDetails.java b/src/com/android/settings/applications/AppOpsDetails.java
index b488af6..0e41cab 100644
--- a/src/com/android/settings/applications/AppOpsDetails.java
+++ b/src/com/android/settings/applications/AppOpsDetails.java
@@ -40,6 +40,7 @@
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
diff --git a/src/com/android/settings/applications/AppStateInstallAppsBridge.java b/src/com/android/settings/applications/AppStateInstallAppsBridge.java
index cc7fb62..0c3582e 100644
--- a/src/com/android/settings/applications/AppStateInstallAppsBridge.java
+++ b/src/com/android/settings/applications/AppStateInstallAppsBridge.java
@@ -135,7 +135,7 @@
}
}
- static final AppFilter FILTER_APP_SOURCES = new AppFilter() {
+ public static final AppFilter FILTER_APP_SOURCES = new AppFilter() {
@Override
public void init() {
diff --git a/src/com/android/settings/applications/BackgroundCheckSummary.java b/src/com/android/settings/applications/BackgroundCheckSummary.java
index dd5c89c..1b8a787 100644
--- a/src/com/android/settings/applications/BackgroundCheckSummary.java
+++ b/src/com/android/settings/applications/BackgroundCheckSummary.java
@@ -16,6 +16,7 @@
package com.android.settings.applications;
+import android.annotation.StringRes;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.preference.PreferenceFrameLayout;
@@ -57,4 +58,11 @@
return rootView;
}
+
+ @Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.background_check_pref;
+ }
+
}
diff --git a/src/com/android/settings/applications/ConvertToFbe.java b/src/com/android/settings/applications/ConvertToFbe.java
index c5e6d77..192cd14 100644
--- a/src/com/android/settings/applications/ConvertToFbe.java
+++ b/src/com/android/settings/applications/ConvertToFbe.java
@@ -15,6 +15,7 @@
*/
package com.android.settings.applications;
+import android.annotation.Nullable;
import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
@@ -28,6 +29,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.InstrumentedFragment;
+import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.password.ChooseLockSettingsHelper;
/* Class to prompt for conversion of userdata to file based encryption
@@ -45,6 +47,14 @@
}
@Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+ getActivity().setTitle(R.string.convert_to_file_encryption);
+ }
+ }
+
+ @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.convert_fbe, null);
diff --git a/src/com/android/settings/applications/DefaultAppSettings.java b/src/com/android/settings/applications/DefaultAppSettings.java
index 5b15e51..1487da3 100644
--- a/src/com/android/settings/applications/DefaultAppSettings.java
+++ b/src/com/android/settings/applications/DefaultAppSettings.java
@@ -26,11 +26,12 @@
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.DefaultPaymentSettingsPreferenceController;
import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
import com.android.settings.applications.defaultapps.DefaultWorkBrowserPreferenceController;
+import com.android.settings.widget.WorkOnlyCategoryPreferenceController;
import com.android.settings.applications.defaultapps.DefaultWorkPhonePreferenceController;
-import com.android.settings.applications.defaultapps.DefaultPaymentSettingsPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
@@ -45,6 +46,7 @@
static final String TAG = "DefaultAppSettings";
+ private static final String KEY_DEFAULT_WORK_CATEGORY = "work_app_defaults";
private static final String KEY_ASSIST_VOICE_INPUT = "assist_and_voice_input";
@Override
@@ -69,12 +71,16 @@
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
+ final List<AbstractPreferenceController> workControllers = new ArrayList<>();
+ workControllers.add(new DefaultWorkPhonePreferenceController(context));
+ workControllers.add(new DefaultWorkBrowserPreferenceController(context));
+ controllers.addAll(workControllers);
+ controllers.add(new WorkOnlyCategoryPreferenceController(
+ context, KEY_DEFAULT_WORK_CATEGORY, workControllers));
controllers.add(new DefaultAssistPreferenceController(context, KEY_ASSIST_VOICE_INPUT,
false /* showSetting */));
controllers.add(new DefaultBrowserPreferenceController(context));
- controllers.add(new DefaultWorkBrowserPreferenceController(context));
controllers.add(new DefaultPhonePreferenceController(context));
- controllers.add(new DefaultWorkPhonePreferenceController(context));
controllers.add(new DefaultSmsPreferenceController(context));
controllers.add(new DefaultEmergencyPreferenceController(context));
controllers.add(new DefaultHomePreferenceController(context));
@@ -97,10 +103,8 @@
List<String> keys = super.getNonIndexableKeys(context);
keys.add(KEY_ASSIST_VOICE_INPUT);
// TODO (b/38230148) Remove these keys when we can differentiate work results
- keys.add((new DefaultWorkPhonePreferenceController(context))
- .getPreferenceKey());
- keys.add((new DefaultWorkBrowserPreferenceController(context))
- .getPreferenceKey());
+ keys.add(DefaultWorkPhonePreferenceController.KEY);
+ keys.add(DefaultWorkBrowserPreferenceController.KEY);
return keys;
}
@@ -133,10 +137,10 @@
return;
}
CharSequence summary = concatSummaryText(
- mDefaultSmsPreferenceController.getDefaultAppLabel(),
- mDefaultBrowserPreferenceController.getDefaultAppLabel());
- summary = concatSummaryText(summary,
+ mDefaultBrowserPreferenceController.getDefaultAppLabel(),
mDefaultPhonePreferenceController.getDefaultAppLabel());
+ summary = concatSummaryText(summary,
+ mDefaultSmsPreferenceController.getDefaultAppLabel());
if (!TextUtils.isEmpty(summary)) {
mSummaryLoader.setSummary(this, summary);
}
diff --git a/src/com/android/settings/applications/ExternalSourcesDetails.java b/src/com/android/settings/applications/ExternalSourcesDetails.java
index 36ce8f8..5cd3c44 100644
--- a/src/com/android/settings/applications/ExternalSourcesDetails.java
+++ b/src/com/android/settings/applications/ExternalSourcesDetails.java
@@ -15,6 +15,9 @@
*/
package com.android.settings.applications;
+import static android.app.Activity.RESULT_CANCELED;
+import static android.app.Activity.RESULT_OK;
+
import android.app.AlertDialog;
import android.app.AppOpsManager;
import android.content.Context;
@@ -31,9 +34,6 @@
import com.android.settingslib.RestrictedSwitchPreference;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
-import static android.app.Activity.RESULT_CANCELED;
-import static android.app.Activity.RESULT_OK;
-
public class ExternalSourcesDetails extends AppInfoWithHeader
implements OnPreferenceChangeListener {
@@ -76,7 +76,7 @@
return false;
}
- static CharSequence getPreferenceSummary(Context context, AppEntry entry) {
+ public static CharSequence getPreferenceSummary(Context context, AppEntry entry) {
final UserManager um = UserManager.get(context);
final int userRestrictionSource = um.getUserRestrictionSource(
UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES,
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index ccd91fd..8b8f9cf 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -348,7 +348,7 @@
enabled = false;
mActionButtons.setButton1Visible(false);
}
- mActionButtons.setButton1Text(R.string.uninstall_text);
+ mActionButtons.setButton1Text(R.string.uninstall_text).setButton1Positive(false);
return enabled;
}
@@ -930,11 +930,11 @@
}
}
- private void startAppInfoFragment(Class<?> fragment, CharSequence title) {
+ private void startAppInfoFragment(Class<?> fragment, int title) {
startAppInfoFragment(fragment, title, this, mAppEntry);
}
- public static void startAppInfoFragment(Class<?> fragment, CharSequence title,
+ public static void startAppInfoFragment(Class<?> fragment, int title,
SettingsPreferenceFragment caller, AppEntry appEntry) {
// start new fragment to display extended information
Bundle args = new Bundle();
@@ -942,7 +942,7 @@
args.putInt(ARG_PACKAGE_UID, appEntry.info.uid);
SettingsActivity sa = (SettingsActivity) caller.getActivity();
- sa.startPreferencePanel(caller, fragment.getName(), args, -1, title, caller,
+ sa.startPreferencePanel(caller, fragment.getName(), args, title, null, caller,
SUB_INFO_FRAGMENT);
}
@@ -1018,19 +1018,18 @@
@Override
public boolean onPreferenceClick(Preference preference) {
if (preference == mStoragePreference) {
- startAppInfoFragment(AppStorageSettings.class, mStoragePreference.getTitle());
+ startAppInfoFragment(AppStorageSettings.class, R.string.storage_settings);
} else if (preference == mNotificationPreference) {
- startAppInfoFragment(AppNotificationSettings.class,
- getString(R.string.app_notifications_title));
+ startAppInfoFragment(AppNotificationSettings.class, R.string.app_notifications_title);
} else if (preference == mPermissionsPreference) {
startManagePermissionsActivity();
} else if (preference == mLaunchPreference) {
- startAppInfoFragment(AppLaunchSettings.class, mLaunchPreference.getTitle());
+ 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, getString(R.string.app_data_usage));
+ startAppInfoFragment(AppDataUsage.class, R.string.app_data_usage);
} else if (preference == mBatteryPreference) {
if (isBatteryStatsAvailable()) {
BatteryEntry entry = new BatteryEntry(getContext(), null, mUserManager, mSipper);
@@ -1109,8 +1108,7 @@
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- startAppInfoFragment(DrawOverlayDetails.class,
- getString(R.string.draw_overlay));
+ startAppInfoFragment(DrawOverlayDetails.class, R.string.draw_overlay);
return true;
}
});
@@ -1123,8 +1121,7 @@
pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
- startAppInfoFragment(WriteSettingsDetails.class,
- getString(R.string.write_settings));
+ startAppInfoFragment(WriteSettingsDetails.class, R.string.write_settings);
return true;
}
});
@@ -1154,7 +1151,7 @@
@Override
public boolean onPreferenceClick(Preference preference) {
startAppInfoFragment(ExternalSourcesDetails.class,
- getString(R.string.install_other_apps));
+ R.string.install_other_apps);
return true;
}
});
diff --git a/src/com/android/settings/applications/ManageDomainUrls.java b/src/com/android/settings/applications/ManageDomainUrls.java
index b9e251c..ce919e1 100644
--- a/src/com/android/settings/applications/ManageDomainUrls.java
+++ b/src/com/android/settings/applications/ManageDomainUrls.java
@@ -63,7 +63,11 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setAnimationAllowed(true);
- setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getContext()));
+ if (usePreferenceScreenTitle()) {
+ addPreferencesFromResource(R.xml.manage_domain_url_settings);
+ } else {
+ setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getContext()));
+ }
mApplicationsState = ApplicationsState.getInstance(
(Application) getContext().getApplicationContext());
mSession = mApplicationsState.newSession(this, getLifecycle());
diff --git a/src/com/android/settings/applications/NotificationApps.java b/src/com/android/settings/applications/NotificationApps.java
index ee802dd..f921092 100644
--- a/src/com/android/settings/applications/NotificationApps.java
+++ b/src/com/android/settings/applications/NotificationApps.java
@@ -19,6 +19,7 @@
import android.content.pm.ApplicationInfo;
import com.android.settings.R;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.notification.NotificationBackend;
import com.android.settingslib.wrapper.PackageManagerWrapper;
diff --git a/src/com/android/settings/applications/PictureInPictureSettings.java b/src/com/android/settings/applications/PictureInPictureSettings.java
index 5569a4e..9b8a897 100644
--- a/src/com/android/settings/applications/PictureInPictureSettings.java
+++ b/src/com/android/settings/applications/PictureInPictureSettings.java
@@ -147,7 +147,9 @@
mPackageManager = new PackageManagerWrapper(mContext.getPackageManager());
mUserManager = new UserManagerWrapper(mContext.getSystemService(UserManager.class));
mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
- setPreferenceScreen(getPreferenceManager().createPreferenceScreen(mContext));
+ if (!usePreferenceScreenTitle()) {
+ setPreferenceScreen(getPreferenceManager().createPreferenceScreen(mContext));
+ }
}
@Override
@@ -199,6 +201,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.picture_in_picture_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsEvent.SETTINGS_MANAGE_PICTURE_IN_PICTURE;
}
diff --git a/src/com/android/settings/applications/PremiumSmsAccess.java b/src/com/android/settings/applications/PremiumSmsAccess.java
index 70bc17c..94945a9 100644
--- a/src/com/android/settings/applications/PremiumSmsAccess.java
+++ b/src/com/android/settings/applications/PremiumSmsAccess.java
@@ -81,6 +81,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.premium_sms_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.PREMIUM_SMS_ACCESS;
}
@@ -119,8 +124,14 @@
if (apps == null) return;
setEmptyText(R.string.premium_sms_none);
setLoading(false, true);
- final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(
- getPrefContext());
+ final PreferenceScreen screen;
+ if (usePreferenceScreenTitle()) {
+ screen = getPreferenceScreen();
+ screen.removeAll();
+ } else {
+ screen = getPreferenceManager().createPreferenceScreen(getPrefContext());
+ }
+
screen.setOrderingAsAdded(true);
for (int i = 0; i < apps.size(); i++) {
@@ -137,7 +148,9 @@
screen.addPreference(summary);
}
- setPreferenceScreen(screen);
+ if (!usePreferenceScreenTitle()) {
+ setPreferenceScreen(screen);
+ }
}
private void update() {
diff --git a/src/com/android/settings/applications/ProcessStatsBase.java b/src/com/android/settings/applications/ProcessStatsBase.java
index 3f66789..b98d0ba 100644
--- a/src/com/android/settings/applications/ProcessStatsBase.java
+++ b/src/com/android/settings/applications/ProcessStatsBase.java
@@ -44,7 +44,7 @@
// smaller than the actual time selected instead of bumping up to 3 hours
// beyond it.
private static final long DURATION_QUANTUM = ProcessStats.COMMIT_PERIOD;
- protected static long[] sDurations = new long[] {
+ public static long[] sDurations = new long[] {
3 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 6 * 60 *60 * 1000 - DURATION_QUANTUM / 2,
12 * 60 * 60 * 1000 - DURATION_QUANTUM / 2, 24 * 60 * 60 * 1000 - DURATION_QUANTUM / 2
};
diff --git a/src/com/android/settings/applications/RunningServices.java b/src/com/android/settings/applications/RunningServices.java
index 634fefd..c79b704 100644
--- a/src/com/android/settings/applications/RunningServices.java
+++ b/src/com/android/settings/applications/RunningServices.java
@@ -15,6 +15,7 @@
*/
package com.android.settings.applications;
+import android.annotation.StringRes;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -109,6 +110,12 @@
}
@Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.runningservices_settings_title;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsEvent.RUNNING_SERVICES;
}
diff --git a/src/com/android/settings/applications/VrListenerSettings.java b/src/com/android/settings/applications/VrListenerSettings.java
index 99340b1..e40e3f9 100644
--- a/src/com/android/settings/applications/VrListenerSettings.java
+++ b/src/com/android/settings/applications/VrListenerSettings.java
@@ -58,6 +58,11 @@
return super.setEnabled(service, title, enable);
}
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.vr_listeners_settings;
+ }
+
@VisibleForTesting
void logSpecialPermissionChange(boolean enable, String packageName) {
int logCategory = enable ? MetricsEvent.APP_SPECIAL_PERMISSION_VRHELPER_ALLOW
diff --git a/src/com/android/settings/applications/assist/DefaultAssistPicker.java b/src/com/android/settings/applications/assist/DefaultAssistPicker.java
index 51cb677..01ca25a 100644
--- a/src/com/android/settings/applications/assist/DefaultAssistPicker.java
+++ b/src/com/android/settings/applications/assist/DefaultAssistPicker.java
@@ -65,6 +65,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_assist_settings;
+ }
+
+ @Override
protected List<DefaultAppInfo> getCandidates() {
mAvailableAssistants.clear();
addAssistServices();
@@ -79,7 +84,7 @@
continue;
}
packages.add(packageName);
- candidates.add(new DefaultAppInfo(mPm, mUserId, info.component));
+ candidates.add(new DefaultAppInfo(getContext(), mPm, mUserId, info.component));
}
return candidates;
}
@@ -88,7 +93,7 @@
protected String getDefaultKey() {
final ComponentName cn = getCurrentAssist();
if (cn != null) {
- return new DefaultAppInfo(mPm, mUserId, cn).getKey();
+ return new DefaultAppInfo(getContext(), mPm, mUserId, cn).getKey();
}
return null;
}
diff --git a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java
index 7520155..cba08c8 100644
--- a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java
+++ b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java
@@ -87,7 +87,7 @@
if (cn == null) {
return null;
}
- return new DefaultAppInfo(mPackageManager, mUserId, cn);
+ return new DefaultAppInfo(mContext, mPackageManager, mUserId, cn);
}
@VisibleForTesting
diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
index c1fc528..7a5c13d 100644
--- a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
+++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java
@@ -24,6 +24,7 @@
import com.android.internal.app.AssistUtils;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
import com.android.settings.applications.defaultapps.DefaultAppInfo;
import com.android.settings.applications.defaultapps.DefaultAppPickerFragment;
import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -55,19 +56,25 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_voice_settings;
+ }
+
+ @Override
protected List<VoiceInputDefaultAppInfo> getCandidates() {
final List<VoiceInputDefaultAppInfo> candidates = new ArrayList<>();
+ final Context context = getContext();
boolean hasEnabled = true;
for (VoiceInputHelper.InteractionInfo info : mHelper.mAvailableInteractionInfos) {
final boolean enabled = TextUtils.equals(info.key, mAssistRestrict);
hasEnabled |= enabled;
- candidates.add(new VoiceInputDefaultAppInfo(mPm, mUserId, info, enabled));
+ candidates.add(new VoiceInputDefaultAppInfo(context, mPm, mUserId, info, enabled));
}
final boolean assistIsService = !hasEnabled;
for (VoiceInputHelper.RecognizerInfo info : mHelper.mAvailableRecognizerInfos) {
final boolean enabled = !assistIsService;
- candidates.add(new VoiceInputDefaultAppInfo(mPm, mUserId, info, enabled));
+ candidates.add(new VoiceInputDefaultAppInfo(context, mPm, mUserId, info, enabled));
}
return candidates;
}
@@ -132,9 +139,9 @@
public VoiceInputHelper.BaseInfo mInfo;
- public VoiceInputDefaultAppInfo(PackageManagerWrapper pm, int userId,
+ public VoiceInputDefaultAppInfo(Context context, PackageManagerWrapper pm, int userId,
VoiceInputHelper.BaseInfo info, boolean enabled) {
- super(pm, userId, info.componentName, null /* summary */, enabled);
+ super(context, pm, userId, info.componentName, null /* summary */, enabled);
mInfo = info;
}
diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java
index 3443a44..c305ccf 100644
--- a/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java
+++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java
@@ -104,15 +104,15 @@
}
for (VoiceInputHelper.InteractionInfo info : mHelper.mAvailableInteractionInfos) {
if (TextUtils.equals(defaultKey, info.key)) {
- return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mPackageManager,
- mUserId, info, true /* enabled */);
+ return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mContext,
+ mPackageManager, mUserId, info, true /* enabled */);
}
}
for (VoiceInputHelper.RecognizerInfo info : mHelper.mAvailableRecognizerInfos) {
if (TextUtils.equals(defaultKey, info.key)) {
- return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mPackageManager,
- mUserId, info, true /* enabled */);
+ return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mContext,
+ mPackageManager, mUserId, info, true /* enabled */);
}
}
return null;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
index ec44af4..71b5ec4 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java
@@ -18,6 +18,7 @@
import android.app.AppGlobals;
import android.content.ComponentName;
+import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageItemInfo;
@@ -25,6 +26,7 @@
import android.graphics.drawable.Drawable;
import android.os.RemoteException;
import android.os.UserHandle;
+import android.util.IconDrawableFactory;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -39,18 +41,20 @@
public final PackageItemInfo packageItemInfo;
public final String summary;
protected final PackageManagerWrapper mPm;
+ private final Context mContext;
- public DefaultAppInfo(PackageManagerWrapper pm, int uid, ComponentName cn) {
- this(pm, uid, cn, null /* summary */);
+ public DefaultAppInfo(Context context, PackageManagerWrapper pm, int uid, ComponentName cn) {
+ this(context, pm, uid, cn, null /* summary */, true /* enabled */);
}
- public DefaultAppInfo(PackageManagerWrapper pm, int uid, ComponentName cn, String summary) {
- this(pm, uid, cn, summary, true /* enabled */);
+ public DefaultAppInfo(Context context, PackageManagerWrapper pm, PackageItemInfo info) {
+ this(context, pm, info, null /* summary */, true /* enabled */);
}
- public DefaultAppInfo(PackageManagerWrapper pm, int uid, ComponentName cn, String summary,
- boolean enabled) {
+ public DefaultAppInfo(Context context, PackageManagerWrapper pm, int uid, ComponentName cn,
+ String summary, boolean enabled) {
super(enabled);
+ mContext = context;
mPm = pm;
packageItemInfo = null;
userId = uid;
@@ -58,9 +62,10 @@
this.summary = summary;
}
- public DefaultAppInfo(PackageManagerWrapper pm, PackageItemInfo info, String summary,
- boolean enabled) {
+ public DefaultAppInfo(Context context, PackageManagerWrapper pm, PackageItemInfo info,
+ String summary, boolean enabled) {
super(enabled);
+ mContext = context;
mPm = pm;
userId = UserHandle.myUserId();
packageItemInfo = info;
@@ -68,10 +73,6 @@
this.summary = summary;
}
- public DefaultAppInfo(PackageManagerWrapper pm, PackageItemInfo info) {
- this(pm, info, null /* summary */, true /* enabled */);
- }
-
@Override
public CharSequence loadLabel() {
if (componentName != null) {
@@ -97,22 +98,29 @@
@Override
public Drawable loadIcon() {
+ final IconDrawableFactory factory = IconDrawableFactory.newInstance(mContext);
if (componentName != null) {
try {
final ComponentInfo componentInfo = getComponentInfo();
+ final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
+ componentName.getPackageName(), 0, userId);
if (componentInfo != null) {
- return componentInfo.loadIcon(mPm.getPackageManager());
+ return factory.getBadgedIcon(componentInfo, appInfo, userId);
} else {
- final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
- componentName.getPackageName(), 0, userId);
- return appInfo.loadIcon(mPm.getPackageManager());
+ return factory.getBadgedIcon(appInfo);
}
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
if (packageItemInfo != null) {
- return packageItemInfo.loadIcon(mPm.getPackageManager());
+ try {
+ final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser(
+ packageItemInfo.packageName, 0, userId);
+ return factory.getBadgedIcon(packageItemInfo, appInfo, userId);
+ } catch (PackageManager.NameNotFoundException e) {
+ return null;
+ }
} else {
return null;
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
index d533d0f..91143b1 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java
@@ -26,6 +26,7 @@
import android.util.Log;
import com.android.settings.R;
+import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.widget.GearPreference;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -54,7 +55,7 @@
CharSequence defaultAppLabel = getDefaultAppLabel();
if (!TextUtils.isEmpty(defaultAppLabel)) {
preference.setSummary(defaultAppLabel);
- preference.setIcon(getDefaultAppIcon());
+ Utils.setSafeIcon(preference, getDefaultAppIcon());
} else {
Log.d(TAG, "No default app");
preference.setSummary(R.string.app_list_preference_none);
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
index 34d1338..00dedf9 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java
@@ -18,9 +18,7 @@
import android.Manifest;
import android.app.Activity;
-import android.app.Dialog;
import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -30,7 +28,6 @@
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
-import android.os.Looper;
import android.provider.Settings;
import android.service.autofill.AutofillService;
import android.service.autofill.AutofillServiceInfo;
@@ -106,6 +103,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_autofill_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.DEFAULT_AUTOFILL_PICKER;
}
@@ -187,10 +189,11 @@
final List<DefaultAppInfo> candidates = new ArrayList<>();
final List<ResolveInfo> resolveInfos = mPm.getPackageManager()
.queryIntentServices(AUTOFILL_PROBE, PackageManager.GET_META_DATA);
+ final Context context = getContext();
for (ResolveInfo info : resolveInfos) {
final String permission = info.serviceInfo.permission;
if (Manifest.permission.BIND_AUTOFILL_SERVICE.equals(permission)) {
- candidates.add(new DefaultAppInfo(mPm, mUserId, new ComponentName(
+ candidates.add(new DefaultAppInfo(context, mPm, mUserId, new ComponentName(
info.serviceInfo.packageName, info.serviceInfo.name)));
}
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
index 30aaf64..508cc63 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java
@@ -62,7 +62,7 @@
final String flattenComponent = Settings.Secure.getString(mContext.getContentResolver(),
DefaultAutofillPicker.SETTING);
if (!TextUtils.isEmpty(flattenComponent)) {
- DefaultAppInfo appInfo = new DefaultAppInfo(mPackageManager,
+ DefaultAppInfo appInfo = new DefaultAppInfo(mContext, mPackageManager,
mUserId, ComponentName.unflattenFromString(flattenComponent));
return appInfo;
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
index e965052..2639c8d 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java
@@ -16,10 +16,12 @@
package com.android.settings.applications.defaultapps;
+import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
import java.util.ArrayList;
import java.util.List;
@@ -30,6 +32,11 @@
public class DefaultBrowserPicker extends DefaultAppPickerFragment {
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_browser_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.DEFAULT_BROWSER_PICKER;
}
@@ -47,7 +54,7 @@
@Override
protected List<DefaultAppInfo> getCandidates() {
final List<DefaultAppInfo> candidates = new ArrayList<>();
-
+ final Context context = getContext();
// Resolve that intent and check that the handleAllWebDataURI boolean is set
final List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(
DefaultBrowserPreferenceController.BROWSE_PROBE, PackageManager.MATCH_ALL, mUserId);
@@ -59,7 +66,7 @@
continue;
}
try {
- candidates.add(new DefaultAppInfo(mPm,
+ candidates.add(new DefaultAppInfo(context, mPm,
mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId)));
} catch (PackageManager.NameNotFoundException e) {
// Skip unknown packages.
diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
index a0bf0ca..916f9422 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java
@@ -18,6 +18,7 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
@@ -25,6 +26,7 @@
import android.net.Uri;
import android.support.v7.preference.Preference;
import android.text.TextUtils;
+import android.util.IconDrawableFactory;
import android.util.Log;
import java.util.List;
@@ -67,7 +69,7 @@
try {
final String packageName = mPackageManager.getDefaultBrowserPackageNameAsUser(mUserId);
Log.d(TAG, "Get default browser package: " + packageName);
- return new DefaultAppInfo(mPackageManager,
+ return new DefaultAppInfo(mContext, mPackageManager,
mPackageManager.getPackageManager().getApplicationInfo(packageName, 0));
} catch (PackageManager.NameNotFoundException e) {
return null;
@@ -124,8 +126,19 @@
final ResolveInfo info = list.get(0);
final ComponentInfo cn = info.getComponentInfo();
final String packageName = cn == null ? null : cn.packageName;
+ if (TextUtils.isEmpty(packageName)) {
+ return null;
+ }
+ final ApplicationInfo appInfo;
+ try {
+ appInfo = mPackageManager.getPackageManager().getApplicationInfo(packageName, 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ Log.w(TAG, "Error getting app info for " + packageName);
+ return null;
+ }
Log.d(TAG, "Getting icon for the only browser app: " + packageName);
- return info.loadIcon(mPackageManager.getPackageManager());
+ final IconDrawableFactory iconFactory = IconDrawableFactory.newInstance(mContext);
+ return iconFactory.getBadgedIcon(cn, appInfo, mUserId);
}
return null;
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
index 1d707df..bafd56f 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java
@@ -17,6 +17,7 @@
package com.android.settings.applications.defaultapps;
import android.content.ContentResolver;
+import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -39,17 +40,23 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_emergency_settings;
+ }
+
+ @Override
protected List<DefaultAppInfo> getCandidates() {
final List<DefaultAppInfo> candidates = new ArrayList<>();
final List<ResolveInfo> infos = mPm.getPackageManager().queryIntentActivities(
DefaultEmergencyPreferenceController.QUERY_INTENT, 0);
PackageInfo bestMatch = null;
+ final Context context = getContext();
for (ResolveInfo info : infos) {
try {
final PackageInfo packageInfo =
mPm.getPackageManager().getPackageInfo(info.activityInfo.packageName, 0);
final ApplicationInfo appInfo = packageInfo.applicationInfo;
- candidates.add(new DefaultAppInfo(mPm, appInfo));
+ candidates.add(new DefaultAppInfo(context, mPm, appInfo));
// Get earliest installed system app.
if (isSystemApp(appInfo) && (bestMatch == null ||
bestMatch.firstInstallTime > packageInfo.firstInstallTime)) {
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
index dca7ad1..63efc44 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java
@@ -44,6 +44,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_home_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.DEFAULT_HOME_PICKER;
}
@@ -53,6 +58,7 @@
final boolean mustSupportManagedProfile = hasManagedProfile();
final List<DefaultAppInfo> candidates = new ArrayList<>();
final List<ResolveInfo> homeActivities = new ArrayList<>();
+ final Context context = getContext();
mPm.getHomeActivities(homeActivities);
for (ResolveInfo resolveInfo : homeActivities) {
@@ -71,7 +77,7 @@
summary = null;
}
final DefaultAppInfo candidate =
- new DefaultAppInfo(mPm, mUserId, activityName, summary, enabled);
+ new DefaultAppInfo(context, mPm, mUserId, activityName, summary, enabled);
candidates.add(candidate);
}
return candidates;
diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
index 1b229e8..bd8b5d1 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java
@@ -61,11 +61,12 @@
final ArrayList<ResolveInfo> homeActivities = new ArrayList<>();
final ComponentName currentDefaultHome = mPackageManager.getHomeActivities(homeActivities);
if (currentDefaultHome != null) {
- return new DefaultAppInfo(mPackageManager, mUserId, currentDefaultHome);
+ return new DefaultAppInfo(mContext, mPackageManager, mUserId, currentDefaultHome);
}
final ActivityInfo onlyAppInfo = getOnlyAppInfo();
if (onlyAppInfo != null) {
- return new DefaultAppInfo(mPackageManager, mUserId, onlyAppInfo.getComponentName());
+ return new DefaultAppInfo(mContext, mPackageManager, mUserId,
+ onlyAppInfo.getComponentName());
}
return null;
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
index fc643c8..6a1d919 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java
@@ -23,6 +23,7 @@
import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
import java.util.ArrayList;
import java.util.List;
@@ -44,13 +45,19 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_phone_settings;
+ }
+
+ @Override
protected List<DefaultAppInfo> getCandidates() {
final List<DefaultAppInfo> candidates = new ArrayList<>();
final List<String> dialerPackages =
DefaultDialerManager.getInstalledDialerApplications(getContext(), mUserId);
+ final Context context = getContext();
for (String packageName : dialerPackages) {
try {
- candidates.add(new DefaultAppInfo(mPm,
+ candidates.add(new DefaultAppInfo(context, mPm,
mPm.getApplicationInfoAsUser(packageName, 0, mUserId)));
} catch (PackageManager.NameNotFoundException e) {
// Skip unknown packages.
diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
index 712badb..92c9386 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java
@@ -57,7 +57,7 @@
@Override
protected DefaultAppInfo getDefaultAppInfo() {
try {
- return new DefaultAppInfo(mPackageManager,
+ return new DefaultAppInfo(mContext, mPackageManager,
mPackageManager.getPackageManager().getApplicationInfo(
DefaultDialerManager.getDefaultDialerApplication(mContext, mUserId),
0));
diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
index 966cd43..4c6c9ce 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java
@@ -40,14 +40,20 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.default_sms_settings;
+ }
+
+ @Override
protected List<DefaultAppInfo> getCandidates() {
+ final Context context = getContext();
final Collection<SmsApplication.SmsApplicationData> smsApplications =
- SmsApplication.getApplicationCollection(getContext());
+ SmsApplication.getApplicationCollection(context);
final List<DefaultAppInfo> candidates = new ArrayList<>(smsApplications.size());
for (SmsApplication.SmsApplicationData smsApplicationData : smsApplications) {
try {
- candidates.add(new DefaultAppInfo(mPm,
+ candidates.add(new DefaultAppInfo(context, mPm,
mPm.getApplicationInfoAsUser(smsApplicationData.mPackageName, 0, mUserId)));
} catch (PackageManager.NameNotFoundException e) {
// Skip unknown packages.
diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
index 63075b9..c3b7ac4 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java
@@ -47,7 +47,7 @@
protected DefaultAppInfo getDefaultAppInfo() {
final ComponentName app = SmsApplication.getDefaultSmsApplication(mContext, true);
if (app != null) {
- return new DefaultAppInfo(mPackageManager, mUserId, app);
+ return new DefaultAppInfo(mContext, mPackageManager, mUserId, app);
}
return null;
}
diff --git a/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
index 0792ff9..4dc984b 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultWorkBrowserPreferenceController.java
@@ -23,6 +23,7 @@
public class DefaultWorkBrowserPreferenceController extends DefaultBrowserPreferenceController {
+ public static final String KEY = "work_default_browser";
private final UserHandle mUserHandle;
public DefaultWorkBrowserPreferenceController(Context context) {
@@ -35,7 +36,7 @@
@Override
public String getPreferenceKey() {
- return "work_default_browser";
+ return KEY;
}
@Override
diff --git a/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java
index c6d04fa..decff06 100644
--- a/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java
+++ b/src/com/android/settings/applications/defaultapps/DefaultWorkPhonePreferenceController.java
@@ -23,6 +23,7 @@
public class DefaultWorkPhonePreferenceController extends DefaultPhonePreferenceController {
+ public static final String KEY = "work_default_phone_app";
private final UserHandle mUserHandle;
public DefaultWorkPhonePreferenceController(Context context) {
@@ -43,6 +44,6 @@
@Override
public String getPreferenceKey() {
- return "work_default_phone_app";
+ return KEY;
}
}
diff --git a/src/com/android/settings/applications/manageapplications/AppFilterItem.java b/src/com/android/settings/applications/manageapplications/AppFilterItem.java
new file mode 100644
index 0000000..c6f5639
--- /dev/null
+++ b/src/com/android/settings/applications/manageapplications/AppFilterItem.java
@@ -0,0 +1,85 @@
+/*
+ * 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.applications.manageapplications;
+
+import android.support.annotation.StringRes;
+
+import com.android.settingslib.applications.ApplicationsState;
+
+import java.util.Objects;
+
+/**
+ * Data model for a displayable app filter.
+ */
+public class AppFilterItem implements Comparable<AppFilterItem> {
+
+ @StringRes
+ private final int mTitle;
+ @AppFilterRegistry.FilterType
+ private final int mFilterType;
+ private final ApplicationsState.AppFilter mFilter;
+
+ public AppFilterItem(ApplicationsState.AppFilter filter,
+ @AppFilterRegistry.FilterType int filterType,
+ @StringRes int title) {
+ mTitle = title;
+ mFilterType = filterType;
+ mFilter = filter;
+ }
+
+ public int getTitle() {
+ return mTitle;
+ }
+
+ public ApplicationsState.AppFilter getFilter() {
+ return mFilter;
+ }
+
+ public int getFilterType() {
+ return mFilterType;
+ }
+
+ @Override
+ public int compareTo(AppFilterItem appFilter) {
+ if (appFilter == null) {
+ return 1;
+ }
+ if (this == appFilter) {
+ return 0;
+ }
+ return mFilterType - appFilter.mFilterType;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == null || !(o instanceof AppFilterItem)) {
+ return false;
+ }
+ if (this == o) {
+ return true;
+ }
+ final AppFilterItem other = (AppFilterItem) o;
+ return mTitle == other.mTitle
+ && mFilterType == other.mFilterType
+ && mFilter == other.mFilter;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(mFilter, mTitle, mFilterType);
+ }
+}
diff --git a/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
new file mode 100644
index 0000000..01d2cb8
--- /dev/null
+++ b/src/com/android/settings/applications/manageapplications/AppFilterRegistry.java
@@ -0,0 +1,188 @@
+/*
+ * 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.applications.manageapplications;
+
+import android.support.annotation.IntDef;
+
+import com.android.settings.R;
+import com.android.settings.applications.AppStateInstallAppsBridge;
+import com.android.settings.applications.AppStateNotificationBridge;
+import com.android.settings.applications.AppStateOverlayBridge;
+import com.android.settings.applications.AppStatePowerBridge;
+import com.android.settings.applications.AppStateUsageBridge;
+import com.android.settings.applications.AppStateWriteSettingsBridge;
+import com.android.settingslib.applications.ApplicationsState;
+
+/**
+ * A registry and helper class that manages all {@link AppFilterItem}s for ManageApplications UI.
+ */
+public class AppFilterRegistry {
+
+ @IntDef(value = {
+ FILTER_APPS_POWER_WHITELIST,
+ FILTER_APPS_POWER_WHITELIST_ALL,
+ FILTER_APPS_ALL,
+ FILTER_APPS_ENABLED,
+ FILTER_APPS_INSTANT,
+ FILTER_APPS_DISABLED,
+ FILTER_APPS_BLOCKED,
+ FILTER_APPS_PERSONAL,
+ FILTER_APPS_WORK,
+ FILTER_APPS_USAGE_ACCESS,
+ FILTER_APPS_WITH_OVERLAY,
+ FILTER_APPS_WRITE_SETTINGS,
+ FILTER_APPS_INSTALL_SOURCES,
+ })
+ @interface FilterType {
+ }
+
+ // Filter options used for displayed list of applications
+ // Filters will appear sorted based on their value defined here.
+ public static final int FILTER_APPS_POWER_WHITELIST = 0;
+ public static final int FILTER_APPS_POWER_WHITELIST_ALL = 1;
+ public static final int FILTER_APPS_ALL = 2;
+ public static final int FILTER_APPS_ENABLED = 3;
+ public static final int FILTER_APPS_INSTANT = 4;
+ public static final int FILTER_APPS_DISABLED = 5;
+ public static final int FILTER_APPS_BLOCKED = 6;
+ public static final int FILTER_APPS_PERSONAL = 7;
+ public static final int FILTER_APPS_WORK = 8;
+ public static final int FILTER_APPS_USAGE_ACCESS = 9;
+ public static final int FILTER_APPS_WITH_OVERLAY = 10;
+ public static final int FILTER_APPS_WRITE_SETTINGS = 11;
+ public static final int FILTER_APPS_INSTALL_SOURCES = 12;
+ // Next id: 13
+
+ private static AppFilterRegistry sRegistry;
+
+ private final AppFilterItem[] mFilters;
+
+ private AppFilterRegistry() {
+ mFilters = new AppFilterItem[13];
+
+ // High power whitelist, on
+ mFilters[FILTER_APPS_POWER_WHITELIST] = new AppFilterItem(
+ new ApplicationsState.CompoundFilter(
+ AppStatePowerBridge.FILTER_POWER_WHITELISTED,
+ ApplicationsState.FILTER_ALL_ENABLED),
+ FILTER_APPS_POWER_WHITELIST,
+ R.string.high_power_filter_on);
+
+ // Without disabled until used
+ mFilters[FILTER_APPS_POWER_WHITELIST_ALL] = new AppFilterItem(
+ new ApplicationsState.CompoundFilter(
+ ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED,
+ ApplicationsState.FILTER_ALL_ENABLED),
+ FILTER_APPS_POWER_WHITELIST_ALL,
+ R.string.filter_all_apps);
+
+ // All apps
+ mFilters[FILTER_APPS_ALL] = new AppFilterItem(
+ ApplicationsState.FILTER_EVERYTHING,
+ FILTER_APPS_ALL,
+ R.string.filter_all_apps);
+
+ // Enabled
+ mFilters[FILTER_APPS_ENABLED] = new AppFilterItem(
+ ApplicationsState.FILTER_ALL_ENABLED,
+ FILTER_APPS_ENABLED,
+ R.string.filter_enabled_apps);
+
+ // Disabled
+ mFilters[FILTER_APPS_DISABLED] = new AppFilterItem(
+ ApplicationsState.FILTER_DISABLED,
+ FILTER_APPS_DISABLED,
+ R.string.filter_apps_disabled);
+
+ // Instant
+ mFilters[FILTER_APPS_INSTANT] = new AppFilterItem(
+ ApplicationsState.FILTER_INSTANT,
+ FILTER_APPS_INSTANT,
+ R.string.filter_instant_apps);
+
+ // Blocked Notifications
+ mFilters[FILTER_APPS_BLOCKED] = new AppFilterItem(
+ AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED,
+ FILTER_APPS_BLOCKED,
+ R.string.filter_notif_blocked_apps);
+
+ // Personal
+ mFilters[FILTER_APPS_PERSONAL] = new AppFilterItem(
+ ApplicationsState.FILTER_PERSONAL,
+ FILTER_APPS_PERSONAL,
+ R.string.filter_personal_apps);
+
+ // Work
+ mFilters[FILTER_APPS_WORK] = new AppFilterItem(
+ ApplicationsState.FILTER_WORK,
+ FILTER_APPS_WORK,
+ R.string.filter_work_apps);
+
+ // Usage access screen, never displayed.
+ mFilters[FILTER_APPS_USAGE_ACCESS] = new AppFilterItem(
+ AppStateUsageBridge.FILTER_APP_USAGE,
+ FILTER_APPS_USAGE_ACCESS,
+ R.string.filter_all_apps);
+
+ // Apps that can draw overlays
+ mFilters[FILTER_APPS_WITH_OVERLAY] = new AppFilterItem(
+ AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW,
+ FILTER_APPS_WITH_OVERLAY,
+ R.string.filter_overlay_apps);
+
+ // Apps that can write system settings
+ mFilters[FILTER_APPS_WRITE_SETTINGS] = new AppFilterItem(
+ AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS,
+ FILTER_APPS_WRITE_SETTINGS,
+ R.string.filter_write_settings_apps);
+
+ // Apps that are trusted sources of apks
+ mFilters[FILTER_APPS_INSTALL_SOURCES] = new AppFilterItem(
+ AppStateInstallAppsBridge.FILTER_APP_SOURCES,
+ FILTER_APPS_INSTALL_SOURCES,
+ R.string.filter_install_sources_apps);
+ }
+
+ public static AppFilterRegistry getInstance() {
+ if (sRegistry == null) {
+ sRegistry = new AppFilterRegistry();
+ }
+ return sRegistry;
+ }
+
+ @FilterType
+ public int getDefaultFilterType(int listType) {
+ switch (listType) {
+ case ManageApplications.LIST_TYPE_USAGE_ACCESS:
+ return FILTER_APPS_USAGE_ACCESS;
+ case ManageApplications.LIST_TYPE_HIGH_POWER:
+ return FILTER_APPS_POWER_WHITELIST;
+ case ManageApplications.LIST_TYPE_OVERLAY:
+ return FILTER_APPS_WITH_OVERLAY;
+ case ManageApplications.LIST_TYPE_WRITE_SETTINGS:
+ return FILTER_APPS_WRITE_SETTINGS;
+ case ManageApplications.LIST_TYPE_MANAGE_SOURCES:
+ return FILTER_APPS_INSTALL_SOURCES;
+ default:
+ return FILTER_APPS_ALL;
+ }
+ }
+
+ public AppFilterItem get(@FilterType int filterType) {
+ return mFilters[filterType];
+ }
+}
diff --git a/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
new file mode 100644
index 0000000..9ac2167
--- /dev/null
+++ b/src/com/android/settings/applications/manageapplications/ApplicationViewHolder.java
@@ -0,0 +1,122 @@
+/*
+ * 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.applications.manageapplications;
+
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.StringRes;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.settings.R;
+import com.android.settingslib.applications.ApplicationsState;
+import com.android.settingslib.applications.ApplicationsState.AppEntry;
+
+public class ApplicationViewHolder extends RecyclerView.ViewHolder {
+
+ private final TextView mAppName;
+ private final ImageView mAppIcon;
+
+ @VisibleForTesting
+ final TextView mSummary;
+ @VisibleForTesting
+ final TextView mDisabled;
+
+ ApplicationViewHolder(View itemView) {
+ super(itemView);
+ mAppName = itemView.findViewById(android.R.id.title);
+ mAppIcon = itemView.findViewById(android.R.id.icon);
+ mSummary = itemView.findViewById(R.id.widget_text1);
+ mDisabled = itemView.findViewById(R.id.widget_text2);
+ }
+
+ static View newView(LayoutInflater inflater, ViewGroup parent) {
+ final View root = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.preference_app, parent, false);
+ inflater.inflate(R.layout.widget_text_views,
+ root.findViewById(android.R.id.widget_frame));
+ return root;
+ }
+
+ void setSummary(CharSequence summary) {
+ mSummary.setText(summary);
+ }
+
+ void setSummary(@StringRes int summary) {
+ mSummary.setText(summary);
+ }
+
+ void setEnabled(boolean isEnabled) {
+ itemView.setEnabled(isEnabled);
+ }
+
+ void setTitle(CharSequence title) {
+ if (title == null) {
+ return;
+ }
+ mAppName.setText(title);
+ }
+
+ void setIcon(Drawable icon) {
+ if (icon == null) {
+ return;
+ }
+ mAppIcon.setImageDrawable(icon);
+ }
+
+ void updateDisableView(ApplicationInfo info) {
+ if ((info.flags & ApplicationInfo.FLAG_INSTALLED) == 0) {
+ mDisabled.setVisibility(View.VISIBLE);
+ mDisabled.setText(R.string.not_installed);
+ } else if (!info.enabled || info.enabledSetting
+ == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
+ mDisabled.setVisibility(View.VISIBLE);
+ mDisabled.setText(R.string.disabled);
+ } else {
+ mDisabled.setVisibility(View.GONE);
+ }
+ }
+
+ void updateSizeText(AppEntry entry, CharSequence invalidSizeStr, int whichSize) {
+ if (ManageApplications.DEBUG) {
+ Log.d(ManageApplications.TAG, "updateSizeText of "
+ + entry.label + " " + entry + ": " + entry.sizeStr);
+ }
+ if (entry.sizeStr != null) {
+ switch (whichSize) {
+ case ManageApplications.SIZE_INTERNAL:
+ setSummary(entry.internalSizeStr);
+ break;
+ case ManageApplications.SIZE_EXTERNAL:
+ setSummary(entry.externalSizeStr);
+ break;
+ default:
+ setSummary(entry.sizeStr);
+ break;
+ }
+ } else if (entry.size == ApplicationsState.SIZE_INVALID) {
+ setSummary(invalidSizeStr);
+ }
+ }
+}
diff --git a/src/com/android/settings/applications/FileViewHolderController.java b/src/com/android/settings/applications/manageapplications/FileViewHolderController.java
similarity index 85%
rename from src/com/android/settings/applications/FileViewHolderController.java
rename to src/com/android/settings/applications/manageapplications/FileViewHolderController.java
index e8af722..4e6bf26 100644
--- a/src/com/android/settings/applications/FileViewHolderController.java
+++ b/src/com/android/settings/applications/manageapplications/FileViewHolderController.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright (C) 2015 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.
@@ -11,13 +11,12 @@
* 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
+ * limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
import android.app.Fragment;
-import android.view.View;
/**
* FileViewHolderController handles adapting the AppViewHolder to work as a general purpose
@@ -36,12 +35,14 @@
/**
* Initializes the view within an AppViewHolder.
+ *
* @param holder The holder to use to initialize.
*/
- void setupView(AppViewHolder holder);
+ void setupView(ApplicationViewHolder holder);
/**
* Handles the behavior when the view is clicked.
+ *
* @param fragment Fragment where the click originated.
*/
void onClick(Fragment fragment);
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/manageapplications/ManageApplications.java
similarity index 65%
rename from src/com/android/settings/applications/ManageApplications.java
rename to src/com/android/settings/applications/manageapplications/ManageApplications.java
index 9edbd86..33762e4 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/manageapplications/ManageApplications.java
@@ -14,9 +14,25 @@
* limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
-import android.annotation.IdRes;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_BLOCKED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_DISABLED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_ENABLED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_INSTANT;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_PERSONAL;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_POWER_WHITELIST;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_POWER_WHITELIST_ALL;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_WORK;
+
import android.annotation.Nullable;
import android.annotation.StringRes;
import android.app.Activity;
@@ -24,16 +40,14 @@
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.icu.text.AlphabeticIndex;
import android.os.Bundle;
import android.os.Environment;
-import android.os.Handler;
-import android.os.LocaleList;
import android.os.UserHandle;
import android.os.UserManager;
import android.preference.PreferenceFrameLayout;
import android.support.annotation.VisibleForTesting;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.ArraySet;
import android.util.Log;
@@ -43,24 +57,15 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.AbsListView;
import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
-import android.widget.BaseAdapter;
-import android.widget.Filter;
-import android.widget.Filterable;
import android.widget.FrameLayout;
-import android.widget.ListView;
-import android.widget.SectionIndexer;
import android.widget.Spinner;
-import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.Settings;
-import com.android.settings.Settings.AllApplicationsActivity;
import com.android.settings.Settings.GamesStorageActivity;
import com.android.settings.Settings.HighPowerApplicationsActivity;
import com.android.settings.Settings.ManageExternalSourcesActivity;
@@ -71,9 +76,25 @@
import com.android.settings.Settings.UsageAccessSettingsActivity;
import com.android.settings.Settings.WriteSettingsActivity;
import com.android.settings.SettingsActivity;
-import com.android.settings.Utils;
+import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.AppStateAppOpsBridge.PermissionState;
+import com.android.settings.applications.AppStateBaseBridge;
+import com.android.settings.applications.AppStateInstallAppsBridge;
+import com.android.settings.applications.AppStateNotificationBridge;
+import com.android.settings.applications.AppStateOverlayBridge;
+import com.android.settings.applications.AppStatePowerBridge;
+import com.android.settings.applications.AppStateUsageBridge;
import com.android.settings.applications.AppStateUsageBridge.UsageState;
+import com.android.settings.applications.AppStateWriteSettingsBridge;
+import com.android.settings.applications.AppStorageSettings;
+import com.android.settings.applications.DefaultAppSettings;
+import com.android.settings.applications.DrawOverlayDetails;
+import com.android.settings.applications.ExternalSourcesDetails;
+import com.android.settings.applications.InstalledAppCounter;
+import com.android.settings.applications.InstalledAppDetails;
+import com.android.settings.applications.NotificationApps;
+import com.android.settings.applications.UsageAccessDetails;
+import com.android.settings.applications.WriteSettingsDetails;
import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.fuelgauge.HighPowerDetail;
@@ -90,13 +111,13 @@
import com.android.settingslib.applications.ApplicationsState.CompoundFilter;
import com.android.settingslib.applications.ApplicationsState.VolumeFilter;
import com.android.settingslib.applications.StorageStatsSource;
+import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
-import java.util.Locale;
import java.util.Set;
/**
@@ -106,7 +127,7 @@
* intent.
*/
public class ManageApplications extends InstrumentedPreferenceFragment
- implements OnItemClickListener, OnItemSelectedListener {
+ implements View.OnClickListener, OnItemSelectedListener {
static final String TAG = "ManageApplications";
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
@@ -136,88 +157,6 @@
public static final int SIZE_INTERNAL = 1;
public static final int SIZE_EXTERNAL = 2;
- // Filter options used for displayed list of applications
- // Filters will appear sorted based on their value defined here.
- public static final int FILTER_APPS_POWER_WHITELIST = 0;
- public static final int FILTER_APPS_POWER_WHITELIST_ALL = 1;
- public static final int FILTER_APPS_ALL = 2;
- public static final int FILTER_APPS_ENABLED = 3;
- public static final int FILTER_APPS_INSTANT = 4;
- public static final int FILTER_APPS_DISABLED = 5;
- public static final int FILTER_APPS_BLOCKED = 6;
- public static final int FILTER_APPS_PERSONAL = 7;
- public static final int FILTER_APPS_WORK = 8;
- public static final int FILTER_APPS_USAGE_ACCESS = 9;
- public static final int FILTER_APPS_WITH_OVERLAY = 10;
- public static final int FILTER_APPS_WRITE_SETTINGS = 11;
- public static final int FILTER_APPS_INSTALL_SOURCES = 12;
- public static final int FILTER_APPS_COUNT = 13; // This should always be the last entry
-
- // Mapping to string labels for the FILTER_APPS_* constants above.
- @IdRes
- public static final int[] FILTER_LABELS = new int[FILTER_APPS_COUNT];
-
- // Mapping to filters for the FILTER_APPS_* constants above.
- public static final AppFilter[] FILTERS = new AppFilter[FILTER_APPS_COUNT];
-
- static {
- // High power whitelist, on
- FILTER_LABELS[FILTER_APPS_POWER_WHITELIST] = R.string.high_power_filter_on;
- FILTERS[FILTER_APPS_POWER_WHITELIST] = new CompoundFilter(
- AppStatePowerBridge.FILTER_POWER_WHITELISTED,
- ApplicationsState.FILTER_ALL_ENABLED);
-
- // Without disabled until used
- FILTER_LABELS[FILTER_APPS_POWER_WHITELIST_ALL] = R.string.filter_all_apps;
- FILTERS[FILTER_APPS_POWER_WHITELIST_ALL] = new CompoundFilter(
- ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED,
- ApplicationsState.FILTER_ALL_ENABLED);
-
- // All apps
- FILTER_LABELS[FILTER_APPS_ALL] = R.string.filter_all_apps;
- FILTERS[FILTER_APPS_ALL] = ApplicationsState.FILTER_EVERYTHING;
-
- // Enabled
- FILTER_LABELS[FILTER_APPS_ENABLED] = R.string.filter_enabled_apps;
- FILTERS[FILTER_APPS_ENABLED] = ApplicationsState.FILTER_ALL_ENABLED;
-
- // Disabled
- FILTER_LABELS[FILTER_APPS_DISABLED] = R.string.filter_apps_disabled;
- FILTERS[FILTER_APPS_DISABLED] = ApplicationsState.FILTER_DISABLED;
-
- // Instant
- FILTER_LABELS[FILTER_APPS_INSTANT] = R.string.filter_instant_apps;
- FILTERS[FILTER_APPS_INSTANT] = ApplicationsState.FILTER_INSTANT;
-
- // Blocked Notifications
- FILTER_LABELS[FILTER_APPS_BLOCKED] = R.string.filter_notif_blocked_apps;
- FILTERS[FILTER_APPS_BLOCKED] = AppStateNotificationBridge.FILTER_APP_NOTIFICATION_BLOCKED;
-
- // Personal
- FILTER_LABELS[FILTER_APPS_PERSONAL] = R.string.filter_personal_apps;
- FILTERS[FILTER_APPS_PERSONAL] = ApplicationsState.FILTER_PERSONAL;
-
- // Work
- FILTER_LABELS[FILTER_APPS_WORK] = R.string.filter_work_apps;
- FILTERS[FILTER_APPS_WORK] = ApplicationsState.FILTER_WORK;
-
- // Usage access screen, never displayed.
- FILTER_LABELS[FILTER_APPS_USAGE_ACCESS] = R.string.filter_all_apps;
- FILTERS[FILTER_APPS_USAGE_ACCESS] = AppStateUsageBridge.FILTER_APP_USAGE;
-
- // Apps that can draw overlays
- FILTER_LABELS[FILTER_APPS_WITH_OVERLAY] = R.string.filter_overlay_apps;
- FILTERS[FILTER_APPS_WITH_OVERLAY] = AppStateOverlayBridge.FILTER_SYSTEM_ALERT_WINDOW;
-
- // Apps that can write system settings
- FILTER_LABELS[FILTER_APPS_WRITE_SETTINGS] = R.string.filter_write_settings_apps;
- FILTERS[FILTER_APPS_WRITE_SETTINGS] = AppStateWriteSettingsBridge.FILTER_WRITE_SETTINGS;
-
- // Apps that are trusted sources of apks
- FILTER_LABELS[FILTER_APPS_INSTALL_SOURCES] = R.string.filter_install_sources_apps;
- FILTERS[FILTER_APPS_INSTALL_SOURCES] = AppStateInstallAppsBridge.FILTER_APP_SOURCES;
- }
-
// Storage types. Used to determine what the extra item in the list of preferences is.
public static final int STORAGE_TYPE_DEFAULT = 0; // Show all apps that are not categorized.
public static final int STORAGE_TYPE_MUSIC = 1;
@@ -235,26 +174,19 @@
private ApplicationsState mApplicationsState;
public int mListType;
- public int mFilter;
-
- public ApplicationsAdapter mApplications;
+ private AppFilterItem mFilter;
+ private ApplicationsAdapter mApplications;
private View mLoadingContainer;
private View mListContainer;
-
- // ListView used to display list
- private ListView mListView;
+ private RecyclerView mRecyclerView;
// Size resource used for packages whose size computation failed for some reason
CharSequence mInvalidSizeStr;
- // layout inflater object used to inflate views
- private LayoutInflater mInflater;
-
private String mCurrentPkgName;
private int mCurrentUid;
- private boolean mFinishAfterDialog;
private Menu mOptionsMenu;
@@ -270,14 +202,12 @@
public static final int LIST_TYPE_MOVIES = 10;
public static final int LIST_TYPE_PHOTOGRAPHY = 11;
-
// List types that should show instant apps.
public static final Set<Integer> LIST_TYPES_WITH_INSTANT = new ArraySet<>(Arrays.asList(
LIST_TYPE_MAIN,
LIST_TYPE_STORAGE));
private View mRootView;
-
private View mSpinnerHeader;
private Spinner mFilterSpinner;
private FilterSpinnerAdapter mFilterAdapter;
@@ -287,25 +217,28 @@
private int mStorageType;
private boolean mIsWorkOnly;
private int mWorkUserId;
+ private View mEmptyView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
- mApplicationsState = ApplicationsState.getInstance(getActivity().getApplication());
+ final Activity activity = getActivity();
+ mApplicationsState = ApplicationsState.getInstance(activity.getApplication());
- Intent intent = getActivity().getIntent();
+ Intent intent = activity.getIntent();
Bundle args = getArguments();
+ int screenTitle = intent.getIntExtra(
+ SettingsActivity.EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.notifications_label);
String className = args != null ? args.getString(EXTRA_CLASSNAME) : null;
if (className == null) {
className = intent.getComponent().getClassName();
}
- if (className.equals(AllApplicationsActivity.class.getName())) {
- mShowSystem = true;
- } else if (className.equals(NotificationAppListActivity.class.getName())
+ if (className.equals(NotificationAppListActivity.class.getName())
|| this instanceof NotificationApps) {
mListType = LIST_TYPE_NOTIFICATION;
mNotifBackend = new NotificationBackend();
+ screenTitle = R.string.app_notifications_title;
} else if (className.equals(StorageUseActivity.class.getName())) {
if (args != null && args.containsKey(EXTRA_VOLUME_UUID)) {
mVolumeUuid = args.getString(EXTRA_VOLUME_UUID);
@@ -318,16 +251,21 @@
mSortOrder = R.id.sort_order_size;
} else if (className.equals(UsageAccessSettingsActivity.class.getName())) {
mListType = LIST_TYPE_USAGE_ACCESS;
+ screenTitle = R.string.usage_access;
} else if (className.equals(HighPowerApplicationsActivity.class.getName())) {
mListType = LIST_TYPE_HIGH_POWER;
// Default to showing system.
mShowSystem = true;
+ screenTitle = R.string.high_power_apps;
} else if (className.equals(OverlaySettingsActivity.class.getName())) {
mListType = LIST_TYPE_OVERLAY;
+ screenTitle = R.string.system_alert_window_settings;
} else if (className.equals(WriteSettingsActivity.class.getName())) {
mListType = LIST_TYPE_WRITE_SETTINGS;
+ screenTitle = R.string.write_settings;
} else if (className.equals(ManageExternalSourcesActivity.class.getName())) {
mListType = LIST_TYPE_MANAGE_SOURCES;
+ screenTitle = R.string.install_other_apps;
} else if (className.equals(GamesStorageActivity.class.getName())) {
mListType = LIST_TYPE_GAMES;
mSortOrder = R.id.sort_order_size;
@@ -341,7 +279,8 @@
} else {
mListType = LIST_TYPE_MAIN;
}
- mFilter = getDefaultFilter();
+ final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
+ mFilter = appFilterRegistry.get(appFilterRegistry.getDefaultFilterType(mListType));
mIsWorkOnly = args != null ? args.getBoolean(EXTRA_WORK_ONLY) : false;
mWorkUserId = args != null ? args.getInt(EXTRA_WORK_ID) : NO_USER_SPECIFIED;
@@ -350,34 +289,26 @@
mShowSystem = savedInstanceState.getBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
}
- mInvalidSizeStr = getActivity().getText(R.string.invalid_size_value);
+ mInvalidSizeStr = activity.getText(R.string.invalid_size_value);
- mResetAppsHelper = new ResetAppsHelper(getActivity());
+ mResetAppsHelper = new ResetAppsHelper(activity);
+
+ if (usePreferenceScreenTitle() && screenTitle > 0) {
+ activity.setTitle(screenTitle);
+ }
}
-
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
- // initialize the inflater
- mInflater = inflater;
-
mRootView = inflater.inflate(R.layout.manage_applications_apps, null);
mLoadingContainer = mRootView.findViewById(R.id.loading_container);
mListContainer = mRootView.findViewById(R.id.list_container);
if (mListContainer != null) {
// Create adapter and list view here
- View emptyView = mListContainer.findViewById(com.android.internal.R.id.empty);
- ListView lv = (ListView) mListContainer.findViewById(android.R.id.list);
- if (emptyView != null) {
- lv.setEmptyView(emptyView);
- }
- lv.setOnItemClickListener(this);
- lv.setSaveEnabled(true);
- lv.setItemsCanFocus(true);
- lv.setTextFilterEnabled(true);
- mListView = lv;
- mApplications = new ApplicationsAdapter(mApplicationsState, this, mFilter);
+ mEmptyView = mListContainer.findViewById(android.R.id.empty);
+ mApplications = new ApplicationsAdapter(mApplicationsState, this, mFilter,
+ savedInstanceState);
if (savedInstanceState != null) {
mApplications.mHasReceivedLoadEntries =
savedInstanceState.getBoolean(EXTRA_HAS_ENTRIES, false);
@@ -402,11 +333,10 @@
mVolumeUuid,
UserHandle.of(userId)));
}
- mListView.setAdapter(mApplications);
- mListView.setRecyclerListener(mApplications);
- mListView.setFastScrollEnabled(isFastScrollEnabled());
-
- Utils.prepareCustomPreferencesList(container, mRootView, mListView, false);
+ mRecyclerView = mListContainer.findViewById(R.id.apps_list);
+ mRecyclerView.setLayoutManager(new LinearLayoutManager(
+ getContext(), RecyclerView.VERTICAL, false /* reverseLayout */));
+ mRecyclerView.setAdapter(mApplications);
}
// We have to do this now because PreferenceFrameLayout looks at it
@@ -424,17 +354,18 @@
@VisibleForTesting
void createHeader() {
- Activity activity = getActivity();
- FrameLayout pinnedHeader = (FrameLayout) mRootView.findViewById(R.id.pinned_header);
+ final Activity activity = getActivity();
+ final FrameLayout pinnedHeader = mRootView.findViewById(R.id.pinned_header);
mSpinnerHeader = activity.getLayoutInflater()
.inflate(R.layout.apps_filter_spinner, pinnedHeader, false);
- mFilterSpinner = (Spinner) mSpinnerHeader.findViewById(R.id.filter_spinner);
+ mFilterSpinner = mSpinnerHeader.findViewById(R.id.filter_spinner);
mFilterAdapter = new FilterSpinnerAdapter(this);
mFilterSpinner.setAdapter(mFilterAdapter);
mFilterSpinner.setOnItemSelectedListener(this);
pinnedHeader.addView(mSpinnerHeader, 0);
- mFilterAdapter.enableFilter(getDefaultFilter());
+ final AppFilterRegistry appFilterRegistry = AppFilterRegistry.getInstance();
+ mFilterAdapter.enableFilter(appFilterRegistry.getDefaultFilterType(mListType));
if (mListType == LIST_TYPE_MAIN) {
if (UserManager.get(getActivity()).getUserProfiles().size() > 1) {
mFilterAdapter.enableFilter(FILTER_APPS_PERSONAL);
@@ -450,7 +381,8 @@
AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
if (mIsWorkOnly) {
- compositeFilter = new CompoundFilter(compositeFilter, FILTERS[FILTER_APPS_WORK]);
+ final AppFilter workFilter = appFilterRegistry.get(FILTER_APPS_WORK).getFilter();
+ compositeFilter = new CompoundFilter(compositeFilter, workFilter);
}
if (compositeFilter != null) {
mApplications.setCompositeFilter(compositeFilter);
@@ -480,23 +412,6 @@
return null;
}
- private int getDefaultFilter() {
- switch (mListType) {
- case LIST_TYPE_USAGE_ACCESS:
- return FILTER_APPS_USAGE_ACCESS;
- case LIST_TYPE_HIGH_POWER:
- return FILTER_APPS_POWER_WHITELIST;
- case LIST_TYPE_OVERLAY:
- return FILTER_APPS_WITH_OVERLAY;
- case LIST_TYPE_WRITE_SETTINGS:
- return FILTER_APPS_WRITE_SETTINGS;
- case LIST_TYPE_MANAGE_SOURCES:
- return FILTER_APPS_INSTALL_SOURCES;
- default:
- return FILTER_APPS_ALL;
- }
- }
-
private boolean isFastScrollEnabled() {
switch (mListType) {
case LIST_TYPE_MAIN:
@@ -562,6 +477,9 @@
outState.putBoolean(EXTRA_SHOW_SYSTEM, mShowSystem);
outState.putBoolean(EXTRA_HAS_ENTRIES, mApplications.mHasReceivedLoadEntries);
outState.putBoolean(EXTRA_HAS_BRIDGE, mApplications.mHasReceivedBridgeCallback);
+ if (mApplications != null) {
+ mApplications.onSaveInstanceState(outState);
+ }
}
@Override
@@ -590,11 +508,7 @@
mApplications.mExtraInfoBridge.forceUpdate(mCurrentPkgName, mCurrentUid);
} else if (mListType == LIST_TYPE_HIGH_POWER || mListType == LIST_TYPE_OVERLAY
|| mListType == LIST_TYPE_WRITE_SETTINGS) {
- if (mFinishAfterDialog) {
- getActivity().onBackPressed();
- } else {
- mApplications.mExtraInfoBridge.forceUpdate(mCurrentPkgName, mCurrentUid);
- }
+ mApplications.mExtraInfoBridge.forceUpdate(mCurrentPkgName, mCurrentUid);
} else {
mApplicationsState.requestSize(mCurrentPkgName, UserHandle.getUserId(mCurrentUid));
}
@@ -614,8 +528,7 @@
startAppInfoFragment(AppStorageSettings.class, R.string.storage_settings);
break;
case LIST_TYPE_HIGH_POWER:
- HighPowerDetail.show(this, mCurrentPkgName, INSTALLED_APP_DETAILS,
- mFinishAfterDialog);
+ HighPowerDetail.show(this, mCurrentPkgName, INSTALLED_APP_DETAILS);
break;
case LIST_TYPE_OVERLAY:
startAppInfoFragment(DrawOverlayDetails.class, R.string.overlay_settings);
@@ -651,7 +564,11 @@
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
- HelpUtils.prepareHelpMenuItem(getActivity(), menu, getHelpResource(), getClass().getName());
+ final Activity activity = getActivity();
+ if (activity == null) {
+ return;
+ }
+ HelpUtils.prepareHelpMenuItem(activity, menu, getHelpResource(), getClass().getName());
mOptionsMenu = menu;
inflater.inflate(R.menu.manage_apps, menu);
updateOptionsMenu();
@@ -704,7 +621,6 @@
case R.id.sort_order_alpha:
case R.id.sort_order_size:
mSortOrder = menuId;
- mListView.setFastScrollEnabled(isFastScrollEnabled());
if (mApplications != null) {
mApplications.rebuild(mSortOrder);
}
@@ -712,7 +628,7 @@
case R.id.show_system:
case R.id.hide_system:
mShowSystem = !mShowSystem;
- mApplications.rebuild(false);
+ mApplications.rebuild();
break;
case R.id.reset_app_preferences:
mResetAppsHelper.buildResetDialog();
@@ -738,11 +654,16 @@
}
@Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ public void onClick(View view) {
if (mApplications == null) {
return;
}
+ final int position = mRecyclerView.getChildAdapterPosition(view);
+ if (position == RecyclerView.NO_POSITION) {
+ Log.w(TAG, "Cannot find position for child, skipping onClick handling");
+ return;
+ }
if (mApplications.getApplicationCount() > position) {
ApplicationsState.AppEntry entry = mApplications.getAppEntry(position);
mCurrentPkgName = entry.info.packageName;
@@ -789,22 +710,24 @@
static class FilterSpinnerAdapter extends ArrayAdapter<CharSequence> {
private final ManageApplications mManageApplications;
+ private final Context mContext;
// Use ArrayAdapter for view logic, but have our own list for managing
// the options available.
- private final ArrayList<Integer> mFilterOptions = new ArrayList<>();
+ private final ArrayList<AppFilterItem> mFilterOptions = new ArrayList<>();
public FilterSpinnerAdapter(ManageApplications manageApplications) {
- super(manageApplications.mFilterSpinner.getContext(), R.layout.filter_spinner_item);
- setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ super(manageApplications.getContext(), R.layout.filter_spinner_item);
+ mContext = manageApplications.getContext();
mManageApplications = manageApplications;
+ setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
}
- public int getFilter(int position) {
+ public AppFilterItem getFilter(int position) {
return mFilterOptions.get(position);
}
- public void setFilterEnabled(int filter, boolean enabled) {
+ public void setFilterEnabled(@AppFilterRegistry.FilterType int filter, boolean enabled) {
if (enabled) {
enableFilter(filter);
} else {
@@ -812,33 +735,45 @@
}
}
- public void enableFilter(int filter) {
- if (mFilterOptions.contains(filter)) return;
- if (DEBUG) Log.d(TAG, "Enabling filter " + filter);
+ public void enableFilter(@AppFilterRegistry.FilterType int filterType) {
+ final AppFilterItem filter = AppFilterRegistry.getInstance().get(filterType);
+ if (mFilterOptions.contains(filter)) {
+ return;
+ }
+ if (DEBUG) {
+ Log.d(TAG, "Enabling filter " + filter);
+ }
mFilterOptions.add(filter);
Collections.sort(mFilterOptions);
mManageApplications.mSpinnerHeader.setVisibility(
mFilterOptions.size() > 1 ? View.VISIBLE : View.GONE);
notifyDataSetChanged();
if (mFilterOptions.size() == 1) {
- if (DEBUG) Log.d(TAG, "Auto selecting filter " + filter);
+ if (DEBUG) {
+ Log.d(TAG, "Auto selecting filter " + filter);
+ }
mManageApplications.mFilterSpinner.setSelection(0);
mManageApplications.onItemSelected(null, null, 0, 0);
}
}
- public void disableFilter(int filter) {
- if (!mFilterOptions.remove((Integer) filter)) {
+ public void disableFilter(@AppFilterRegistry.FilterType int filterType) {
+ final AppFilterItem filter = AppFilterRegistry.getInstance().get(filterType);
+ if (!mFilterOptions.remove(filter)) {
return;
}
- if (DEBUG) Log.d(TAG, "Disabling filter " + filter);
+ if (DEBUG) {
+ Log.d(TAG, "Disabling filter " + filter);
+ }
Collections.sort(mFilterOptions);
mManageApplications.mSpinnerHeader.setVisibility(
mFilterOptions.size() > 1 ? View.VISIBLE : View.GONE);
notifyDataSetChanged();
if (mManageApplications.mFilter == filter) {
if (mFilterOptions.size() > 0) {
- if (DEBUG) Log.d(TAG, "Auto selecting filter " + mFilterOptions.get(0));
+ if (DEBUG) {
+ Log.d(TAG, "Auto selecting filter " + mFilterOptions.get(0));
+ }
mManageApplications.mFilterSpinner.setSelection(0);
mManageApplications.onItemSelected(null, null, 0, 0);
}
@@ -852,50 +787,29 @@
@Override
public CharSequence getItem(int position) {
- return getFilterString(mFilterOptions.get(position));
+ return mContext.getText(mFilterOptions.get(position).getTitle());
}
-
- private CharSequence getFilterString(int filter) {
- return mManageApplications.getString(FILTER_LABELS[filter]);
- }
-
}
- /*
- * Custom adapter implementation for the ListView
- * This adapter maintains a map for each displayed application and its properties
- * An index value on each AppInfo object indicates the correct position or index
- * in the list. If the list gets updated dynamically when the user is viewing the list of
- * applications, we need to return the correct index of position. This is done by mapping
- * the getId methods via the package name into the internal maps and indices.
- * The order of applications in the list is mirrored in mAppLocalList
- */
- static class ApplicationsAdapter extends BaseAdapter implements Filterable,
- ApplicationsState.Callbacks, AppStateBaseBridge.Callback,
- AbsListView.RecyclerListener, SectionIndexer {
+ static class ApplicationsAdapter extends RecyclerView.Adapter<ApplicationViewHolder>
+ implements ApplicationsState.Callbacks, AppStateBaseBridge.Callback {
- // how long to wait for app list to populate without showing the loading container
- private static final long DELAY_SHOW_LOADING_CONTAINER_THRESHOLD_MS = 100L;
-
- private static final SectionInfo[] EMPTY_SECTIONS = new SectionInfo[0];
+ private static final String STATE_LAST_SCROLL_INDEX = "state_last_scroll_index";
+ private static final int VIEW_TYPE_APP = 0;
+ private static final int VIEW_TYPE_EXTRA_VIEW = 1;
private final ApplicationsState mState;
private final ApplicationsState.Session mSession;
private final ManageApplications mManageApplications;
private final Context mContext;
- private final ArrayList<View> mActive = new ArrayList<View>();
private final AppStateBaseBridge mExtraInfoBridge;
- private final Handler mBgHandler;
- private final Handler mFgHandler;
private final LoadingViewController mLoadingViewController;
- private int mFilterMode;
- private ArrayList<ApplicationsState.AppEntry> mBaseEntries;
+ private AppFilterItem mAppFilter;
private ArrayList<ApplicationsState.AppEntry> mEntries;
private boolean mResumed;
private int mLastSortMode = -1;
private int mWhichSize = SIZE_TOTAL;
- CharSequence mCurFilterPrefix;
private AppFilter mCompositeFilter;
private boolean mHasReceivedLoadEntries;
private boolean mHasReceivedBridgeCallback;
@@ -905,39 +819,11 @@
// fragment is paused. We need this special handling because app entries are added gradually
// when we rebuild the list after the user made some changes, like uninstalling an app.
private int mLastIndex = -1;
- private int mLastTop;
-
- private AlphabeticIndex.ImmutableIndex<Locale> mIndex;
- private SectionInfo[] mSections = EMPTY_SECTIONS;
- private int[] mPositionToSectionIndex;
-
- private Filter mFilter = new Filter() {
- @Override
- protected FilterResults performFiltering(CharSequence constraint) {
- ArrayList<ApplicationsState.AppEntry> entries
- = applyPrefixFilter(constraint, mBaseEntries);
- FilterResults fr = new FilterResults();
- fr.values = entries;
- fr.count = entries.size();
- return fr;
- }
-
- @Override
- @SuppressWarnings("unchecked")
- protected void publishResults(CharSequence constraint, FilterResults results) {
- mCurFilterPrefix = constraint;
- mEntries = (ArrayList<ApplicationsState.AppEntry>) results.values;
- rebuildSections();
- notifyDataSetChanged();
- }
- };
-
public ApplicationsAdapter(ApplicationsState state, ManageApplications manageApplications,
- int filterMode) {
+ AppFilterItem appFilter, Bundle savedInstanceState) {
+ setHasStableIds(true);
mState = state;
- mFgHandler = new Handler();
- mBgHandler = new Handler(mState.getBackgroundLooper());
mSession = state.newSession(this);
mManageApplications = manageApplications;
mLoadingViewController = new LoadingViewController(
@@ -945,7 +831,7 @@
mManageApplications.mListContainer
);
mContext = manageApplications.getActivity();
- mFilterMode = filterMode;
+ mAppFilter = appFilter;
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
manageApplications.mNotifBackend);
@@ -962,23 +848,28 @@
} else {
mExtraInfoBridge = null;
}
+ if (savedInstanceState != null) {
+ mLastIndex = savedInstanceState.getInt(STATE_LAST_SCROLL_INDEX);
+ }
}
public void setCompositeFilter(AppFilter compositeFilter) {
mCompositeFilter = compositeFilter;
- rebuild(true);
+ rebuild();
}
- public void setFilter(int filter) {
- mFilterMode = filter;
- rebuild(true);
+ public void setFilter(AppFilterItem appFilter) {
+ mAppFilter = appFilter;
+ rebuild();
}
public void setExtraViewController(FileViewHolderController extraViewController) {
mExtraViewController = extraViewController;
- mBgHandler.post(() -> {
+ // Start to query extra view's stats on background, and once done post result to main
+ // thread.
+ ThreadUtils.postOnBackgroundThread(() -> {
mExtraViewController.queryStats();
- mFgHandler.post(() -> {
+ ThreadUtils.postOnMainThread(() -> {
onExtraViewCompleted();
});
});
@@ -993,7 +884,7 @@
if (mExtraInfoBridge != null) {
mExtraInfoBridge.resume();
}
- rebuild(false);
+ rebuild();
} else {
rebuild(sort);
}
@@ -1007,11 +898,13 @@
mExtraInfoBridge.pause();
}
}
+ }
+
+ public void onSaveInstanceState(Bundle outState) {
// Record the current scroll position before pausing.
- mLastIndex = mManageApplications.mListView.getFirstVisiblePosition();
- View v = mManageApplications.mListView.getChildAt(0);
- mLastTop =
- (v == null) ? 0 : (v.getTop() - mManageApplications.mListView.getPaddingTop());
+ final LinearLayoutManager layoutManager =
+ (LinearLayoutManager) mManageApplications.mRecyclerView.getLayoutManager();
+ outState.putInt(STATE_LAST_SCROLL_INDEX, layoutManager.findFirstVisibleItemPosition());
}
public void release() {
@@ -1026,10 +919,25 @@
return;
}
mLastSortMode = sort;
- rebuild(true);
+ rebuild();
}
- public void rebuild(boolean eraseold) {
+ @Override
+ public ApplicationViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ final View view = ApplicationViewHolder.newView(
+ LayoutInflater.from(parent.getContext()), parent);
+ return new ApplicationViewHolder(view);
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ boolean isLastItem = (getItemCount() - 1) == position;
+ return hasExtraView() && isLastItem
+ ? VIEW_TYPE_EXTRA_VIEW
+ : VIEW_TYPE_APP;
+ }
+
+ public void rebuild() {
if (!mHasReceivedLoadEntries
|| (mExtraInfoBridge != null && !mHasReceivedBridgeCallback)) {
// Don't rebuild the list until all the app entries are loaded.
@@ -1043,7 +951,7 @@
} else {
mWhichSize = SIZE_INTERNAL;
}
- filterObj = FILTERS[mFilterMode];
+ filterObj = mAppFilter.getFilter();
if (mCompositeFilter != null) {
filterObj = new CompoundFilter(filterObj, mCompositeFilter);
}
@@ -1077,16 +985,15 @@
filterObj = new CompoundFilter(filterObj, ApplicationsState.FILTER_NOT_HIDE);
AppFilter finalFilterObj = filterObj;
- mBgHandler.post(() -> {
+ ThreadUtils.postOnBackgroundThread(() -> {
final ArrayList<AppEntry> entries = mSession.rebuild(finalFilterObj,
comparatorObj, false);
if (entries != null) {
- mFgHandler.post(() -> onRebuildComplete(entries));
+ ThreadUtils.postOnMainThread(() -> onRebuildComplete(entries));
}
});
}
-
static private boolean packageNameEquals(PackageItemInfo info1, PackageItemInfo info2) {
if (info1 == null || info2 == null) {
return false;
@@ -1101,8 +1008,7 @@
ArrayList<ApplicationsState.AppEntry> entries) {
int size = entries.size();
// returnList will not have more entries than entries
- ArrayList<ApplicationsState.AppEntry> returnEntries = new
- ArrayList<ApplicationsState.AppEntry>(size);
+ ArrayList<ApplicationsState.AppEntry> returnEntries = new ArrayList<>(size);
// assume appinfo of same package but different users are grouped together
PackageItemInfo lastInfo = null;
@@ -1120,25 +1026,24 @@
@Override
public void onRebuildComplete(ArrayList<AppEntry> entries) {
- if (mFilterMode == FILTER_APPS_POWER_WHITELIST ||
- mFilterMode == FILTER_APPS_POWER_WHITELIST_ALL) {
+ final int filterType = mAppFilter.getFilterType();
+ if (filterType == FILTER_APPS_POWER_WHITELIST ||
+ filterType == FILTER_APPS_POWER_WHITELIST_ALL) {
entries = removeDuplicateIgnoringUser(entries);
}
- mBaseEntries = entries;
- if (mBaseEntries != null) {
- mEntries = applyPrefixFilter(mCurFilterPrefix, mBaseEntries);
- rebuildSections();
- } else {
- mEntries = null;
- mSections = EMPTY_SECTIONS;
- mPositionToSectionIndex = null;
- }
-
+ mEntries = entries;
notifyDataSetChanged();
+ if (getItemCount() == 0) {
+ mManageApplications.mRecyclerView.setVisibility(View.GONE);
+ mManageApplications.mEmptyView.setVisibility(View.VISIBLE);
+ } else {
+ mManageApplications.mEmptyView.setVisibility(View.GONE);
+ mManageApplications.mRecyclerView.setVisibility(View.VISIBLE);
+ }
// Restore the last scroll position if the number of entries added so far is bigger than
// it.
- if (mLastIndex != -1 && getCount() > mLastIndex) {
- mManageApplications.mListView.setSelectionFromTop(mLastIndex, mLastTop);
+ if (mLastIndex != -1 && getItemCount() > mLastIndex) {
+ mManageApplications.mRecyclerView.getLayoutManager().scrollToPosition(mLastIndex);
mLastIndex = -1;
}
@@ -1155,45 +1060,6 @@
mManageApplications.setHasInstant(mState.haveInstantApps());
}
- private void rebuildSections() {
- if (mEntries != null && mManageApplications.mListView.isFastScrollEnabled()) {
- // Rebuild sections
- if (mIndex == null) {
- LocaleList locales = mContext.getResources().getConfiguration().getLocales();
- if (locales.size() == 0) {
- locales = new LocaleList(Locale.ENGLISH);
- }
- AlphabeticIndex<Locale> index = new AlphabeticIndex<>(locales.get(0));
- int localeCount = locales.size();
- for (int i = 1; i < localeCount; i++) {
- index.addLabels(locales.get(i));
- }
- // Ensure we always have some base English locale buckets
- index.addLabels(Locale.ENGLISH);
- mIndex = index.buildImmutableIndex();
- }
-
- ArrayList<SectionInfo> sections = new ArrayList<>();
- int lastSecId = -1;
- int totalEntries = mEntries.size();
- mPositionToSectionIndex = new int[totalEntries];
-
- for (int pos = 0; pos < totalEntries; pos++) {
- String label = mEntries.get(pos).label;
- int secId = mIndex.getBucketIndex(TextUtils.isEmpty(label) ? "" : label);
- if (secId != lastSecId) {
- lastSecId = secId;
- sections.add(new SectionInfo(mIndex.getBucket(secId).getLabel(), pos));
- }
- mPositionToSectionIndex[pos] = sections.size() - 1;
- }
- mSections = sections.toArray(EMPTY_SECTIONS);
- } else {
- mSections = EMPTY_SECTIONS;
- mPositionToSectionIndex = null;
- }
- }
-
@VisibleForTesting
void updateLoading() {
final boolean appLoaded = mHasReceivedLoadEntries && mSession.getAllApps().size() != 0;
@@ -1204,30 +1070,10 @@
}
}
- ArrayList<ApplicationsState.AppEntry> applyPrefixFilter(CharSequence prefix,
- ArrayList<ApplicationsState.AppEntry> origEntries) {
- if (prefix == null || prefix.length() == 0) {
- return origEntries;
- } else {
- String prefixStr = ApplicationsState.normalize(prefix.toString());
- final String spacePrefixStr = " " + prefixStr;
- ArrayList<ApplicationsState.AppEntry> newEntries
- = new ArrayList<ApplicationsState.AppEntry>();
- for (int i = 0; i < origEntries.size(); i++) {
- ApplicationsState.AppEntry entry = origEntries.get(i);
- String nlabel = entry.getNormalizedLabel();
- if (nlabel.startsWith(prefixStr) || nlabel.indexOf(spacePrefixStr) != -1) {
- newEntries.add(entry);
- }
- }
- return newEntries;
- }
- }
-
@Override
public void onExtraInfoUpdated() {
mHasReceivedBridgeCallback = true;
- rebuild(false);
+ rebuild();
}
@Override
@@ -1237,7 +1083,7 @@
@Override
public void onPackageListChanged() {
- rebuild(false);
+ rebuild();
}
@Override
@@ -1250,92 +1096,74 @@
public void onLoadEntriesCompleted() {
mHasReceivedLoadEntries = true;
// We may have been skipping rebuilds until this came in, trigger one now.
- rebuild(false);
+ rebuild();
}
@Override
public void onPackageSizeChanged(String packageName) {
- for (int i = 0; i < mActive.size(); i++) {
- AppViewHolder holder = (AppViewHolder) mActive.get(i).getTag();
- if (holder == null || holder.entry == null) {
+ if (mEntries == null) {
+ return;
+ }
+ final int size = mEntries.size();
+ for (int i = 0; i < size; i++) {
+ final AppEntry entry = mEntries.get(i);
+ final ApplicationInfo info = entry.info;
+ if (info == null && !TextUtils.equals(packageName, info.packageName)) {
continue;
}
- ApplicationInfo info = holder.entry.info;
- if (info == null) {
- continue;
- }
- if (holder.entry.info.packageName.equals(packageName)) {
- synchronized (holder.entry) {
- updateSummary(holder);
- }
- if (holder.entry.info.packageName.equals(mManageApplications.mCurrentPkgName)
- && mLastSortMode == R.id.sort_order_size) {
- // We got the size information for the last app the
- // user viewed, and are sorting by size... they may
- // have cleared data, so we immediately want to resort
- // the list with the new size to reflect it to the user.
- rebuild(false);
- }
+ if (TextUtils.equals(mManageApplications.mCurrentPkgName, info.packageName)) {
+ // We got the size information for the last app the
+ // user viewed, and are sorting by size... they may
+ // have cleared data, so we immediately want to resort
+ // the list with the new size to reflect it to the user.
+ rebuild();
return;
+ } else {
+ notifyItemChanged(i);
}
+
}
}
@Override
public void onLauncherInfoChanged() {
if (!mManageApplications.mShowSystem) {
- rebuild(false);
+ rebuild();
}
}
@Override
public void onAllSizesComputed() {
if (mLastSortMode == R.id.sort_order_size) {
- rebuild(false);
+ rebuild();
}
}
public void onExtraViewCompleted() {
- int size = mActive.size();
- // If we have no elements, don't do anything.
- if (size < 1) {
+ if (!hasExtraView()) {
return;
}
- AppViewHolder holder = (AppViewHolder) mActive.get(size - 1).getTag();
-
- // HACK: The extra view has no AppEntry -- and should be the only element without one.
- // Thus, if the last active element has no AppEntry, it is the extra view.
- if (holder == null || holder.entry != null) {
- return;
- }
-
- mExtraViewController.setupView(holder);
+ // Update last item - this is assumed to be the extra view.
+ notifyItemChanged(getItemCount() - 1);
}
- public int getCount() {
+ @Override
+ public int getItemCount() {
if (mEntries == null) {
return 0;
}
- int extraViewAddition =
- (mExtraViewController != null && mExtraViewController.shouldShow()) ? 1 : 0;
- return mEntries.size() + extraViewAddition;
+ return mEntries.size() + (hasExtraView() ? 1 : 0);
}
public int getApplicationCount() {
return mEntries != null ? mEntries.size() : 0;
}
- public Object getItem(int position) {
- if (position == mEntries.size()) {
- return mExtraViewController;
- }
+ public AppEntry getAppEntry(int position) {
return mEntries.get(position);
}
- public ApplicationsState.AppEntry getAppEntry(int position) {
- return mEntries.get(position);
- }
-
+ @Override
public long getItemId(int position) {
if (position == mEntries.size()) {
return -1;
@@ -1343,142 +1171,76 @@
return mEntries.get(position).id;
}
- @Override
- public boolean areAllItemsEnabled() {
- return false;
- }
-
- @Override
public boolean isEnabled(int position) {
- if (position == mEntries.size() && mExtraViewController != null &&
- mExtraViewController.shouldShow()) {
- return true;
- }
-
- if (mManageApplications.mListType != LIST_TYPE_HIGH_POWER) {
+ if (getItemViewType(position) == VIEW_TYPE_EXTRA_VIEW
+ || mManageApplications.mListType != LIST_TYPE_HIGH_POWER) {
return true;
}
ApplicationsState.AppEntry entry = mEntries.get(position);
return !PowerWhitelistBackend.getInstance().isSysWhitelisted(entry.info.packageName);
}
- public View getView(int position, View convertView, ViewGroup parent) {
- // A ViewHolder keeps references to children views to avoid unnecessary calls
- // to findViewById() on each row.
- AppViewHolder holder = AppViewHolder.createOrRecycle(mManageApplications.mInflater,
- convertView);
- convertView = holder.rootView;
-
- // Handle the extra view if it is the last entry.
+ @Override
+ public void onBindViewHolder(ApplicationViewHolder holder, int position) {
if (mEntries != null && mExtraViewController != null && position == mEntries.size()) {
+ // set up view for extra view controller
mExtraViewController.setupView(holder);
- convertView.setEnabled(true);
} else {
// Bind the data efficiently with the holder
ApplicationsState.AppEntry entry = mEntries.get(position);
synchronized (entry) {
- holder.entry = entry;
- if (entry.label != null) {
- holder.appName.setText(entry.label);
- }
+ holder.setTitle(entry.label);
mState.ensureIcon(entry);
- if (entry.icon != null) {
- holder.appIcon.setImageDrawable(entry.icon);
- }
- updateSummary(holder);
- updateDisableView(holder.disabled, entry.info);
+ holder.setIcon(entry.icon);
+ updateSummary(holder, entry);
+ holder.updateDisableView(entry.info);
}
- convertView.setEnabled(isEnabled(position));
+ holder.setEnabled(isEnabled(position));
}
-
- mActive.remove(convertView);
- mActive.add(convertView);
- return convertView;
+ holder.itemView.setOnClickListener(mManageApplications);
}
- @VisibleForTesting
- void updateDisableView(TextView view, ApplicationInfo info) {
- if ((info.flags & ApplicationInfo.FLAG_INSTALLED) == 0) {
- view.setVisibility(View.VISIBLE);
- view.setText(R.string.not_installed);
- } else if (!info.enabled || info.enabledSetting
- == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {
- view.setVisibility(View.VISIBLE);
- view.setText(R.string.disabled);
- } else {
- view.setVisibility(View.GONE);
- }
- }
-
- private void updateSummary(AppViewHolder holder) {
+ private void updateSummary(ApplicationViewHolder holder, AppEntry entry) {
switch (mManageApplications.mListType) {
case LIST_TYPE_NOTIFICATION:
- if (holder.entry.extraInfo != null) {
- holder.summary.setText(InstalledAppDetails.getNotificationSummary(
- (AppRow) holder.entry.extraInfo, mContext));
+ if (entry.extraInfo != null) {
+ holder.setSummary(InstalledAppDetails.getNotificationSummary(
+ (AppRow) entry.extraInfo, mContext));
} else {
- holder.summary.setText(null);
+ holder.setSummary(null);
}
break;
-
case LIST_TYPE_USAGE_ACCESS:
- if (holder.entry.extraInfo != null) {
- holder.summary.setText((new UsageState((PermissionState) holder.entry
- .extraInfo)).isPermissible()
- ? R.string.app_permission_summary_allowed
- : R.string.app_permission_summary_not_allowed);
+ if (entry.extraInfo != null) {
+ holder.setSummary(
+ (new UsageState((PermissionState) entry.extraInfo)).isPermissible()
+ ? R.string.app_permission_summary_allowed
+ : R.string.app_permission_summary_not_allowed);
} else {
- holder.summary.setText(null);
+ holder.setSummary(null);
}
break;
-
case LIST_TYPE_HIGH_POWER:
- holder.summary.setText(HighPowerDetail.getSummary(mContext, holder.entry));
+ holder.setSummary(HighPowerDetail.getSummary(mContext, entry));
break;
-
case LIST_TYPE_OVERLAY:
- holder.summary.setText(DrawOverlayDetails.getSummary(mContext, holder.entry));
+ holder.setSummary(DrawOverlayDetails.getSummary(mContext, entry));
break;
-
case LIST_TYPE_WRITE_SETTINGS:
- holder.summary.setText(WriteSettingsDetails.getSummary(mContext,
- holder.entry));
+ holder.setSummary(WriteSettingsDetails.getSummary(mContext, entry));
break;
-
case LIST_TYPE_MANAGE_SOURCES:
- holder.summary.setText(ExternalSourcesDetails.getPreferenceSummary(mContext,
- holder.entry));
+ holder.setSummary(ExternalSourcesDetails.getPreferenceSummary(mContext, entry));
break;
-
default:
- holder.updateSizeText(mManageApplications.mInvalidSizeStr, mWhichSize);
+ holder.updateSizeText(entry, mManageApplications.mInvalidSizeStr, mWhichSize);
break;
}
}
- @Override
- public Filter getFilter() {
- return mFilter;
- }
-
- @Override
- public void onMovedToScrapHeap(View view) {
- mActive.remove(view);
- }
-
- @Override
- public Object[] getSections() {
- return mSections;
- }
-
- @Override
- public int getPositionForSection(int sectionIndex) {
- return mSections[sectionIndex].position;
- }
-
- @Override
- public int getSectionForPosition(int position) {
- return mPositionToSectionIndex[position];
+ private boolean hasExtraView() {
+ return mExtraViewController != null
+ && mExtraViewController.shouldShow();
}
}
@@ -1508,21 +1270,6 @@
}
}
- private static class SectionInfo {
- final String label;
- final int position;
-
- public SectionInfo(String label, int position) {
- this.label = label;
- this.position = position;
- }
-
- @Override
- public String toString() {
- return label;
- }
- }
-
public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
= new SummaryLoader.SummaryProviderFactory() {
@Override
diff --git a/src/com/android/settings/applications/MusicViewHolderController.java b/src/com/android/settings/applications/manageapplications/MusicViewHolderController.java
similarity index 87%
rename from src/com/android/settings/applications/MusicViewHolderController.java
rename to src/com/android/settings/applications/manageapplications/MusicViewHolderController.java
index af822a0..2a2ac3b 100644
--- a/src/com/android/settings/applications/MusicViewHolderController.java
+++ b/src/com/android/settings/applications/manageapplications/MusicViewHolderController.java
@@ -11,10 +11,10 @@
* 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
+ * limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
import android.app.Fragment;
import android.content.Context;
@@ -36,7 +36,7 @@
* MusicViewHolderController controls an Audio/Music file view in the ManageApplications view.
*/
public class MusicViewHolderController implements FileViewHolderController {
- private static final String TAG = "MusicViewHolderController";
+ private static final String TAG = "MusicViewHolderCtrl";
private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
private static final int INSET_SIZE = 24; // dp
@@ -72,11 +72,11 @@
}
@Override
- public void setupView(AppViewHolder holder) {
- holder.appIcon.setImageDrawable(
+ public void setupView(ApplicationViewHolder holder) {
+ holder.setIcon(
new InsetDrawable(mContext.getDrawable(R.drawable.ic_headset_24dp), INSET_SIZE));
- holder.appName.setText(mContext.getText(R.string.audio_files_title));
- holder.summary.setText(Formatter.formatFileSize(mContext, mMusicSize));
+ holder.setTitle(mContext.getText(R.string.audio_files_title));
+ holder.setSummary(Formatter.formatFileSize(mContext, mMusicSize));
}
@Override
diff --git a/src/com/android/settings/applications/PhotosViewHolderController.java b/src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java
similarity index 86%
rename from src/com/android/settings/applications/PhotosViewHolderController.java
rename to src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java
index a652bb1..fafa875 100644
--- a/src/com/android/settings/applications/PhotosViewHolderController.java
+++ b/src/com/android/settings/applications/manageapplications/PhotosViewHolderController.java
@@ -11,10 +11,10 @@
* 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
+ * limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
import android.app.Fragment;
import android.content.Context;
@@ -33,7 +33,7 @@
/** PhotosViewHolderController controls an Audio/Music file view in the ManageApplications view. */
public class PhotosViewHolderController implements FileViewHolderController {
- private static final String TAG = "PhotosViewHolderController";
+ private static final String TAG = "PhotosViewHolderCtrl";
private static final String IMAGE_MIME_TYPE = "image/*";
private static final int INSET_SIZE = 24; // dp
@@ -71,11 +71,11 @@
}
@Override
- public void setupView(AppViewHolder holder) {
- holder.appIcon.setImageDrawable(
+ public void setupView(ApplicationViewHolder holder) {
+ holder.setIcon(
new InsetDrawable(mContext.getDrawable(R.drawable.ic_photo_library), INSET_SIZE));
- holder.appName.setText(mContext.getText(R.string.storage_detail_images));
- holder.summary.setText(Formatter.formatFileSize(mContext, mFilesSize));
+ holder.setTitle(mContext.getText(R.string.storage_detail_images));
+ holder.setSummary(Formatter.formatFileSize(mContext, mFilesSize));
}
@Override
diff --git a/src/com/android/settings/applications/ResetAppPrefPreferenceController.java b/src/com/android/settings/applications/manageapplications/ResetAppPrefPreferenceController.java
similarity index 97%
rename from src/com/android/settings/applications/ResetAppPrefPreferenceController.java
rename to src/com/android/settings/applications/manageapplications/ResetAppPrefPreferenceController.java
index 2766c59..d7f6c6e 100644
--- a/src/com/android/settings/applications/ResetAppPrefPreferenceController.java
+++ b/src/com/android/settings/applications/manageapplications/ResetAppPrefPreferenceController.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
import android.content.Context;
import android.os.Bundle;
diff --git a/src/com/android/settings/applications/ResetAppsHelper.java b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
similarity index 98%
rename from src/com/android/settings/applications/ResetAppsHelper.java
rename to src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
index 93d384d..686e027 100644
--- a/src/com/android/settings/applications/ResetAppsHelper.java
+++ b/src/com/android/settings/applications/manageapplications/ResetAppsHelper.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
import static android.net.NetworkPolicyManager.POLICY_NONE;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
diff --git a/src/com/android/settings/bluetooth/BluetoothDetailsButtonsController.java b/src/com/android/settings/bluetooth/BluetoothDetailsButtonsController.java
index fe1727a..5cd8171 100644
--- a/src/com/android/settings/bluetooth/BluetoothDetailsButtonsController.java
+++ b/src/com/android/settings/bluetooth/BluetoothDetailsButtonsController.java
@@ -33,7 +33,7 @@
private static final String KEY_ACTION_BUTTONS = "action_buttons";
private boolean mIsConnected;
- private boolean mButton1Initialized;
+ private boolean mConnectButtonInitialized;
private ActionButtonPreference mActionButtons;
public BluetoothDetailsButtonsController(Context context, PreferenceFragment fragment,
@@ -51,34 +51,34 @@
@Override
protected void init(PreferenceScreen screen) {
mActionButtons = ((ActionButtonPreference) screen.findPreference(getPreferenceKey()))
- .setButton2Text(R.string.forget)
- .setButton2OnClickListener((view) -> onForgetButtonPressed())
- .setButton2Positive(false)
- .setButton2Enabled(true);
+ .setButton1Text(R.string.forget)
+ .setButton1OnClickListener((view) -> onForgetButtonPressed())
+ .setButton1Positive(false)
+ .setButton1Enabled(true);
}
@Override
protected void refresh() {
- mActionButtons.setButton1Enabled(!mCachedDevice.isBusy());
+ mActionButtons.setButton2Enabled(!mCachedDevice.isBusy());
boolean previouslyConnected = mIsConnected;
mIsConnected = mCachedDevice.isConnected();
if (mIsConnected) {
- if (!mButton1Initialized || !previouslyConnected) {
+ if (!mConnectButtonInitialized || !previouslyConnected) {
mActionButtons
- .setButton1Text(R.string.bluetooth_device_context_disconnect)
- .setButton1OnClickListener(view -> mCachedDevice.disconnect())
- .setButton1Positive(false);
- mButton1Initialized = true;
+ .setButton2Text(R.string.bluetooth_device_context_disconnect)
+ .setButton2OnClickListener(view -> mCachedDevice.disconnect())
+ .setButton2Positive(false);
+ mConnectButtonInitialized = true;
}
} else {
- if (!mButton1Initialized || previouslyConnected) {
+ if (!mConnectButtonInitialized || previouslyConnected) {
mActionButtons
- .setButton1Text(R.string.bluetooth_device_context_connect)
- .setButton1OnClickListener(
+ .setButton2Text(R.string.bluetooth_device_context_connect)
+ .setButton2OnClickListener(
view -> mCachedDevice.connect(true /* connectAllProfiles */))
- .setButton1Positive(true);
- mButton1Initialized = true;
+ .setButton2Positive(true);
+ mConnectButtonInitialized = true;
}
}
}
diff --git a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
index 0485e69..9d47c65 100644
--- a/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
+++ b/src/com/android/settings/bluetooth/DeviceListPreferenceFragment.java
@@ -53,7 +53,7 @@
private static final String KEY_BT_SCAN = "bt_scan";
- // Copied from DevelopmentSettings.java
+ // Copied from BluetoothDeviceNoNamePreferenceController.java
private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_PROPERTY =
"persist.bluetooth.showdeviceswithoutnames";
diff --git a/src/com/android/settings/core/InstrumentedFragment.java b/src/com/android/settings/core/InstrumentedFragment.java
index 188dbde..45db836 100644
--- a/src/com/android/settings/core/InstrumentedFragment.java
+++ b/src/com/android/settings/core/InstrumentedFragment.java
@@ -49,4 +49,8 @@
mVisibilityLoggerMixin.setSourceMetricsCategory(getActivity());
super.onResume();
}
+
+ protected final VisibilityLoggerMixin getVisibilityLogger() {
+ return mVisibilityLoggerMixin;
+ }
}
diff --git a/src/com/android/settings/core/InstrumentedPreferenceFragment.java b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
index a5d0715..9ab1a01 100644
--- a/src/com/android/settings/core/InstrumentedPreferenceFragment.java
+++ b/src/com/android/settings/core/InstrumentedPreferenceFragment.java
@@ -16,8 +16,15 @@
package com.android.settings.core;
+import android.annotation.Nullable;
+import android.annotation.StringRes;
import android.content.Context;
import android.os.Bundle;
+import android.support.annotation.XmlRes;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
+import android.util.Log;
import com.android.settings.core.instrumentation.Instrumentable;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
@@ -32,6 +39,9 @@
public abstract class InstrumentedPreferenceFragment extends ObservablePreferenceFragment
implements Instrumentable {
+ private static final String TAG = "InstrumentedPrefFrag";
+ private static final String FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE =
+ "settings_use_preference_screen_title";
protected MetricsFeatureProvider mMetricsFeatureProvider;
// metrics placeholder value. Only use this for development.
@@ -47,6 +57,17 @@
}
@Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (usePreferenceScreenTitle()) {
+ final int title = getTitle();
+ if (title != -1) {
+ getActivity().setTitle(title);
+ }
+ }
+ }
+
+ @Override
public void onAttach(Context context) {
super.onAttach(context);
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
@@ -62,6 +83,16 @@
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
}
+ @Override
+ public void addPreferencesFromResource(@XmlRes int preferencesResId) {
+ super.addPreferencesFromResource(preferencesResId);
+ updateActivityTitleWithScreenTitle(getPreferenceScreen());
+ }
+
+ public static boolean usePreferenceScreenTitle() {
+ return FeatureFlagUtils.isEnabled(FEATURE_FLAG_USE_PREFERENCE_SCREEN_TITLE);
+ }
+
protected final Context getPrefContext() {
return getPreferenceManager().getContext();
}
@@ -69,4 +100,27 @@
protected final VisibilityLoggerMixin getVisibilityLogger() {
return mVisibilityLoggerMixin;
}
+
+ /**
+ * Return the resource id of the title to be used for the fragment. This is for preference
+ * fragments that do not have an explicit preference screen xml, and hence the title need to be
+ * specified separately. Do not use this method if the title is already specified in the
+ * preference screen.
+ */
+ @StringRes
+ protected int getTitle() {
+ return -1;
+ }
+
+ private void updateActivityTitleWithScreenTitle(PreferenceScreen screen) {
+ if (usePreferenceScreenTitle() && screen != null) {
+ final CharSequence title = screen.getTitle();
+ if (!TextUtils.isEmpty(title)) {
+ getActivity().setTitle(title);
+ } else {
+ Log.w(TAG, "Screen title missing for fragment " + this.getClass().getName());
+ }
+ }
+ }
+
}
diff --git a/src/com/android/settings/core/PreferenceControllerMixin.java b/src/com/android/settings/core/PreferenceControllerMixin.java
index 0f60210..1c54af7 100644
--- a/src/com/android/settings/core/PreferenceControllerMixin.java
+++ b/src/com/android/settings/core/PreferenceControllerMixin.java
@@ -15,6 +15,9 @@
*/
package com.android.settings.core;
+import android.text.TextUtils;
+import android.util.Log;
+
import com.android.settings.search.ResultPayload;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -26,6 +29,8 @@
*/
public interface PreferenceControllerMixin {
+ String TAG = "PrefControllerMixin";
+
/**
* Updates non-indexable keys for search provider.
*
@@ -34,7 +39,13 @@
default void updateNonIndexableKeys(List<String> keys) {
if (this instanceof AbstractPreferenceController) {
if (!((AbstractPreferenceController) this).isAvailable()) {
- keys.add(((AbstractPreferenceController) this).getPreferenceKey());
+ final String key = ((AbstractPreferenceController) this).getPreferenceKey();
+ if (TextUtils.isEmpty(key)) {
+ Log.w(TAG,
+ "Skipping updateNonIndexableKeys due to empty key " + this.toString());
+ return;
+ }
+ keys.add(key);
}
}
}
diff --git a/src/com/android/settings/core/gateway/SettingsGateway.java b/src/com/android/settings/core/gateway/SettingsGateway.java
index 8ee61c6..f2e49a4 100644
--- a/src/com/android/settings/core/gateway/SettingsGateway.java
+++ b/src/com/android/settings/core/gateway/SettingsGateway.java
@@ -40,12 +40,12 @@
import com.android.settings.accounts.ChooseAccountActivity;
import com.android.settings.accounts.ManagedProfileSettings;
import com.android.settings.accounts.UserAndAccountDashboardFragment;
-import com.android.settings.applications.DefaultAppSettings;
import com.android.settings.applications.AppAndNotificationDashboardFragment;
+import com.android.settings.applications.DefaultAppSettings;
import com.android.settings.applications.DrawOverlayDetails;
import com.android.settings.applications.ExternalSourcesDetails;
import com.android.settings.applications.InstalledAppDetails;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.applications.ManageDomainUrls;
import com.android.settings.applications.NotificationApps;
import com.android.settings.applications.PictureInPictureDetails;
@@ -100,15 +100,15 @@
import com.android.settings.nfc.AndroidBeam;
import com.android.settings.nfc.PaymentSettings;
import com.android.settings.notification.AppNotificationSettings;
-import com.android.settings.notification.ChannelNotificationSettings;
import com.android.settings.notification.ChannelGroupNotificationSettings;
+import com.android.settings.notification.ChannelNotificationSettings;
import com.android.settings.notification.ConfigureNotificationSettings;
import com.android.settings.notification.NotificationAccessSettings;
import com.android.settings.notification.NotificationStation;
import com.android.settings.notification.SoundSettings;
import com.android.settings.notification.ZenAccessSettings;
+import com.android.settings.notification.ZenModeBehaviorSettings;
import com.android.settings.notification.ZenModeEventRuleSettings;
-import com.android.settings.notification.ZenModePrioritySettings;
import com.android.settings.notification.ZenModeScheduleRuleSettings;
import com.android.settings.notification.ZenModeSettings;
import com.android.settings.notification.ZenModeVisualInterruptionSettings;
@@ -216,7 +216,7 @@
ApnSettings.class.getName(),
ApnEditor.class.getName(),
WifiCallingSettings.class.getName(),
- ZenModePrioritySettings.class.getName(),
+ ZenModeBehaviorSettings.class.getName(),
ZenModeScheduleRuleSettings.class.getName(),
ZenModeEventRuleSettings.class.getName(),
ZenModeVisualInterruptionSettings.class.getName(),
diff --git a/src/com/android/settings/dashboard/DashboardAdapter.java b/src/com/android/settings/dashboard/DashboardAdapter.java
index d4397dc..b28ff24 100644
--- a/src/com/android/settings/dashboard/DashboardAdapter.java
+++ b/src/com/android/settings/dashboard/DashboardAdapter.java
@@ -48,7 +48,6 @@
import com.android.settings.dashboard.suggestions.SuggestionAdapter;
import com.android.settings.dashboard.suggestions.SuggestionControllerMixin;
import com.android.settings.dashboard.suggestions.SuggestionDismissController;
-import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.Utils;
import com.android.settingslib.drawer.DashboardCategory;
@@ -78,7 +77,6 @@
private final SuggestionControllerMixin mSuggestionControllerMixin;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final DashboardFeatureProvider mDashboardFeatureProvider;
- private final SuggestionFeatureProvider mSuggestionFeatureProvider;
private final ArrayList<String> mSuggestionsShownLogged;
private boolean mFirstFrameDrawn;
private RecyclerView mRecyclerView;
@@ -114,7 +112,6 @@
mSuggestionControllerMixin = suggestionControllerMixin;
mMetricsFeatureProvider = factory.getMetricsFeatureProvider();
mDashboardFeatureProvider = factory.getDashboardFeatureProvider(context);
- mSuggestionFeatureProvider = factory.getSuggestionFeatureProvider(context);
mCache = new IconCache(context);
mSuggestionParser = suggestionParser;
mCallback = callback;
@@ -341,11 +338,12 @@
void onBindSuggestionConditionHeader(final SuggestionAndConditionHeaderHolder holder,
SuggestionConditionHeaderData data) {
final int curMode = mDashboardData.getSuggestionConditionMode();
- final int nextMode = data.hiddenSuggestionCount > 0 && data.conditionCount > 0
+ final int nextMode = data.hiddenSuggestionCount > 0
+ && data.conditionCount > 0
&& curMode != DashboardData.HEADER_MODE_SUGGESTION_EXPANDED
? DashboardData.HEADER_MODE_SUGGESTION_EXPANDED
: DashboardData.HEADER_MODE_FULLY_EXPANDED;
- final boolean moreSuggestions = data.hiddenSuggestionCount > 0;
+
final boolean hasConditions = data.conditionCount > 0;
if (data.conditionCount > 0) {
holder.icon.setImageIcon(data.conditionIcons.get(0));
diff --git a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
index 17e556e..0744862 100644
--- a/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
+++ b/src/com/android/settings/dashboard/DashboardFragmentRegistry.java
@@ -85,11 +85,11 @@
SystemDashboardFragment.class.getName(), CategoryKey.CATEGORY_SYSTEM);
PARENT_TO_CATEGORY_KEY_MAP.put(LanguageAndInputSettings.class.getName(),
CategoryKey.CATEGORY_SYSTEM_LANGUAGE);
- if (Settings.DevelopmentSettingsDashboardActivity.isEnabled()) {
- PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettingsDashboardFragment.class.getName(),
+ if (Settings.DevelopmentSettingsActivity.isEnabled()) {
+ PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettings.class.getName(),
CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
} else {
- PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettings.class.getName(),
+ PARENT_TO_CATEGORY_KEY_MAP.put(DevelopmentSettingsDashboardFragment.class.getName(),
CategoryKey.CATEGORY_SYSTEM_DEVELOPMENT);
}
PARENT_TO_CATEGORY_KEY_MAP.put(ConfigureNotificationSettings.class.getName(),
diff --git a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
index 3dfffcc..ba22741 100644
--- a/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
+++ b/src/com/android/settings/dashboard/ProgressiveDisclosureMixin.java
@@ -106,7 +106,11 @@
}
public boolean isEnabled() {
- return !FeatureFlagUtils.isEnabled(FEATURE_FLAG_NEW_ADVANCE_BUTTON);
+ return !isV2Enabled();
+ }
+
+ public static boolean isV2Enabled() {
+ return FeatureFlagUtils.isEnabled(FEATURE_FLAG_NEW_ADVANCE_BUTTON);
}
/**
diff --git a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
index 8502fa7..a9d0546 100644
--- a/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
+++ b/src/com/android/settings/dashboard/suggestions/SuggestionAdapter.java
@@ -157,8 +157,6 @@
final View primaryAction = holder.itemView.findViewById(android.R.id.primary);
if (primaryAction != null) {
clickHandler = primaryAction;
- // set the item view to disabled to remove any touch effects
- holder.itemView.setEnabled(false);
}
clickHandler.setOnClickListener(v -> {
diff --git a/src/com/android/settings/datausage/DataPlanUsageSummary.java b/src/com/android/settings/datausage/DataPlanUsageSummary.java
index 1905deb..912db0a 100644
--- a/src/com/android/settings/datausage/DataPlanUsageSummary.java
+++ b/src/com/android/settings/datausage/DataPlanUsageSummary.java
@@ -27,7 +27,6 @@
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.UserManager;
-import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
@@ -44,14 +43,12 @@
import com.android.settings.R;
import com.android.settings.Utils;
import com.android.settings.dashboard.SummaryLoader;
-import com.android.settings.search.BaseSearchIndexProvider;
-import com.android.settings.search.Indexable;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.net.DataUsageController;
import java.util.ArrayList;
import java.util.List;
-public class DataPlanUsageSummary extends DataUsageBase implements Indexable {
+public class DataPlanUsageSummary extends DataUsageBase {
public static final String KEY_DATA_PLAN_USAGE = "data_plan_usage";
@@ -353,50 +350,5 @@
public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
= SummaryProvider::new;
-
- /**
- * For search
- */
- public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
- new BaseSearchIndexProvider() {
-
- @Override
- public List<SearchIndexableResource> getXmlResourcesToIndex(Context context,
- boolean enabled) {
- List<SearchIndexableResource> resources = new ArrayList<>();
- SearchIndexableResource resource = new SearchIndexableResource(context);
- resource.xmlResId = R.xml.data_usage;
- resources.add(resource);
-
- resource = new SearchIndexableResource(context);
- resource.xmlResId = R.xml.data_plan_usage_cell_data_preference_screen;
- resources.add(resource);
-
- resource = new SearchIndexableResource(context);
- resource.xmlResId = R.xml.data_usage_wifi;
- resources.add(resource);
-
- return resources;
- }
-
- @Override
- public List<String> getNonIndexableKeys(Context context) {
- List<String> keys = super.getNonIndexableKeys(context);
-
- if (!DataUsageUtils.hasMobileData(context)) {
- keys.add(KEY_MOBILE_USAGE_TITLE);
- keys.add(KEY_MOBILE_DATA_USAGE_TOGGLE);
- }
-
- if (!DataUsageUtils.hasWifiRadio(context)) {
- keys.add(KEY_WIFI_DATA_USAGE);
- keys.add(KEY_NETWORK_RESTRICTIONS);
- }
-
- keys.add(KEY_WIFI_USAGE_TITLE);
-
- return keys;
- }
- };
}
diff --git a/src/com/android/settings/datausage/DataUsagePreference.java b/src/com/android/settings/datausage/DataUsagePreference.java
index 63f6054..35cfbbc 100644
--- a/src/com/android/settings/datausage/DataUsagePreference.java
+++ b/src/com/android/settings/datausage/DataUsagePreference.java
@@ -16,23 +16,36 @@
import android.content.Context;
import android.content.Intent;
+import android.content.res.TypedArray;
import android.net.NetworkTemplate;
import android.os.Bundle;
+import android.support.v4.content.res.TypedArrayUtils;
import android.support.v7.preference.Preference;
import android.text.format.Formatter;
import android.util.AttributeSet;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.Utils;
+import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settingslib.net.DataUsageController;
public class DataUsagePreference extends Preference implements TemplatePreference {
private NetworkTemplate mTemplate;
private int mSubId;
+ private int mTitleRes;
public DataUsagePreference(Context context, AttributeSet attrs) {
super(context, attrs);
+ if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+ final TypedArray a = context.obtainStyledAttributes(
+ attrs, new int[] { com.android.internal.R.attr.title },
+ TypedArrayUtils.getAttr(
+ context, android.support.v7.preference.R.attr.preferenceStyle,
+ android.R.attr.preferenceStyle), 0);
+ mTitleRes = a.getResourceId(0, 0);
+ a.recycle();
+ }
}
@Override
@@ -52,6 +65,11 @@
Bundle args = new Bundle();
args.putParcelable(DataUsageList.EXTRA_NETWORK_TEMPLATE, mTemplate);
args.putInt(DataUsageList.EXTRA_SUB_ID, mSubId);
+ if (mTitleRes > 0) {
+ return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(),
+ args, getContext().getPackageName(), mTitleRes, null, false,
+ MetricsProto.MetricsEvent.VIEW_UNKNOWN);
+ }
return Utils.onBuildStartFragmentIntent(getContext(), DataUsageList.class.getName(), args,
getContext().getPackageName(), 0, getTitle(), false,
MetricsProto.MetricsEvent.VIEW_UNKNOWN);
diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java
index e37cc4a..6fddb2b 100644
--- a/src/com/android/settings/datausage/DataUsageSummary.java
+++ b/src/com/android/settings/datausage/DataUsageSummary.java
@@ -14,22 +14,15 @@
package com.android.settings.datausage;
-import static android.net.ConnectivityManager.TYPE_ETHERNET;
-
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.net.ConnectivityManager;
-import android.net.INetworkStatsSession;
import android.net.NetworkPolicyManager;
import android.net.NetworkTemplate;
-import android.net.TrafficStats;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.SystemProperties;
import android.os.UserManager;
import android.provider.SearchIndexableResource;
import android.support.annotation.VisibleForTesting;
@@ -46,6 +39,7 @@
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SummaryPreference;
@@ -55,6 +49,7 @@
import com.android.settings.search.Indexable;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.net.DataUsageController;
+
import java.util.ArrayList;
import java.util.List;
@@ -244,13 +239,14 @@
updateState();
}
- private static CharSequence formatTitle(Context context, String template, long usageLevel) {
+ @VisibleForTesting
+ static CharSequence formatUsage(Context context, String template, long usageLevel) {
final float LARGER_SIZE = 1.25f * 1.25f; // (1/0.8)^2
final float SMALLER_SIZE = 1.0f / LARGER_SIZE; // 0.8^2
final int FLAGS = Spannable.SPAN_INCLUSIVE_INCLUSIVE;
final Formatter.BytesResult usedResult = Formatter.formatBytes(context.getResources(),
- usageLevel, Formatter.FLAG_SHORTER);
+ usageLevel, Formatter.FLAG_CALCULATE_ROUNDED);
final SpannableString enlargedValue = new SpannableString(usedResult.value);
enlargedValue.setSpan(new RelativeSizeSpan(LARGER_SIZE), 0, enlargedValue.length(), FLAGS);
@@ -263,7 +259,7 @@
final SpannableString fullTemplate = new SpannableString(template);
fullTemplate.setSpan(new RelativeSizeSpan(SMALLER_SIZE), 0, fullTemplate.length(), FLAGS);
return TextUtils.expandTemplate(fullTemplate,
- BidiFormatter.getInstance().unicodeWrap(formattedUsage));
+ BidiFormatter.getInstance().unicodeWrap(formattedUsage.toString()));
}
private void updateState() {
@@ -275,10 +271,9 @@
if (mSummaryPreference != null) {
mSummaryPreference.setTitle(
- formatTitle(context, getString(mDataUsageTemplate), info.usageLevel));
- long limit = mDataInfoController.getSummaryLimit(info);
+ formatUsage(context, getString(mDataUsageTemplate), info.usageLevel));
+ final long limit = mDataInfoController.getSummaryLimit(info);
mSummaryPreference.setSummary(info.period);
-
if (limit <= 0) {
mSummaryPreference.setChartEnabled(false);
} else {
diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java
index c60b841..8fad986 100644
--- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java
+++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java
@@ -59,7 +59,11 @@
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setAnimationAllowed(true);
- setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getContext()));
+ if (usePreferenceScreenTitle()) {
+ addPreferencesFromResource(R.xml.unrestricted_data_access_settings);
+ } else {
+ setPreferenceScreen(getPreferenceManager().createPreferenceScreen(getContext()));
+ }
mApplicationsState = ApplicationsState.getInstance(
(Application) getContext().getApplicationContext());
mDataSaverBackend = new DataSaverBackend(getContext());
@@ -267,7 +271,7 @@
if (mState.isDataSaverBlacklisted) {
// app is blacklisted, launch App Data Usage screen
InstalledAppDetails.startAppInfoFragment(AppDataUsage.class,
- getContext().getString(R.string.app_data_usage),
+ R.string.app_data_usage,
UnrestrictedDataAccess.this,
mEntry);
} else {
diff --git a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
index 8a9568a..d4bd59b 100644
--- a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
+++ b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java
@@ -21,8 +21,8 @@
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
-import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
public class AutoTimeZonePreferenceController extends AbstractPreferenceController
diff --git a/src/com/android/settings/datetime/TimeFormatPreferenceController.java b/src/com/android/settings/datetime/TimeFormatPreferenceController.java
index c594b26..302c624 100644
--- a/src/com/android/settings/datetime/TimeFormatPreferenceController.java
+++ b/src/com/android/settings/datetime/TimeFormatPreferenceController.java
@@ -103,6 +103,7 @@
static void timeUpdated(Context context, Boolean is24Hour) {
Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED);
+ timeChanged.addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND);
int timeFormatPreference;
if (is24Hour == null) {
timeFormatPreference = Intent.EXTRA_TIME_PREF_VALUE_USE_LOCALE_DEFAULT;
diff --git a/src/com/android/settings/datetime/ZonePicker.java b/src/com/android/settings/datetime/ZonePicker.java
index 2d58dd8..00a77df 100644
--- a/src/com/android/settings/datetime/ZonePicker.java
+++ b/src/com/android/settings/datetime/ZonePicker.java
@@ -34,6 +34,7 @@
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
+import com.android.settings.core.InstrumentedPreferenceFragment;
import com.android.settings.core.instrumentation.Instrumentable;
import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
import com.android.settingslib.datetime.ZoneGetter;
@@ -164,6 +165,9 @@
// Sets the adapter
setSorting(true);
setHasOptionsMenu(true);
+ if (InstrumentedPreferenceFragment.usePreferenceScreenTitle()) {
+ activity.setTitle(R.string.date_time_set_timezone);
+ }
}
@Override
diff --git a/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java b/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java
new file mode 100644
index 0000000..e4e6493
--- /dev/null
+++ b/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceController.java
@@ -0,0 +1,198 @@
+/*
+ * 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.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.core.lifecycle.LifecycleObserver;
+import com.android.settingslib.core.lifecycle.events.OnDestroy;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public abstract class AbstractBluetoothA2dpPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin, BluetoothServiceConnectionListener, LifecycleObserver,
+ OnDestroy {
+
+ @VisibleForTesting
+ static final int STREAMING_LABEL_ID = R.string.bluetooth_select_a2dp_codec_streaming_label;
+
+ protected final BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+ protected BluetoothA2dp mBluetoothA2dp;
+ protected ListPreference mPreference;
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+
+ public AbstractBluetoothA2dpPreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context);
+
+ mBluetoothA2dpConfigStore = store;
+ mListValues = getListValues();
+ mListSummaries = getListSummaries();
+
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+
+ // Set a default value because BluetoothCodecConfig is null initially.
+ mPreference.setValue(mListValues[getDefaultIndex()]);
+ mPreference.setSummary(mListSummaries[getDefaultIndex()]);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (mBluetoothA2dp == null) {
+ return false;
+ }
+
+ writeConfigurationValues(newValue);
+
+ final BluetoothCodecConfig codecConfig = mBluetoothA2dpConfigStore.createCodecConfig();
+ synchronized (mBluetoothA2dpConfigStore) {
+ if (mBluetoothA2dp != null) {
+ setCodecConfigPreference(codecConfig);
+ }
+ }
+ // Because the setting is not persisted into permanent storage, we cannot call update state
+ // here to update the preference.
+ // Instead, we just assume it was set and update the preference here.
+ final int index = mPreference.findIndexOfValue(newValue.toString());
+ // We only want to append "Streaming" if not using default
+ if (index == getDefaultIndex()) {
+ mPreference.setSummary(mListSummaries[index]);
+ } else {
+ mPreference.setSummary(
+ mContext.getResources().getString(STREAMING_LABEL_ID, mListSummaries[index]));
+ }
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ if (getCodecConfig() == null || mPreference == null) {
+ return;
+ }
+
+ BluetoothCodecConfig codecConfig;
+ synchronized (mBluetoothA2dpConfigStore) {
+ codecConfig = getCodecConfig();
+ }
+
+ final int index = getCurrentA2dpSettingIndex(codecConfig);
+ mPreference.setValue(mListValues[index]);
+
+ // We only want to append "Streaming" if not using default
+ if (index == getDefaultIndex()) {
+ mPreference.setSummary(mListSummaries[index]);
+ } else {
+ mPreference.setSummary(
+ mContext.getResources().getString(STREAMING_LABEL_ID, mListSummaries[index]));
+ }
+
+ writeConfigurationValues(mListValues[index]);
+ }
+
+ @Override
+ public void onBluetoothServiceConnected(BluetoothA2dp bluetoothA2dp) {
+ mBluetoothA2dp = bluetoothA2dp;
+ updateState(mPreference);
+ }
+
+ @Override
+ public void onBluetoothCodecUpdated() {
+ // intentional no-op
+ // We do not want to call update state here because the setting is not persisted in
+ // permanent storage.
+ }
+
+ @Override
+ public void onBluetoothServiceDisconnected() {
+ mBluetoothA2dp = null;
+ }
+
+ @Override
+ public void onDestroy() {
+ mBluetoothA2dp = null;
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ }
+
+ /**
+ * @return an array of string values that correspond to the current {@link ListPreference}.
+ */
+ protected abstract String[] getListValues();
+
+ /**
+ * @return an array of string summaries that correspond to the current {@link ListPreference}.
+ */
+ protected abstract String[] getListSummaries();
+
+ /**
+ * Updates the new value to the {@link BluetoothA2dpConfigStore} and the {@link BluetoothA2dp}.
+ *
+ * @param newValue the new setting value
+ */
+ protected abstract void writeConfigurationValues(Object newValue);
+
+ /**
+ * @return the current selected index for the {@link ListPreference}.
+ */
+ protected abstract int getCurrentA2dpSettingIndex(BluetoothCodecConfig config);
+
+ /**
+ * @return default setting index for the {@link ListPreference}.
+ */
+ protected abstract int getDefaultIndex();
+
+ @VisibleForTesting
+ void setCodecConfigPreference(BluetoothCodecConfig config) {
+ mBluetoothA2dp.setCodecConfigPreference(config);
+ }
+
+ @VisibleForTesting
+ BluetoothCodecConfig getCodecConfig() {
+ if (mBluetoothA2dp == null || mBluetoothA2dp.getCodecStatus() == null) {
+ return null;
+ }
+
+ return mBluetoothA2dp.getCodecStatus().getCodecConfig();
+ }
+}
diff --git a/src/com/android/settings/development/AdbPreferenceController.java b/src/com/android/settings/development/AdbPreferenceController.java
index ed13b73..cf23fe0 100644
--- a/src/com/android/settings/development/AdbPreferenceController.java
+++ b/src/com/android/settings/development/AdbPreferenceController.java
@@ -18,67 +18,44 @@
import android.content.Context;
-import android.content.Intent;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.support.annotation.VisibleForTesting;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v4.content.LocalBroadcastManager;
+import android.support.annotation.Nullable;
import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-public class AdbPreferenceController extends DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.AbstractEnableAdbPreferenceController;
- public static final String ADB_STATE_CHANGED =
- "com.android.settings.development.AdbPreferenceController.ADB_STATE_CHANGED";
- public static final int ADB_SETTING_ON = 1;
- public static final int ADB_SETTING_OFF = 0;
-
- private static final String KEY_ENABLE_ADB = "enable_adb";
+public class AdbPreferenceController extends AbstractEnableAdbPreferenceController implements
+ PreferenceControllerMixin {
private final DevelopmentSettingsDashboardFragment mFragment;
- private SwitchPreference mPreference;
public AdbPreferenceController(Context context, DevelopmentSettingsDashboardFragment fragment) {
super(context);
mFragment = fragment;
}
- @Override
- public boolean isAvailable() {
- return mContext.getSystemService(UserManager.class).isAdminUser();
+ public void onAdbDialogConfirmed() {
+ writeAdbSetting(true);
+ }
+
+ public void onAdbDialogDismissed() {
+ updateState(mPreference);
}
@Override
- public String getPreferenceKey() {
- return KEY_ENABLE_ADB;
+ public void showConfirmationDialog(@Nullable Preference preference) {
+ EnableAdbWarningDialog.show(mFragment);
}
@Override
- public void displayPreference(PreferenceScreen screen) {
- super.displayPreference(screen);
-
- mPreference = (SwitchPreference) screen.findPreference(getPreferenceKey());
+ public void dismissConfirmationDialog() {
+ // intentional no-op
}
@Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- final boolean isAdbEnabled = (Boolean) newValue;
- if (isAdbEnabled) {
- EnableAdbWarningDialog.show(mFragment);
- } else {
- writeAdbSetting(isAdbEnabled);
- notifyStateChanged();
- }
- return true;
- }
-
- @Override
- public void updateState(Preference preference) {
- final int adbMode = Settings.Global.getInt(mContext.getContentResolver(),
- Settings.Global.ADB_ENABLED, 0 /* default */);
- mPreference.setChecked(adbMode != ADB_SETTING_OFF);
+ public boolean isConfirmationDialogShowing() {
+ // intentional no-op
+ return false;
}
@Override
@@ -89,28 +66,7 @@
@Override
protected void onDeveloperOptionsSwitchDisabled() {
writeAdbSetting(false);
- notifyStateChanged();
mPreference.setEnabled(false);
mPreference.setChecked(false);
}
-
- public void onAdbDialogConfirmed() {
- writeAdbSetting(true);
- notifyStateChanged();
- }
-
- public void onAdbDialogDismissed() {
- updateState(mPreference);
- }
-
- private void writeAdbSetting(boolean enabled) {
- Settings.Global.putInt(mContext.getContentResolver(),
- Settings.Global.ADB_ENABLED, enabled ? ADB_SETTING_ON : ADB_SETTING_OFF);
- }
-
- @VisibleForTesting
- void notifyStateChanged() {
- LocalBroadcastManager.getInstance(mContext)
- .sendBroadcast(new Intent(ADB_STATE_CHANGED));
- }
}
diff --git a/src/com/android/settings/development/AllowAppsOnExternalPreferenceController.java b/src/com/android/settings/development/AllowAppsOnExternalPreferenceController.java
index fb69455..c3b527f 100644
--- a/src/com/android/settings/development/AllowAppsOnExternalPreferenceController.java
+++ b/src/com/android/settings/development/AllowAppsOnExternalPreferenceController.java
@@ -23,8 +23,12 @@
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 AllowAppsOnExternalPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String FORCE_ALLOW_ON_EXTERNAL_KEY = "force_allow_on_external";
diff --git a/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java b/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java
new file mode 100644
index 0000000..4d8d4ee
--- /dev/null
+++ b/src/com/android/settings/development/AnimatorDurationScalePreferenceController.java
@@ -0,0 +1,120 @@
+/*
+ * 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.RemoteException;
+import android.os.ServiceManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.IWindowManager;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class AnimatorDurationScalePreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String ANIMATOR_DURATION_SCALE_KEY = "animator_duration_scale";
+
+ @VisibleForTesting
+ static final int ANIMATOR_DURATION_SCALE_SELECTOR = 2;
+ @VisibleForTesting
+ static final float DEFAULT_VALUE = 1;
+
+ private final IWindowManager mWindowManager;
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+
+ private ListPreference mPreference;
+
+ public AnimatorDurationScalePreferenceController(Context context) {
+ super(context);
+
+ mWindowManager = IWindowManager.Stub.asInterface(
+ ServiceManager.getService(Context.WINDOW_SERVICE));
+ mListValues = context.getResources().getStringArray(R.array.animator_duration_scale_values);
+ mListSummaries = context.getResources().getStringArray(
+ R.array.animator_duration_scale_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return ANIMATOR_DURATION_SCALE_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeAnimationScaleOption(newValue);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateAnimationScaleValue();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeAnimationScaleOption(null);
+ mPreference.setEnabled(false);
+ }
+
+ private void writeAnimationScaleOption(Object newValue) {
+ try {
+ float scale = newValue != null ? Float.parseFloat(newValue.toString()) : DEFAULT_VALUE;
+ mWindowManager.setAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR, scale);
+ updateAnimationScaleValue();
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+
+ private void updateAnimationScaleValue() {
+ try {
+ final float scale = mWindowManager.getAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR);
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ float val = Float.parseFloat(mListValues[i]);
+ if (scale <= val) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+}
diff --git a/src/com/android/settings/development/AppPicker.java b/src/com/android/settings/development/AppPicker.java
index 480a0ec..433f31a 100644
--- a/src/com/android/settings/development/AppPicker.java
+++ b/src/com/android/settings/development/AppPicker.java
@@ -32,7 +32,6 @@
import android.widget.ListView;
import com.android.settings.R;
-import com.android.settings.applications.AppViewHolder;
import java.text.Collator;
import java.util.ArrayList;
diff --git a/src/com/android/settings/applications/AppViewHolder.java b/src/com/android/settings/development/AppViewHolder.java
similarity index 71%
rename from src/com/android/settings/applications/AppViewHolder.java
rename to src/com/android/settings/development/AppViewHolder.java
index cdb8048..7a90bcf 100644
--- a/src/com/android/settings/applications/AppViewHolder.java
+++ b/src/com/android/settings/development/AppViewHolder.java
@@ -14,9 +14,8 @@
* limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.development;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -57,24 +56,4 @@
return (AppViewHolder)convertView.getTag();
}
}
-
- void updateSizeText(CharSequence invalidSizeStr, int whichSize) {
- if (ManageApplications.DEBUG) Log.i(ManageApplications.TAG, "updateSizeText of "
- + entry.label + " " + entry + ": " + entry.sizeStr);
- if (entry.sizeStr != null) {
- switch (whichSize) {
- case ManageApplications.SIZE_INTERNAL:
- summary.setText(entry.internalSizeStr);
- break;
- case ManageApplications.SIZE_EXTERNAL:
- summary.setText(entry.externalSizeStr);
- break;
- default:
- summary.setText(entry.sizeStr);
- break;
- }
- } else if (entry.size == ApplicationsState.SIZE_INVALID) {
- summary.setText(invalidSizeStr);
- }
- }
}
\ No newline at end of file
diff --git a/src/com/android/settings/development/AppsNotRespondingPreferenceController.java b/src/com/android/settings/development/AppsNotRespondingPreferenceController.java
index 3f454ea..98d7fa5 100644
--- a/src/com/android/settings/development/AppsNotRespondingPreferenceController.java
+++ b/src/com/android/settings/development/AppsNotRespondingPreferenceController.java
@@ -22,8 +22,12 @@
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 AppsNotRespondingPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String SHOW_ALL_ANRS_KEY = "show_all_anrs";
diff --git a/src/com/android/settings/development/BackgroundProcessLimitPreferenceController.java b/src/com/android/settings/development/BackgroundProcessLimitPreferenceController.java
new file mode 100644
index 0000000..9f962ca
--- /dev/null
+++ b/src/com/android/settings/development/BackgroundProcessLimitPreferenceController.java
@@ -0,0 +1,116 @@
+/*
+ * 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.ActivityManager;
+import android.app.IActivityManager;
+import android.content.Context;
+import android.os.RemoteException;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class BackgroundProcessLimitPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String APP_PROCESS_LIMIT_KEY = "app_process_limit";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public BackgroundProcessLimitPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.app_process_limit_values);
+ mListSummaries = context.getResources().getStringArray(R.array.app_process_limit_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return APP_PROCESS_LIMIT_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeAppProcessLimitOptions(newValue);
+ updateAppProcessLimitOptions();
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateAppProcessLimitOptions();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeAppProcessLimitOptions(null);
+ mPreference.setEnabled(false);
+ }
+
+ private void updateAppProcessLimitOptions() {
+ try {
+ final int limit = getActivityManagerService().getProcessLimit();
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ int val = Integer.parseInt(mListValues[i]);
+ if (val >= limit) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+
+ private void writeAppProcessLimitOptions(Object newValue) {
+ try {
+ final int limit = newValue != null ? Integer.parseInt(newValue.toString()) : -1;
+ getActivityManagerService().setProcessLimit(limit);
+ updateAppProcessLimitOptions();
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+
+ @VisibleForTesting
+ IActivityManager getActivityManagerService() {
+ return ActivityManager.getService();
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothA2dpConfigStore.java b/src/com/android/settings/development/BluetoothA2dpConfigStore.java
new file mode 100644
index 0000000..edf74e3
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothA2dpConfigStore.java
@@ -0,0 +1,80 @@
+/*
+ * 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.bluetooth.BluetoothCodecConfig;
+
+/**
+ * Utility class for storing current Bluetooth A2DP profile values
+ */
+public class BluetoothA2dpConfigStore {
+
+ // init default values
+ private int mCodecType = BluetoothCodecConfig.SOURCE_CODEC_TYPE_INVALID;
+ private int mCodecPriority = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
+ private int mSampleRate = BluetoothCodecConfig.SAMPLE_RATE_NONE;
+ private int mBitsPerSample = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE;
+ private int mChannelMode = BluetoothCodecConfig.CHANNEL_MODE_NONE;
+ private long mCodecSpecific1Value;
+ private long mCodecSpecific2Value;
+ private long mCodecSpecific3Value;
+ private long mCodecSpecific4Value;
+
+ public void setCodecType(int codecType) {
+ mCodecType = codecType;
+ }
+
+ public void setCodecPriority(int codecPriority) {
+ mCodecPriority = codecPriority;
+ }
+
+ public void setSampleRate(int sampleRate) {
+ mSampleRate = sampleRate;
+ }
+
+ public void setBitsPerSample(int bitsPerSample) {
+ mBitsPerSample = bitsPerSample;
+ }
+
+ public void setChannelMode(int channelMode) {
+ mChannelMode = channelMode;
+ }
+
+ public void setCodecSpecific1Value(int codecSpecific1Value) {
+ mCodecSpecific1Value = codecSpecific1Value;
+ }
+
+ public void setCodecSpecific2Value(int codecSpecific2Value) {
+ mCodecSpecific2Value = codecSpecific2Value;
+ }
+
+ public void setCodecSpecific3Value(int codecSpecific3Value) {
+ mCodecSpecific3Value = codecSpecific3Value;
+ }
+
+ public void setCodecSpecific4Value(int codecSpecific4Value) {
+ mCodecSpecific4Value = codecSpecific4Value;
+ }
+
+ public BluetoothCodecConfig createCodecConfig() {
+ return new BluetoothCodecConfig(mCodecType, mCodecPriority,
+ mSampleRate, mBitsPerSample,
+ mChannelMode, mCodecSpecific1Value,
+ mCodecSpecific2Value, mCodecSpecific3Value,
+ mCodecSpecific4Value);
+ }
+}
diff --git a/tests/robotests/src/android/net/wifi/WifiNetworkScoreCache.java b/src/com/android/settings/development/BluetoothA2dpLock.java
similarity index 75%
rename from tests/robotests/src/android/net/wifi/WifiNetworkScoreCache.java
rename to src/com/android/settings/development/BluetoothA2dpLock.java
index 7995e07..7058665 100644
--- a/tests/robotests/src/android/net/wifi/WifiNetworkScoreCache.java
+++ b/src/com/android/settings/development/BluetoothA2dpLock.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.net.wifi;
+
+package com.android.settings.development;
+
+import android.bluetooth.BluetoothA2dp;
/**
- * Empty class def for {@link android.net.wifi.WifiNetworkScoreCache}.
- *
- * <p>Can be removed once Robolectric supports Android O.
+ * Utility class to provide synchronization locks for {@link BluetoothA2dp}
*/
-public class WifiNetworkScoreCache {
-
+public class BluetoothA2dpLock {
}
diff --git a/src/com/android/settings/development/BluetoothAbsoluteVolumePreferenceController.java b/src/com/android/settings/development/BluetoothAbsoluteVolumePreferenceController.java
index 8e6df8e..64f6440 100644
--- a/src/com/android/settings/development/BluetoothAbsoluteVolumePreferenceController.java
+++ b/src/com/android/settings/development/BluetoothAbsoluteVolumePreferenceController.java
@@ -23,8 +23,12 @@
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 BluetoothAbsoluteVolumePreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String BLUETOOTH_DISABLE_ABSOLUTE_VOLUME_KEY =
"bluetooth_disable_absolute_volume";
diff --git a/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceController.java b/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceController.java
new file mode 100644
index 0000000..f237ac1
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceController.java
@@ -0,0 +1,102 @@
+/*
+ * 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.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class BluetoothAudioBitsPerSamplePreferenceController extends
+ AbstractBluetoothA2dpPreferenceController {
+
+ private static final int DEFAULT_INDEX = 0;
+ private static final String BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY =
+ "bluetooth_select_a2dp_bits_per_sample";
+
+ public BluetoothAudioBitsPerSamplePreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return BLUETOOTH_SELECT_A2DP_BITS_PER_SAMPLE_KEY;
+ }
+
+ @Override
+ protected String[] getListValues() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_bits_per_sample_values);
+ }
+
+ @Override
+ protected String[] getListSummaries() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_bits_per_sample_summaries);
+ }
+
+ @Override
+ protected int getDefaultIndex() {
+ return DEFAULT_INDEX;
+ }
+
+ @Override
+ protected void writeConfigurationValues(Object newValue) {
+ final int index = mPreference.findIndexOfValue(newValue.toString());
+ int bitsPerSampleValue = BluetoothCodecConfig.BITS_PER_SAMPLE_NONE; // default
+ 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;
+ }
+ mBluetoothA2dpConfigStore.setBitsPerSample(bitsPerSampleValue);
+ }
+
+ @Override
+ protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
+ final int bitsPerSample = config.getBitsPerSample();
+ int index = DEFAULT_INDEX;
+ switch (bitsPerSample) {
+ 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;
+ }
+ return index;
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothAudioChannelModePreferenceController.java b/src/com/android/settings/development/BluetoothAudioChannelModePreferenceController.java
new file mode 100644
index 0000000..a58c675
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothAudioChannelModePreferenceController.java
@@ -0,0 +1,96 @@
+/*
+ * 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.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class BluetoothAudioChannelModePreferenceController extends
+ AbstractBluetoothA2dpPreferenceController {
+
+ private static final int DEFAULT_INDEX = 0;
+ private static final String BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY =
+ "bluetooth_select_a2dp_channel_mode";
+
+ public BluetoothAudioChannelModePreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return BLUETOOTH_SELECT_A2DP_CHANNEL_MODE_KEY;
+ }
+
+ @Override
+ protected String[] getListValues() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_channel_mode_values);
+ }
+
+ @Override
+ protected String[] getListSummaries() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_channel_mode_summaries);
+ }
+
+ @Override
+ protected int getDefaultIndex() {
+ return DEFAULT_INDEX;
+ }
+
+ @Override
+ protected void writeConfigurationValues(Object newValue) {
+ final int index = mPreference.findIndexOfValue(newValue.toString());
+ int channelModeValue = BluetoothCodecConfig.CHANNEL_MODE_NONE; // default
+ 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;
+ }
+ mBluetoothA2dpConfigStore.setChannelMode(channelModeValue);
+ }
+
+ @Override
+ protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
+ final int channelMode = config.getChannelMode();
+ int index = DEFAULT_INDEX;
+ switch (channelMode) {
+ case BluetoothCodecConfig.CHANNEL_MODE_MONO:
+ index = 1;
+ break;
+ case BluetoothCodecConfig.CHANNEL_MODE_STEREO:
+ index = 2;
+ break;
+ case BluetoothCodecConfig.CHANNEL_MODE_NONE:
+ default:
+ break;
+ }
+ return index;
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
new file mode 100644
index 0000000..2163a70
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothAudioCodecPreferenceController.java
@@ -0,0 +1,156 @@
+/*
+ * 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.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class BluetoothAudioCodecPreferenceController extends
+ AbstractBluetoothA2dpPreferenceController {
+
+ private static final int DEFAULT_INDEX = 0;
+ private static final String BLUETOOTH_SELECT_A2DP_CODEC_KEY = "bluetooth_select_a2dp_codec";
+
+ public BluetoothAudioCodecPreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return BLUETOOTH_SELECT_A2DP_CODEC_KEY;
+ }
+
+ @Override
+ protected String[] getListValues() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_values);
+ }
+
+ @Override
+ protected String[] getListSummaries() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_summaries);
+ }
+
+ @Override
+ protected int getDefaultIndex() {
+ return DEFAULT_INDEX;
+ }
+
+ @Override
+ protected void writeConfigurationValues(Object newValue) {
+ final int index = mPreference.findIndexOfValue(newValue.toString());
+ int codecTypeValue = BluetoothCodecConfig.SAMPLE_RATE_NONE; // default
+ int codecPriorityValue = BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT;
+ switch (index) {
+ case 0:
+ // Reset the priority of the current codec to default
+ final String oldValue = mPreference.getValue();
+ switch (mPreference.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 (mBluetoothA2dpConfigStore) {
+ if (mBluetoothA2dp != null) {
+ mBluetoothA2dp.enableOptionalCodecs();
+ }
+ }
+ return;
+ case 7:
+ synchronized (mBluetoothA2dpConfigStore) {
+ if (mBluetoothA2dp != null) {
+ mBluetoothA2dp.disableOptionalCodecs();
+ }
+ }
+ return;
+ default:
+ break;
+ }
+ mBluetoothA2dpConfigStore.setCodecType(codecTypeValue);
+ mBluetoothA2dpConfigStore.setCodecPriority(codecPriorityValue);
+ }
+
+ @Override
+ protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
+ final int codecType = config.getCodecType();
+ int index = DEFAULT_INDEX;
+ switch (codecType) {
+ 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;
+ }
+ return index;
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothAudioQualityPreferenceController.java b/src/com/android/settings/development/BluetoothAudioQualityPreferenceController.java
new file mode 100644
index 0000000..7adf8e6
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothAudioQualityPreferenceController.java
@@ -0,0 +1,100 @@
+/*
+ * 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.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class BluetoothAudioQualityPreferenceController extends
+ AbstractBluetoothA2dpPreferenceController {
+
+ private static final int DEFAULT_INDEX = 3;
+ private static final String BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY =
+ "bluetooth_select_a2dp_ldac_playback_quality";
+
+ public BluetoothAudioQualityPreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY;
+ }
+
+ @Override
+ protected String[] getListValues() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_ldac_playback_quality_values);
+ }
+
+ @Override
+ protected String[] getListSummaries() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_ldac_playback_quality_summaries);
+ }
+
+ @Override
+ protected int getDefaultIndex() {
+ return DEFAULT_INDEX;
+ }
+
+ @Override
+ protected void writeConfigurationValues(Object newValue) {
+ final int index = mPreference.findIndexOfValue(newValue.toString());
+ int codecSpecific1Value = 0; // default
+ switch (index) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ codecSpecific1Value = 1000 + index;
+ break;
+ default:
+ break;
+ }
+ mBluetoothA2dpConfigStore.setCodecSpecific1Value(codecSpecific1Value);
+ }
+
+ @Override
+ protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
+ // 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.
+ int index = (int) config.getCodecSpecific1();
+ if (index > 0) {
+ index %= 10;
+ } else {
+ index = DEFAULT_INDEX;
+ }
+ switch (index) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ break;
+ default:
+ index = DEFAULT_INDEX;
+ break;
+ }
+ return index;
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java b/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java
new file mode 100644
index 0000000..35b449e
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceController.java
@@ -0,0 +1,110 @@
+/*
+ * 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.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+
+import com.android.settings.R;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+
+public class BluetoothAudioSampleRatePreferenceController extends
+ AbstractBluetoothA2dpPreferenceController {
+
+ private static final int DEFAULT_INDEX = 0;
+ private static final String BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY =
+ "bluetooth_select_a2dp_sample_rate";
+
+ public BluetoothAudioSampleRatePreferenceController(Context context, Lifecycle lifecycle,
+ BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return BLUETOOTH_SELECT_A2DP_SAMPLE_RATE_KEY;
+ }
+
+ @Override
+ protected String[] getListValues() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_sample_rate_values);
+ }
+
+ @Override
+ protected String[] getListSummaries() {
+ return mContext.getResources().getStringArray(
+ R.array.bluetooth_a2dp_codec_sample_rate_summaries);
+ }
+
+ @Override
+ protected int getDefaultIndex() {
+ return DEFAULT_INDEX;
+ }
+
+ @Override
+ protected void writeConfigurationValues(Object newValue) {
+ final int index = mPreference.findIndexOfValue(newValue.toString());
+ int sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE; // default
+ switch (index) {
+ case 0:
+ sampleRateValue = BluetoothCodecConfig.SAMPLE_RATE_NONE;
+ 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;
+ }
+ mBluetoothA2dpConfigStore.setSampleRate(sampleRateValue);
+ }
+
+ @Override
+ protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
+ final int sampleRate = config.getSampleRate();
+ int index = DEFAULT_INDEX;
+ switch (sampleRate) {
+ 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;
+ }
+ return index;
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothAvrcpVersionPreferenceController.java b/src/com/android/settings/development/BluetoothAvrcpVersionPreferenceController.java
new file mode 100644
index 0000000..a56f5ea
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothAvrcpVersionPreferenceController.java
@@ -0,0 +1,94 @@
+/*
+ * 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.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class BluetoothAvrcpVersionPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String BLUETOOTH_SELECT_AVRCP_VERSION_KEY =
+ "bluetooth_select_avrcp_version";
+
+ @VisibleForTesting
+ static final String BLUETOOTH_AVRCP_VERSION_PROPERTY = "persist.bluetooth.avrcpversion";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public BluetoothAvrcpVersionPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.bluetooth_avrcp_version_values);
+ mListSummaries = context.getResources().getStringArray(R.array.bluetooth_avrcp_versions);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return BLUETOOTH_SELECT_AVRCP_VERSION_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ SystemProperties.set(BLUETOOTH_AVRCP_VERSION_PROPERTY, newValue.toString());
+ updateState(mPreference);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ final String currentValue = SystemProperties.get(BLUETOOTH_AVRCP_VERSION_PROPERTY);
+ int index = 0; // Defaults to AVRCP 1.4
+ for (int i = 0; i < mListValues.length; i++) {
+ if (TextUtils.equals(currentValue, mListValues[i])) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ }
+}
diff --git a/src/com/android/settings/development/BluetoothDeviceNoNamePreferenceController.java b/src/com/android/settings/development/BluetoothDeviceNoNamePreferenceController.java
index cd2915f..654a531 100644
--- a/src/com/android/settings/development/BluetoothDeviceNoNamePreferenceController.java
+++ b/src/com/android/settings/development/BluetoothDeviceNoNamePreferenceController.java
@@ -23,8 +23,12 @@
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 BluetoothDeviceNoNamePreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String BLUETOOTH_SHOW_DEVICES_WITHOUT_NAMES_KEY =
"bluetooth_show_devices_without_names";
diff --git a/src/com/android/settings/development/BluetoothInbandRingingPreferenceController.java b/src/com/android/settings/development/BluetoothInbandRingingPreferenceController.java
index 250e84a..db5a881 100644
--- a/src/com/android/settings/development/BluetoothInbandRingingPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothInbandRingingPreferenceController.java
@@ -24,8 +24,12 @@
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 BluetoothInbandRingingPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String BLUETOOTH_ENABLE_INBAND_RINGING_KEY =
"bluetooth_enable_inband_ringing";
diff --git a/src/com/android/settings/development/BluetoothServiceConnectionListener.java b/src/com/android/settings/development/BluetoothServiceConnectionListener.java
new file mode 100644
index 0000000..9dcd3b7
--- /dev/null
+++ b/src/com/android/settings/development/BluetoothServiceConnectionListener.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.development;
+
+import android.bluetooth.BluetoothA2dp;
+
+/**
+ * Interface for callbacks about bluetooth connectivity.
+ */
+public interface BluetoothServiceConnectionListener {
+
+ /**
+ * Called when the bluetooth service is connected.
+ * @param bluetoothA2dp controller for Bluetooth A2DP profile.
+ */
+ void onBluetoothServiceConnected(BluetoothA2dp bluetoothA2dp);
+
+ /**
+ * Called when the bluetooth codec configuration is changed.
+ */
+ void onBluetoothCodecUpdated();
+
+ /**
+ * Called with the bluetooth service is disconnected.
+ */
+ void onBluetoothServiceDisconnected();
+}
diff --git a/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java b/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java
index 16a549e..56cfd73 100644
--- a/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java
+++ b/src/com/android/settings/development/BluetoothSnoopLogPreferenceController.java
@@ -23,8 +23,12 @@
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 BluetoothSnoopLogPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String PREFERENCE_KEY = "bt_hci_snoop_log";
@VisibleForTesting
diff --git a/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2.java b/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2.java
index 34a95a6..0ab826f 100644
--- a/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2.java
+++ b/src/com/android/settings/development/BugReportInPowerPreferenceControllerV2.java
@@ -26,10 +26,13 @@
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 {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String KEY_BUGREPORT_IN_POWER = "bugreport_in_power";
diff --git a/src/com/android/settings/development/BugReportPreferenceControllerV2.java b/src/com/android/settings/development/BugReportPreferenceControllerV2.java
index 7df23a6..5876f84 100644
--- a/src/com/android/settings/development/BugReportPreferenceControllerV2.java
+++ b/src/com/android/settings/development/BugReportPreferenceControllerV2.java
@@ -19,7 +19,11 @@
import android.content.Context;
import android.os.UserManager;
-public class BugReportPreferenceControllerV2 extends DeveloperOptionsPreferenceController {
+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";
@@ -40,14 +44,4 @@
public String getPreferenceKey() {
return KEY_BUGREPORT;
}
-
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- // intentional no-op
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- // intentional no-op
- }
}
diff --git a/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java b/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java
index 39b6db2..a5390cc 100644
--- a/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java
+++ b/src/com/android/settings/development/CameraHalHdrplusPreferenceController.java
@@ -104,6 +104,6 @@
}
private boolean isHalHdrplusEnabled() {
- return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, false);
+ return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, true);
}
}
diff --git a/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2.java b/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2.java
similarity index 89%
rename from src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2.java
rename to src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2.java
index 2005623..b8828fe 100644
--- a/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2.java
+++ b/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2.java
@@ -26,10 +26,12 @@
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 CameraHalHdrPlusPreferenceControllerV2 extends
+public class CameraHalHdrplusPreferenceControllerV2 extends
DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String KEY_CAMERA_HAL_HDRPLUS_SWITCH = "camera_hal_hdrplus_switch";
@VisibleForTesting
@@ -43,7 +45,7 @@
private SwitchPreference mPreference;
- public CameraHalHdrPlusPreferenceControllerV2(Context context) {
+ public CameraHalHdrplusPreferenceControllerV2(Context context) {
super(context);
}
@@ -93,6 +95,6 @@
}
private boolean isHalHdrplusEnabled() {
- return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, false /* default */);
+ return SystemProperties.getBoolean(PROPERTY_CAMERA_HAL_HDRPLUS, true /* default */);
}
}
diff --git a/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java b/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java
index c3a5f16..43943ac 100644
--- a/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java
+++ b/src/com/android/settings/development/CameraLaserSensorPreferenceControllerV2.java
@@ -26,10 +26,12 @@
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 {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String KEY_CAMERA_LASER_SENSOR_SWITCH = "camera_laser_sensor_switch";
@VisibleForTesting
diff --git a/src/com/android/settings/development/ClearAdbKeysPreferenceController.java b/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
index 9c93280..2248b89 100644
--- a/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
+++ b/src/com/android/settings/development/ClearAdbKeysPreferenceController.java
@@ -28,7 +28,11 @@
import android.text.TextUtils;
import android.util.Log;
-public class ClearAdbKeysPreferenceController extends DeveloperOptionsPreferenceController {
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class ClearAdbKeysPreferenceController extends
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin {
private static final String TAG = "ClearAdbPrefCtrl";
private static final String CLEAR_ADB_KEYS = "clear_adb_keys";
diff --git a/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java b/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java
index 1fe2a0f..fdcecfb 100644
--- a/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java
+++ b/src/com/android/settings/development/ConnectivityMonitorPreferenceControllerV2.java
@@ -26,9 +26,12 @@
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 {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String KEY_CONNECTIVITY_MONITOR_SWITCH = "connectivity_monitor_switch";
@VisibleForTesting
diff --git a/src/com/android/settings/development/CoolColorTemperaturePreferenceController.java b/src/com/android/settings/development/CoolColorTemperaturePreferenceController.java
index 894435a..aa954c0 100644
--- a/src/com/android/settings/development/CoolColorTemperaturePreferenceController.java
+++ b/src/com/android/settings/development/CoolColorTemperaturePreferenceController.java
@@ -25,11 +25,13 @@
import android.widget.Toast;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.SystemPropPoker;
public class CoolColorTemperaturePreferenceController extends
DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String COLOR_TEMPERATURE_KEY = "color_temperature";
diff --git a/src/com/android/settings/development/DebugGpuOverdrawPreferenceController.java b/src/com/android/settings/development/DebugGpuOverdrawPreferenceController.java
new file mode 100644
index 0000000..5e0baa8
--- /dev/null
+++ b/src/com/android/settings/development/DebugGpuOverdrawPreferenceController.java
@@ -0,0 +1,103 @@
+/*
+ * 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.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.development.SystemPropPoker;
+
+public class DebugGpuOverdrawPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String DEBUG_HW_OVERDRAW_KEY = "debug_hw_overdraw";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public DebugGpuOverdrawPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.debug_hw_overdraw_values);
+ mListSummaries = context.getResources().getStringArray(R.array.debug_hw_overdraw_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return DEBUG_HW_OVERDRAW_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeDebugHwOverdrawOptions(newValue);
+ updateDebugHwOverdrawOptions();
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateDebugHwOverdrawOptions();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ }
+
+ private void writeDebugHwOverdrawOptions(Object newValue) {
+ SystemProperties.set(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY,
+ newValue == null ? "" : newValue.toString());
+ SystemPropPoker.getInstance().poke();
+ }
+
+ private void updateDebugHwOverdrawOptions() {
+ final String value = SystemProperties.get(
+ ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY, "" /* default */);
+
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ if (TextUtils.equals(value, mListValues[i])) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ }
+}
diff --git a/src/com/android/settings/development/DebugNonRectClipOperationsPreferenceController.java b/src/com/android/settings/development/DebugNonRectClipOperationsPreferenceController.java
new file mode 100644
index 0000000..bd4577a
--- /dev/null
+++ b/src/com/android/settings/development/DebugNonRectClipOperationsPreferenceController.java
@@ -0,0 +1,103 @@
+/*
+ * 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.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.development.SystemPropPoker;
+
+public class DebugNonRectClipOperationsPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String SHOW_NON_RECTANGULAR_CLIP_KEY = "show_non_rect_clip";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public DebugNonRectClipOperationsPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.show_non_rect_clip_values);
+ mListSummaries = context.getResources().getStringArray(R.array.show_non_rect_clip_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return SHOW_NON_RECTANGULAR_CLIP_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeShowNonRectClipOptions(newValue);
+ updateShowNonRectClipOptions();
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateShowNonRectClipOptions();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ }
+
+ private void writeShowNonRectClipOptions(Object newValue) {
+ SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY,
+ newValue == null ? "" : newValue.toString());
+ SystemPropPoker.getInstance().poke();
+ }
+
+ private void updateShowNonRectClipOptions() {
+ final String value = SystemProperties.get(
+ ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY, "hide" /* default */);
+
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ if (TextUtils.equals(value, mListValues[i])) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ }
+}
diff --git a/src/com/android/settings/development/DebugViewAttributesPreferenceController.java b/src/com/android/settings/development/DebugViewAttributesPreferenceController.java
index 080c921..caf23fa 100644
--- a/src/com/android/settings/development/DebugViewAttributesPreferenceController.java
+++ b/src/com/android/settings/development/DebugViewAttributesPreferenceController.java
@@ -23,8 +23,12 @@
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 DebugViewAttributesPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String DEBUG_VIEW_ATTRIBUTES_KEY = "debug_view_attributes";
diff --git a/src/com/android/settings/development/DeveloperOptionsPreferenceController.java b/src/com/android/settings/development/DeveloperOptionsPreferenceController.java
deleted file mode 100644
index 431d999..0000000
--- a/src/com/android/settings/development/DeveloperOptionsPreferenceController.java
+++ /dev/null
@@ -1,92 +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.content.Intent;
-
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
-
-/**
- * This controller is used handle changes for the master switch in the developer options page.
- *
- * All Preference Controllers that are a part of the developer options page should inherit this
- * class.
- */
-public abstract class DeveloperOptionsPreferenceController extends
- AbstractPreferenceController implements PreferenceControllerMixin {
-
- public DeveloperOptionsPreferenceController(Context context) {
- super(context);
- }
-
- /**
- * Called when an activity returns to the DeveloperSettingsDashboardFragment.
- *
- * @param requestCode The integer request code originally supplied to
- * startActivityForResult(), allowing you to identify who this
- * result came from.
- * @param resultCode The integer result code returned by the child activity
- * through its setResult().
- * @param data An Intent, which can return result data to the caller
- * (various data can be attached to Intent "extras").
- * @return true if the controller handled the activity result
- */
- public boolean onActivityResult(int requestCode, int resultCode, Intent data) {
- return false;
- }
-
- /**
- * Child classes should override this method to create custom logic for hiding preferences.
- *
- * @return true if the preference is to be displayed.
- */
- @Override
- public boolean isAvailable() {
- return true;
- }
-
- /**
- * Called when developer options is enabled
- */
- public void onDeveloperOptionsEnabled() {
- if (isAvailable()) {
- onDeveloperOptionsSwitchEnabled();
- }
- }
-
- /**
- * Called when developer options is disabled
- */
- public void onDeveloperOptionsDisabled() {
- if (isAvailable()) {
- onDeveloperOptionsSwitchDisabled();
- }
- }
-
- /**
- * Called when developer options is enabled and the preference is available
- */
- protected abstract void onDeveloperOptionsSwitchEnabled();
-
- /**
- * Called when developer options is disabled and the preference is available
- */
- protected abstract void onDeveloperOptionsSwitchDisabled();
-
-}
diff --git a/src/com/android/settings/development/DevelopmentSettings.java b/src/com/android/settings/development/DevelopmentSettings.java
index 980d976..b492c1a 100644
--- a/src/com/android/settings/development/DevelopmentSettings.java
+++ b/src/com/android/settings/development/DevelopmentSettings.java
@@ -193,6 +193,8 @@
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 DNS_TLS_KEY = "dns_tls";
+
private static final String INACTIVE_APPS_KEY = "inactive_apps";
private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY
@@ -271,6 +273,8 @@
private ListPreference mBluetoothSelectA2dpChannelMode;
private ListPreference mBluetoothSelectA2dpLdacPlaybackQuality;
+ private SwitchPreference mDnsTls;
+
private SwitchPreference mOtaDisableAutomaticUpdate;
private SwitchPreference mWifiAllowScansWithTraffic;
private SwitchPreference mStrictMode;
@@ -491,6 +495,8 @@
mBluetoothSelectA2dpLdacPlaybackQuality = addListPreference(BLUETOOTH_SELECT_A2DP_LDAC_PLAYBACK_QUALITY_KEY);
initBluetoothConfigurationValues();
+ mDnsTls = findAndInitSwitchPref(DNS_TLS_KEY);
+
mWindowAnimationScale = addListPreference(WINDOW_ANIMATION_SCALE_KEY);
mTransitionAnimationScale = addListPreference(TRANSITION_ANIMATION_SCALE_KEY);
mAnimatorDurationScale = addListPreference(ANIMATOR_DURATION_SCALE_KEY);
@@ -545,7 +551,7 @@
mColorModePreference = (ColorModePreference) findPreference(KEY_COLOR_MODE);
mColorModePreference.updateCurrentAndSupported();
if (mColorModePreference.getColorModeCount() < 2 ||
- getContext().getDisplay().isWideColorGamut()) {
+ getContext().getResources().getConfiguration().isScreenWideColorGamut()) {
removePreference(KEY_COLOR_MODE);
mColorModePreference = null;
}
@@ -848,6 +854,8 @@
updateBluetoothDisableAbsVolumeOptions();
updateBluetoothEnableInbandRingingOptions();
updateBluetoothA2dpConfigurationValues();
+ updateSwitchPreference(mDnsTls, Settings.Global.getInt(cr,
+ Settings.Global.DNS_TLS_DISABLED, 0) == 0);
}
private void resetDangerousOptions() {
@@ -2363,6 +2371,10 @@
writeBluetoothDisableAbsVolumeOptions();
} else if (preference == mBluetoothEnableInbandRinging) {
writeBluetoothEnableInbandRingingOptions();
+ } else if (preference == mDnsTls) {
+ Settings.Global.putInt(getActivity().getContentResolver(),
+ Settings.Global.DNS_TLS_DISABLED,
+ mDnsTls.isChecked() ? 0 : 1);
} else if (SHORTCUT_MANAGER_RESET_KEY.equals(preference.getKey())) {
resetShortcutManagerThrottling();
} else {
diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
index 8f61c52..83f395f 100644
--- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
+++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java
@@ -17,6 +17,10 @@
package com.android.settings.development;
import android.app.Activity;
+import android.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothCodecStatus;
+import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -42,6 +46,7 @@
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import com.android.settingslib.development.SystemPropPoker;
@@ -51,14 +56,18 @@
public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFragment
implements SwitchBar.OnSwitchChangeListener, OemUnlockDialogHost, AdbDialogHost,
- AdbClearKeysDialogHost {
+ AdbClearKeysDialogHost, LogPersistDialogHost {
private static final String TAG = "DevSettingsDashboard";
+ private final BluetoothA2dpConfigStore mBluetoothA2dpConfigStore =
+ new BluetoothA2dpConfigStore();
+
private boolean mIsAvailable = true;
private SwitchBar mSwitchBar;
private DevelopmentSwitchBarController mSwitchBarController;
private List<AbstractPreferenceController> mPreferenceControllers = new ArrayList<>();
+ private BluetoothA2dp mBluetoothA2dp;
private final BroadcastReceiver mEnableAdbReceiver = new BroadcastReceiver() {
@Override
@@ -71,6 +80,56 @@
}
};
+ private final 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 = intent.getParcelableExtra(
+ BluetoothCodecStatus.EXTRA_CODEC_STATUS);
+ Log.d(TAG, "Received BluetoothCodecStatus=" + codecStatus);
+ for (AbstractPreferenceController controller : mPreferenceControllers) {
+ if (controller instanceof BluetoothServiceConnectionListener) {
+ ((BluetoothServiceConnectionListener) controller).onBluetoothCodecUpdated();
+ }
+ }
+ }
+ }
+ };
+
+
+ private final BluetoothProfile.ServiceListener mBluetoothA2dpServiceListener =
+ new BluetoothProfile.ServiceListener() {
+ @Override
+ public void onServiceConnected(int profile,
+ BluetoothProfile proxy) {
+ synchronized (mBluetoothA2dpConfigStore) {
+ mBluetoothA2dp = (BluetoothA2dp) proxy;
+ }
+ for (AbstractPreferenceController controller : mPreferenceControllers) {
+ if (controller instanceof BluetoothServiceConnectionListener) {
+ ((BluetoothServiceConnectionListener) controller)
+ .onBluetoothServiceConnected(mBluetoothA2dp);
+ }
+ }
+ }
+
+ @Override
+ public void onServiceDisconnected(int profile) {
+ synchronized (mBluetoothA2dpConfigStore) {
+ mBluetoothA2dp = null;
+ }
+ for (AbstractPreferenceController controller : mPreferenceControllers) {
+ if (controller instanceof BluetoothServiceConnectionListener) {
+ ((BluetoothServiceConnectionListener) controller)
+ .onBluetoothServiceDisconnected();
+ }
+ }
+ }
+ };
+
public DevelopmentSettingsDashboardFragment() {
super(UserManager.DISALLOW_DEBUGGING_FEATURES);
}
@@ -96,12 +155,25 @@
mSwitchBarController = new DevelopmentSwitchBarController(
this /* DevelopmentSettings */, mSwitchBar, mIsAvailable, getLifecycle());
mSwitchBar.show();
+
+ // Restore UI state based on whether developer options is enabled
+ if (DevelopmentSettingsEnabler.isDevelopmentSettingsEnabled(getContext())) {
+ enableDeveloperOptions();
+ } else {
+ disableDeveloperOptions();
+ }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
registerReceivers();
+
+ final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ if (adapter != null) {
+ adapter.getProfileProxy(getActivity(), mBluetoothA2dpServiceListener,
+ BluetoothProfile.A2DP);
+ }
return super.onCreateView(inflater, container, savedInstanceState);
}
@@ -109,6 +181,12 @@
public void onDestroyView() {
super.onDestroyView();
unregisterReceivers();
+
+ final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+ if (adapter != null) {
+ adapter.closeProfileProxy(BluetoothProfile.A2DP, mBluetoothA2dp);
+ mBluetoothA2dp = null;
+ }
}
@Override
@@ -127,17 +205,7 @@
if (isChecked) {
EnableDevelopmentSettingWarningDialog.show(this /* host */);
} else {
- DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), false);
- final SystemPropPoker poker = SystemPropPoker.getInstance();
- poker.blockPokes();
- for (AbstractPreferenceController controller : mPreferenceControllers) {
- if (controller instanceof DeveloperOptionsPreferenceController) {
- ((DeveloperOptionsPreferenceController) controller)
- .onDeveloperOptionsDisabled();
- }
- }
- poker.unblockPokes();
- poker.poke();
+ disableDeveloperOptions();
}
}
}
@@ -179,14 +247,28 @@
}
@Override
+ public void onDisableLogPersistDialogConfirmed() {
+ final LogPersistPreferenceControllerV2 controller = getDevelopmentOptionsController(
+ LogPersistPreferenceControllerV2.class);
+ controller.onDisableLogPersistDialogConfirmed();
+ }
+
+ @Override
+ public void onDisableLogPersistDialogRejected() {
+ final LogPersistPreferenceControllerV2 controller = getDevelopmentOptionsController(
+ LogPersistPreferenceControllerV2.class);
+ controller.onDisableLogPersistDialogRejected();
+ }
+
+ @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
boolean handledResult = false;
for (AbstractPreferenceController controller : mPreferenceControllers) {
- if (controller instanceof DeveloperOptionsPreferenceController) {
+ if (controller instanceof OnActivityResultListener) {
// We do not break early because it is possible for multiple controllers to
// handle the same result code.
handledResult |=
- ((DeveloperOptionsPreferenceController) controller).onActivityResult(
+ ((OnActivityResultListener) controller).onActivityResult(
requestCode, resultCode, data);
}
}
@@ -214,21 +296,27 @@
@Override
protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
mPreferenceControllers = buildPreferenceControllers(context, getActivity(), getLifecycle(),
- this /* devOptionsDashboardFragment */);
+ this /* devOptionsDashboardFragment */,
+ new BluetoothA2dpConfigStore());
return mPreferenceControllers;
}
private void registerReceivers() {
LocalBroadcastManager.getInstance(getContext())
.registerReceiver(mEnableAdbReceiver, new IntentFilter(
- AdbPreferenceController.ADB_STATE_CHANGED));
+ AdbPreferenceController.ACTION_ENABLE_ADB_STATE_CHANGED));
+
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(BluetoothA2dp.ACTION_CODEC_CONFIG_CHANGED);
+ getActivity().registerReceiver(mBluetoothA2dpReceiver, filter);
}
private void unregisterReceivers() {
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(mEnableAdbReceiver);
+ getActivity().unregisterReceiver(mBluetoothA2dpReceiver);
}
- void onEnableDevelopmentOptionsConfirmed() {
+ private void enableDeveloperOptions() {
DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), true);
for (AbstractPreferenceController controller : mPreferenceControllers) {
if (controller instanceof DeveloperOptionsPreferenceController) {
@@ -237,28 +325,45 @@
}
}
+ private void disableDeveloperOptions() {
+ DevelopmentSettingsEnabler.setDevelopmentSettingsEnabled(getContext(), false);
+ final SystemPropPoker poker = SystemPropPoker.getInstance();
+ poker.blockPokes();
+ for (AbstractPreferenceController controller : mPreferenceControllers) {
+ if (controller instanceof DeveloperOptionsPreferenceController) {
+ ((DeveloperOptionsPreferenceController) controller)
+ .onDeveloperOptionsDisabled();
+ }
+ }
+ poker.unblockPokes();
+ poker.poke();
+ }
+
+ void onEnableDevelopmentOptionsConfirmed() {
+ enableDeveloperOptions();
+ }
+
void onEnableDevelopmentOptionsRejected() {
// Reset the toggle
mSwitchBar.setChecked(false);
}
private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
- Activity activity, Lifecycle lifecycle, DevelopmentSettingsDashboardFragment fragment) {
+ Activity activity, Lifecycle lifecycle, DevelopmentSettingsDashboardFragment fragment,
+ BluetoothA2dpConfigStore bluetoothA2dpConfigStore) {
final List<AbstractPreferenceController> controllers = new ArrayList<>();
+ controllers.add(new MemoryUsagePreferenceController(context));
controllers.add(new BugReportPreferenceControllerV2(context));
controllers.add(new LocalBackupPasswordPreferenceController(context));
controllers.add(new StayAwakePreferenceController(context, lifecycle));
controllers.add(new HdcpCheckingPreferenceController(context));
controllers.add(new BluetoothSnoopLogPreferenceController(context));
controllers.add(new OemUnlockPreferenceController(context, activity, fragment));
- // running services
controllers.add(new FileEncryptionPreferenceController(context));
controllers.add(new PictureColorModePreferenceController(context, lifecycle));
controllers.add(new WebViewAppPreferenceControllerV2(context));
controllers.add(new CoolColorTemperaturePreferenceController(context));
controllers.add(new DisableAutomaticUpdatesPreferenceController(context));
- // system ui demo mode
- // quick settings developer tiles
controllers.add(new AdbPreferenceController(context, fragment));
controllers.add(new ClearAdbKeysPreferenceController(context, fragment));
controllers.add(new LocalTerminalPreferenceController(context));
@@ -268,12 +373,11 @@
controllers.add(new SelectDebugAppPreferenceController(context, fragment));
controllers.add(new WaitForDebuggerPreferenceController(context));
controllers.add(new VerifyAppsOverUsbPreferenceControllerV2(context));
- // logger buffer sizes
- // store logger data persistently on device
+ 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 CameraHalHdrPlusPreferenceControllerV2(context));
- // feature flags
+ controllers.add(new CameraHalHdrplusPreferenceControllerV2(context));
controllers.add(new WifiDisplayCertificationPreferenceController(context));
controllers.add(new WifiVerboseLoggingPreferenceController(context));
controllers.add(new WifiAggressiveHandoverPreferenceController(context));
@@ -284,42 +388,45 @@
controllers.add(new BluetoothDeviceNoNamePreferenceController(context));
controllers.add(new BluetoothAbsoluteVolumePreferenceController(context));
controllers.add(new BluetoothInbandRingingPreferenceController(context));
- // bluetooth avrcp version
- // bluetooth audio codec
- // bluetooth audio sample rate
- // bluetooth audio bits per sample
- // bluetooth audio channel mode
- // bluetooth audio ldac codec: playback quality
+ controllers.add(new BluetoothAvrcpVersionPreferenceController(context));
+ controllers.add(new BluetoothAudioCodecPreferenceController(context, lifecycle,
+ bluetoothA2dpConfigStore));
+ controllers.add(new BluetoothAudioSampleRatePreferenceController(context, lifecycle,
+ bluetoothA2dpConfigStore));
+ controllers.add(new BluetoothAudioBitsPerSamplePreferenceController(context, lifecycle,
+ bluetoothA2dpConfigStore));
+ controllers.add(new BluetoothAudioChannelModePreferenceController(context, lifecycle,
+ bluetoothA2dpConfigStore));
+ controllers.add(new BluetoothAudioQualityPreferenceController(context, lifecycle,
+ bluetoothA2dpConfigStore));
controllers.add(new ShowTapsPreferenceController(context));
controllers.add(new PointerLocationPreferenceController(context));
controllers.add(new ShowSurfaceUpdatesPreferenceController(context));
controllers.add(new ShowLayoutBoundsPreferenceController(context));
controllers.add(new RtlLayoutPreferenceController(context));
- // window animation scale
- // transition animation scale
- // animator duration scale
- // simulate secondary displays
- // smallest width
+ controllers.add(new WindowAnimationScalePreferenceController(context));
+ controllers.add(new TransitionAnimationScalePreferenceController(context));
+ controllers.add(new AnimatorDurationScalePreferenceController(context));
+ controllers.add(new SecondaryDisplayPreferenceController(context));
controllers.add(new ForceGpuRenderingPreferenceController(context));
controllers.add(new GpuViewUpdatesPreferenceController(context));
controllers.add(new HardwareLayersUpdatesPreferenceController(context));
- // debug gpu overdraw
- // debug non-rectangular clip operations
+ controllers.add(new DebugGpuOverdrawPreferenceController(context));
+ controllers.add(new DebugNonRectClipOperationsPreferenceController(context));
controllers.add(new ForceMSAAPreferenceController(context));
controllers.add(new HardwareOverlaysPreferenceController(context));
- // simulate color space
- // set gpu renderer
+ controllers.add(new SimulateColorSpacePreferenceController(context));
+ controllers.add(new SetGpuRendererPreferenceController(context));
controllers.add(new UsbAudioRoutingPreferenceController(context));
controllers.add(new StrictModePreferenceController(context));
- // profile gpu rendering
+ controllers.add(new ProfileGpuRenderingPreferenceController(context));
controllers.add(new KeepActivitiesPreferenceController(context));
- // background process limit
- // background check
+ controllers.add(new BackgroundProcessLimitPreferenceController(context));
controllers.add(new AppsNotRespondingPreferenceController(context));
controllers.add(new NotificationChannelWarningsPreferenceController(context));
- // inactive apps
controllers.add(new AllowAppsOnExternalPreferenceController(context));
controllers.add(new ResizableActivityPreferenceController(context));
+ controllers.add(new FreeformWindowsPreferenceController(context));
controllers.add(new ShortcutManagerThrottlingPreferenceController(context));
return controllers;
}
@@ -353,7 +460,8 @@
public List<AbstractPreferenceController> getPreferenceControllers(Context
context) {
return buildPreferenceControllers(context, null /* activity */,
- null /* lifecycle */, null /* devOptionsDashboardFragment */);
+ null /* lifecycle */, null /* devOptionsDashboardFragment */,
+ null /* bluetoothA2dpConfigStore */);
}
};
}
diff --git a/src/com/android/settings/development/DisableAutomaticUpdatesPreferenceController.java b/src/com/android/settings/development/DisableAutomaticUpdatesPreferenceController.java
index 4bd7d8c..4090462 100644
--- a/src/com/android/settings/development/DisableAutomaticUpdatesPreferenceController.java
+++ b/src/com/android/settings/development/DisableAutomaticUpdatesPreferenceController.java
@@ -23,9 +23,12 @@
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 DisableAutomaticUpdatesPreferenceController extends
DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String OTA_DISABLE_AUTOMATIC_UPDATE_KEY = "ota_disable_automatic_update";
diff --git a/src/com/android/settings/development/DisableLogPersistWarningDialog.java b/src/com/android/settings/development/DisableLogPersistWarningDialog.java
new file mode 100644
index 0000000..1ab3a92
--- /dev/null
+++ b/src/com/android/settings/development/DisableLogPersistWarningDialog.java
@@ -0,0 +1,76 @@
+/*
+ * 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.app.Fragment;
+import android.app.FragmentManager;
+import android.content.DialogInterface;
+import android.os.Bundle;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
+
+public class DisableLogPersistWarningDialog extends InstrumentedDialogFragment implements
+ DialogInterface.OnClickListener, DialogInterface.OnDismissListener {
+
+ public static final String TAG = "DisableLogPersistDlg";
+
+ public static void show(LogPersistDialogHost host) {
+ if (!(host instanceof Fragment)) {
+ return;
+ }
+ final Fragment hostFragment = (Fragment) host;
+ final FragmentManager manager = hostFragment.getActivity().getFragmentManager();
+ if (manager.findFragmentByTag(TAG) == null) {
+ final DisableLogPersistWarningDialog dialog =
+ new DisableLogPersistWarningDialog();
+ dialog.setTargetFragment(hostFragment, 0 /* requestCode */);
+ dialog.show(manager, TAG);
+ }
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.DIALOG_LOG_PERSIST;
+ }
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ return new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.dev_logpersist_clear_warning_title)
+ .setMessage(R.string.dev_logpersist_clear_warning_message)
+ .setPositiveButton(android.R.string.yes, this /* onClickListener */)
+ .setNegativeButton(android.R.string.no, this /* onClickListener */)
+ .create();
+ }
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ final LogPersistDialogHost host = (LogPersistDialogHost) getTargetFragment();
+ if (host == null) {
+ return;
+ }
+ if (which == DialogInterface.BUTTON_POSITIVE) {
+ host.onDisableLogPersistDialogConfirmed();
+ } else {
+ host.onDisableLogPersistDialogRejected();
+ }
+ }
+}
diff --git a/src/com/android/settings/development/FileEncryptionPreferenceController.java b/src/com/android/settings/development/FileEncryptionPreferenceController.java
index 463bb70..3249bcf 100644
--- a/src/com/android/settings/development/FileEncryptionPreferenceController.java
+++ b/src/com/android/settings/development/FileEncryptionPreferenceController.java
@@ -27,8 +27,11 @@
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-public class FileEncryptionPreferenceController extends DeveloperOptionsPreferenceController {
+public class FileEncryptionPreferenceController extends
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin {
private static final String KEY_CONVERT_FBE = "convert_to_file_encryption";
private static final String KEY_STORAGE_MANAGER = "mount";
@@ -83,16 +86,6 @@
mContext.getResources().getString(R.string.convert_to_file_encryption_done));
}
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- // intentional no-op
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- // intentional no-op
- }
-
private IStorageManager getStorageManager() {
try {
return IStorageManager.Stub.asInterface(
diff --git a/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java b/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java
index 9c56f65..83f7930 100644
--- a/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java
+++ b/src/com/android/settings/development/ForceGpuRenderingPreferenceController.java
@@ -23,10 +23,13 @@
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.development.SystemPropPoker;
public class ForceGpuRenderingPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String FORCE_HARDWARE_UI_KEY = "force_hw_ui";
diff --git a/src/com/android/settings/development/ForceMSAAPreferenceController.java b/src/com/android/settings/development/ForceMSAAPreferenceController.java
index 69436be..2d2fd95 100644
--- a/src/com/android/settings/development/ForceMSAAPreferenceController.java
+++ b/src/com/android/settings/development/ForceMSAAPreferenceController.java
@@ -23,10 +23,12 @@
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.development.SystemPropPoker;
public class ForceMSAAPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String FORCE_MSAA_KEY = "force_msaa";
diff --git a/src/com/android/settings/development/FreeformWindowsPreferenceController.java b/src/com/android/settings/development/FreeformWindowsPreferenceController.java
new file mode 100644
index 0000000..8b847f6
--- /dev/null
+++ b/src/com/android/settings/development/FreeformWindowsPreferenceController.java
@@ -0,0 +1,100 @@
+/*
+ * 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.Build;
+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 android.text.TextUtils;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class FreeformWindowsPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String ENABLE_FREEFORM_SUPPORT_KEY = "enable_freeform_support";
+
+ @VisibleForTesting
+ static final int SETTING_VALUE_OFF = 0;
+ @VisibleForTesting
+ static final int SETTING_VALUE_ON = 1;
+ @VisibleForTesting
+ static final String USER_BUILD_TYPE = "user";
+
+ private SwitchPreference mPreference;
+
+ public FreeformWindowsPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return !TextUtils.equals(USER_BUILD_TYPE, getBuildType());
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return ENABLE_FREEFORM_SUPPORT_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.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT,
+ isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, SETTING_VALUE_OFF);
+ mPreference.setChecked(mode != SETTING_VALUE_OFF);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, SETTING_VALUE_OFF);
+ mPreference.setEnabled(false);
+ mPreference.setChecked(false);
+ }
+
+ @VisibleForTesting
+ String getBuildType() {
+ return Build.TYPE;
+ }
+}
diff --git a/src/com/android/settings/development/GpuViewUpdatesPreferenceController.java b/src/com/android/settings/development/GpuViewUpdatesPreferenceController.java
index 1538da4..cccb38b 100644
--- a/src/com/android/settings/development/GpuViewUpdatesPreferenceController.java
+++ b/src/com/android/settings/development/GpuViewUpdatesPreferenceController.java
@@ -23,10 +23,13 @@
import android.support.v7.preference.PreferenceScreen;
import android.view.ThreadedRenderer;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.SystemPropPoker;
public class GpuViewUpdatesPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String SHOW_HW_SCREEN_UPDATES_KEY = "show_hw_screen_updates";
diff --git a/src/com/android/settings/development/HardwareLayersUpdatesPreferenceController.java b/src/com/android/settings/development/HardwareLayersUpdatesPreferenceController.java
index abab0ab..967839e 100644
--- a/src/com/android/settings/development/HardwareLayersUpdatesPreferenceController.java
+++ b/src/com/android/settings/development/HardwareLayersUpdatesPreferenceController.java
@@ -23,10 +23,13 @@
import android.support.v7.preference.PreferenceScreen;
import android.view.ThreadedRenderer;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.SystemPropPoker;
public class HardwareLayersUpdatesPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String SHOW_HW_LAYERS_UPDATES_KEY = "show_hw_layers_updates";
diff --git a/src/com/android/settings/development/HardwareOverlaysPreferenceController.java b/src/com/android/settings/development/HardwareOverlaysPreferenceController.java
index e6d4798..c2f7c54 100644
--- a/src/com/android/settings/development/HardwareOverlaysPreferenceController.java
+++ b/src/com/android/settings/development/HardwareOverlaysPreferenceController.java
@@ -26,8 +26,11 @@
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 HardwareOverlaysPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String DISABLE_OVERLAYS_KEY = "disable_overlays";
diff --git a/src/com/android/settings/development/HdcpCheckingPreferenceController.java b/src/com/android/settings/development/HdcpCheckingPreferenceController.java
index a443f87..60264ef 100644
--- a/src/com/android/settings/development/HdcpCheckingPreferenceController.java
+++ b/src/com/android/settings/development/HdcpCheckingPreferenceController.java
@@ -26,10 +26,13 @@
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.SystemPropPoker;
public class HdcpCheckingPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String HDCP_CHECKING_KEY = "hdcp_checking";
diff --git a/src/com/android/settings/development/KeepActivitiesPreferenceController.java b/src/com/android/settings/development/KeepActivitiesPreferenceController.java
index 437fd9d..aab4d1f 100644
--- a/src/com/android/settings/development/KeepActivitiesPreferenceController.java
+++ b/src/com/android/settings/development/KeepActivitiesPreferenceController.java
@@ -26,8 +26,11 @@
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 KeepActivitiesPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String IMMEDIATELY_DESTROY_ACTIVITIES_KEY =
"immediately_destroy_activities";
diff --git a/src/com/android/settings/development/LocalBackupPasswordPreferenceController.java b/src/com/android/settings/development/LocalBackupPasswordPreferenceController.java
index b509448..51690ff 100644
--- a/src/com/android/settings/development/LocalBackupPasswordPreferenceController.java
+++ b/src/com/android/settings/development/LocalBackupPasswordPreferenceController.java
@@ -26,8 +26,11 @@
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
-public class LocalBackupPasswordPreferenceController extends DeveloperOptionsPreferenceController {
+public class LocalBackupPasswordPreferenceController extends
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin {
private static final String LOCAL_BACKUP_PASSWORD = "local_backup_password";
@@ -52,16 +55,6 @@
updatePasswordSummary(preference);
}
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- // intentional no-op
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- // intentional no-op
- }
-
private void updatePasswordSummary(Preference preference) {
preference.setEnabled(isAdminUser() && mBackupManager != null);
if (mBackupManager == null) {
diff --git a/src/com/android/settings/development/LocalTerminalPreferenceController.java b/src/com/android/settings/development/LocalTerminalPreferenceController.java
index cda6e27..17a5785 100644
--- a/src/com/android/settings/development/LocalTerminalPreferenceController.java
+++ b/src/com/android/settings/development/LocalTerminalPreferenceController.java
@@ -8,10 +8,13 @@
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 LocalTerminalPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String ENABLE_TERMINAL_KEY = "enable_terminal";
diff --git a/tests/robotests/src/android/net/wifi/WifiNetworkScoreCache.java b/src/com/android/settings/development/LogPersistDialogHost.java
similarity index 61%
copy from tests/robotests/src/android/net/wifi/WifiNetworkScoreCache.java
copy to src/com/android/settings/development/LogPersistDialogHost.java
index 7995e07..0187e03 100644
--- a/tests/robotests/src/android/net/wifi/WifiNetworkScoreCache.java
+++ b/src/com/android/settings/development/LogPersistDialogHost.java
@@ -13,13 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.net.wifi;
+
+package com.android.settings.development;
/**
- * Empty class def for {@link android.net.wifi.WifiNetworkScoreCache}.
- *
- * <p>Can be removed once Robolectric supports Android O.
+ * Interface for LogPersistDialogFragment callbacks.
*/
-public class WifiNetworkScoreCache {
+public interface LogPersistDialogHost {
+ /**
+ * Called when the user presses yes on the warning dialog.
+ */
+ void onDisableLogPersistDialogConfirmed();
+
+ /**
+ * Called when the user presses no on the warning dialog.
+ */
+ void onDisableLogPersistDialogRejected();
}
diff --git a/src/com/android/settings/development/LogPersistPreferenceControllerV2.java b/src/com/android/settings/development/LogPersistPreferenceControllerV2.java
new file mode 100644
index 0000000..537b71b
--- /dev/null
+++ b/src/com/android/settings/development/LogPersistPreferenceControllerV2.java
@@ -0,0 +1,89 @@
+/*
+ * 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.annotation.Nullable;
+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.core.lifecycle.Lifecycle;
+import com.android.settingslib.development.AbstractLogpersistPreferenceController;
+
+public class LogPersistPreferenceControllerV2 extends
+ AbstractLogpersistPreferenceController implements PreferenceControllerMixin {
+
+ private final DevelopmentSettingsDashboardFragment mFragment;
+ private ListPreference mPreference;
+
+
+ public LogPersistPreferenceControllerV2(Context context,
+ DevelopmentSettingsDashboardFragment fragment, Lifecycle lifecycle) {
+ super(context, lifecycle);
+
+ mFragment = fragment;
+ }
+
+ @Override
+ public void showConfirmationDialog(@Nullable Preference preference) {
+ DisableLogPersistWarningDialog.show(mFragment);
+ }
+
+ @Override
+ public void dismissConfirmationDialog() {
+ // intentional no-op
+ }
+
+ @Override
+ public boolean isConfirmationDialogShowing() {
+ return false;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateLogpersistValues();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeLogpersistOption(null /* new value */, true);
+ mPreference.setEnabled(false);
+ }
+
+ public void onDisableLogPersistDialogConfirmed() {
+ setLogpersistOff(true);
+ updateLogpersistValues();
+ }
+
+ public void onDisableLogPersistDialogRejected() {
+ updateLogpersistValues();
+ }
+}
diff --git a/src/com/android/settings/development/LogdSizePreferenceController.java b/src/com/android/settings/development/LogdSizePreferenceController.java
index b12884c..8ee3405 100644
--- a/src/com/android/settings/development/LogdSizePreferenceController.java
+++ b/src/com/android/settings/development/LogdSizePreferenceController.java
@@ -21,6 +21,10 @@
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 {
diff --git a/src/com/android/settings/development/LogdSizePreferenceControllerV2.java b/src/com/android/settings/development/LogdSizePreferenceControllerV2.java
new file mode 100644
index 0000000..8194c48
--- /dev/null
+++ b/src/com/android/settings/development/LogdSizePreferenceControllerV2.java
@@ -0,0 +1,58 @@
+/*
+ * 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
index a1ca186..26ab878 100644
--- a/src/com/android/settings/development/LogpersistPreferenceController.java
+++ b/src/com/android/settings/development/LogpersistPreferenceController.java
@@ -27,6 +27,10 @@
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 {
diff --git a/src/com/android/settings/development/MemoryUsagePreferenceController.java b/src/com/android/settings/development/MemoryUsagePreferenceController.java
new file mode 100644
index 0000000..1b589fd
--- /dev/null
+++ b/src/com/android/settings/development/MemoryUsagePreferenceController.java
@@ -0,0 +1,78 @@
+/*
+ * 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.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.format.Formatter;
+
+import com.android.settings.R;
+import com.android.settings.applications.ProcStatsData;
+import com.android.settings.applications.ProcessStatsBase;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class MemoryUsagePreferenceController extends DeveloperOptionsPreferenceController implements
+ PreferenceControllerMixin {
+
+ private static final String MEMORY_USAGE_KEY = "memory";
+
+ private Preference mPreference;
+ private ProcStatsData mProcStatsData;
+
+ public MemoryUsagePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return MEMORY_USAGE_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = screen.findPreference(getPreferenceKey());
+ mProcStatsData = getProcStatsData();
+ setDuration();
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ mProcStatsData.refreshStats(true);
+ final ProcStatsData.MemInfo memInfo = mProcStatsData.getMemInfo();
+ final String usedResult = Formatter.formatShortFileSize(mContext,
+ (long) memInfo.realUsedRam);
+ final String totalResult = Formatter.formatShortFileSize(mContext,
+ (long) memInfo.realTotalRam);
+ mPreference.setSummary(mContext.getString(R.string.memory_summary,
+ usedResult, totalResult));
+ }
+
+ @VisibleForTesting
+ void setDuration() {
+ mProcStatsData.setDuration(ProcessStatsBase.sDurations[0] /* 3 hours */);
+ }
+
+ @VisibleForTesting
+ ProcStatsData getProcStatsData() {
+ return new ProcStatsData(mContext, false);
+ }
+}
diff --git a/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java b/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java
index a98bf20..eafcb5c 100644
--- a/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java
+++ b/src/com/android/settings/development/MobileDataAlwaysOnPreferenceController.java
@@ -23,8 +23,12 @@
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 MobileDataAlwaysOnPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String MOBILE_DATA_ALWAYS_ON = "mobile_data_always_on";
diff --git a/src/com/android/settings/development/MockLocationAppPreferenceController.java b/src/com/android/settings/development/MockLocationAppPreferenceController.java
index 9f6c4d3..8305a9d 100644
--- a/src/com/android/settings/development/MockLocationAppPreferenceController.java
+++ b/src/com/android/settings/development/MockLocationAppPreferenceController.java
@@ -31,11 +31,15 @@
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import java.util.List;
-public class MockLocationAppPreferenceController extends DeveloperOptionsPreferenceController {
+public class MockLocationAppPreferenceController extends
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin,
+ OnActivityResultListener {
private static final String MOCK_LOCATION_APP_KEY = "mock_location_app";
private static final int[] MOCK_LOCATION_APP_OPS = new int[]{AppOpsManager.OP_MOCK_LOCATION};
diff --git a/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java b/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java
index c0382f2..15a1532 100644
--- a/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java
+++ b/src/com/android/settings/development/NotificationChannelWarningsPreferenceController.java
@@ -24,8 +24,12 @@
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 NotificationChannelWarningsPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String SHOW_NOTIFICATION_CHANNEL_WARNINGS_KEY =
"show_notification_channel_warnings";
diff --git a/src/com/android/settings/development/OemUnlockPreferenceController.java b/src/com/android/settings/development/OemUnlockPreferenceController.java
index cb391a8..91994c2 100644
--- a/src/com/android/settings/development/OemUnlockPreferenceController.java
+++ b/src/com/android/settings/development/OemUnlockPreferenceController.java
@@ -32,11 +32,13 @@
import android.telephony.TelephonyManager;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.RestrictedSwitchPreference;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class OemUnlockPreferenceController extends DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin, OnActivityResultListener {
private static final String PREFERENCE_KEY = "oem_unlock_enable";
diff --git a/src/com/android/settings/development/OnActivityResultListener.java b/src/com/android/settings/development/OnActivityResultListener.java
new file mode 100644
index 0000000..6763653
--- /dev/null
+++ b/src/com/android/settings/development/OnActivityResultListener.java
@@ -0,0 +1,22 @@
+package com.android.settings.development;
+
+import android.content.Intent;
+
+/**
+ * Interface for activity result callbacks in the {@link DevelopmentSettingsDashboardFragment}
+ */
+public interface OnActivityResultListener {
+ /**
+ * Called when an activity returns to the {@link DevelopmentSettingsDashboardFragment}.
+ *
+ * @param requestCode The integer request code originally supplied to
+ * startActivityForResult(), allowing you to identify who this
+ * result came from.
+ * @param resultCode The integer result code returned by the child activity
+ * through its setResult().
+ * @param data An Intent, which can return result data to the caller
+ * (various data can be attached to Intent "extras").
+ * @return true if the controller handled the result.
+ */
+ boolean onActivityResult(int requestCode, int resultCode, Intent data);
+}
diff --git a/src/com/android/settings/development/PictureColorModePreferenceController.java b/src/com/android/settings/development/PictureColorModePreferenceController.java
index fe4755f..8fa94af 100644
--- a/src/com/android/settings/development/PictureColorModePreferenceController.java
+++ b/src/com/android/settings/development/PictureColorModePreferenceController.java
@@ -20,14 +20,16 @@
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.PreferenceScreen;
+import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class PictureColorModePreferenceController extends
DeveloperOptionsPreferenceController implements
- LifecycleObserver, OnResume, OnPause {
+ LifecycleObserver, OnResume, OnPause, PreferenceControllerMixin {
private static final String KEY_COLOR_MODE = "picture_color_mode";
@@ -89,7 +91,7 @@
@VisibleForTesting
boolean isWideColorGamut() {
- return mContext.getDisplay().isWideColorGamut();
+ return mContext.getResources().getConfiguration().isScreenWideColorGamut();
}
@VisibleForTesting
diff --git a/src/com/android/settings/development/PointerLocationPreferenceController.java b/src/com/android/settings/development/PointerLocationPreferenceController.java
index 55c8fee..98298af 100644
--- a/src/com/android/settings/development/PointerLocationPreferenceController.java
+++ b/src/com/android/settings/development/PointerLocationPreferenceController.java
@@ -23,8 +23,11 @@
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 PointerLocationPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String POINTER_LOCATION_KEY = "pointer_location";
diff --git a/src/com/android/settings/development/ProfileGpuRenderingPreferenceController.java b/src/com/android/settings/development/ProfileGpuRenderingPreferenceController.java
new file mode 100644
index 0000000..d1f4484
--- /dev/null
+++ b/src/com/android/settings/development/ProfileGpuRenderingPreferenceController.java
@@ -0,0 +1,102 @@
+/*
+ * 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.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.development.SystemPropPoker;
+
+public class ProfileGpuRenderingPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String TRACK_FRAME_TIME_KEY = "track_frame_time";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public ProfileGpuRenderingPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.track_frame_time_values);
+ mListSummaries = context.getResources().getStringArray(R.array.track_frame_time_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return TRACK_FRAME_TIME_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeTrackFrameTimeOptions(newValue);
+ updateTrackFrameTimeOptions();
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateTrackFrameTimeOptions();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ }
+
+ private void writeTrackFrameTimeOptions(Object newValue) {
+ SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY,
+ newValue == null ? "" : newValue.toString());
+ SystemPropPoker.getInstance().poke();
+ }
+
+ private void updateTrackFrameTimeOptions() {
+ final String value = SystemProperties.get(
+ ThreadedRenderer.PROFILE_PROPERTY, "" /* default */);
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ if (TextUtils.equals(value, mListValues[i])) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ }
+}
diff --git a/src/com/android/settings/development/ResizableActivityPreferenceController.java b/src/com/android/settings/development/ResizableActivityPreferenceController.java
index 70be4b6..d192e11 100644
--- a/src/com/android/settings/development/ResizableActivityPreferenceController.java
+++ b/src/com/android/settings/development/ResizableActivityPreferenceController.java
@@ -23,8 +23,12 @@
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 ResizableActivityPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String FORCE_RESIZABLE_KEY = "force_resizable_activities";
diff --git a/src/com/android/settings/development/RtlLayoutPreferenceController.java b/src/com/android/settings/development/RtlLayoutPreferenceController.java
index 364ee9d..6729e76 100644
--- a/src/com/android/settings/development/RtlLayoutPreferenceController.java
+++ b/src/com/android/settings/development/RtlLayoutPreferenceController.java
@@ -25,9 +25,11 @@
import android.support.v7.preference.PreferenceScreen;
import com.android.internal.app.LocalePicker;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class RtlLayoutPreferenceController extends DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String FORCE_RTL_LAYOUT_KEY = "force_rtl_layout_all_locales";
diff --git a/src/com/android/settings/development/SecondaryDisplayPreferenceController.java b/src/com/android/settings/development/SecondaryDisplayPreferenceController.java
new file mode 100644
index 0000000..0e34148
--- /dev/null
+++ b/src/com/android/settings/development/SecondaryDisplayPreferenceController.java
@@ -0,0 +1,101 @@
+/*
+ * 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.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class SecondaryDisplayPreferenceController extends
+ DeveloperOptionsPreferenceController implements
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+ private static final String OVERLAY_DISPLAY_DEVICES_KEY = "overlay_display_devices";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public SecondaryDisplayPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.overlay_display_devices_values);
+ mListSummaries = context.getResources().getStringArray(
+ R.array.overlay_display_devices_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return OVERLAY_DISPLAY_DEVICES_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeSecondaryDisplayDevicesOption(newValue.toString());
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateSecondaryDisplayDevicesOptions();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeSecondaryDisplayDevicesOption(null);
+ mPreference.setEnabled(false);
+ }
+
+ private void updateSecondaryDisplayDevicesOptions() {
+ final String value = Settings.Global.getString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES);
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ if (TextUtils.equals(value, mListValues[i])) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ }
+
+ private void writeSecondaryDisplayDevicesOption(String newValue) {
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES, newValue);
+ updateSecondaryDisplayDevicesOptions();
+ }
+}
diff --git a/src/com/android/settings/development/SelectDebugAppPreferenceController.java b/src/com/android/settings/development/SelectDebugAppPreferenceController.java
index 162fe6d..1037f91 100644
--- a/src/com/android/settings/development/SelectDebugAppPreferenceController.java
+++ b/src/com/android/settings/development/SelectDebugAppPreferenceController.java
@@ -30,9 +30,13 @@
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
-public class SelectDebugAppPreferenceController extends DeveloperOptionsPreferenceController {
+public class SelectDebugAppPreferenceController extends
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin,
+ OnActivityResultListener {
private static final String DEBUG_APP_KEY = "debug_app";
diff --git a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
index 41fe6a3..59ac23f 100644
--- a/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
+++ b/src/com/android/settings/development/SelectUsbConfigPreferenceController.java
@@ -29,14 +29,17 @@
import android.text.TextUtils;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
import com.android.settingslib.core.lifecycle.events.OnDestroy;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class SelectUsbConfigPreferenceController extends
DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener, LifecycleObserver, OnCreate, OnDestroy {
+ Preference.OnPreferenceChangeListener, LifecycleObserver, OnCreate, OnDestroy,
+ PreferenceControllerMixin {
private static final String USB_CONFIGURATION_KEY = "select_usb_configuration";
diff --git a/src/com/android/settings/development/SetGpuRendererPreferenceController.java b/src/com/android/settings/development/SetGpuRendererPreferenceController.java
new file mode 100644
index 0000000..b19344c
--- /dev/null
+++ b/src/com/android/settings/development/SetGpuRendererPreferenceController.java
@@ -0,0 +1,102 @@
+/*
+ * 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.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.text.TextUtils;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+import com.android.settingslib.development.SystemPropPoker;
+
+public class SetGpuRendererPreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String DEBUG_HW_RENDERER_KEY = "debug_hw_renderer";
+
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public SetGpuRendererPreferenceController(Context context) {
+ super(context);
+
+ mListValues = context.getResources().getStringArray(R.array.debug_hw_renderer_values);
+ mListSummaries = context.getResources().getStringArray(R.array.debug_hw_renderer_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return DEBUG_HW_RENDERER_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeDebugHwRendererOptions(newValue);
+ updateDebugHwRendererOptions();
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateDebugHwRendererOptions();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ mPreference.setEnabled(false);
+ }
+
+ private void writeDebugHwRendererOptions(Object newValue) {
+ SystemProperties.set(ThreadedRenderer.DEBUG_RENDERER_PROPERTY,
+ newValue == null ? "" : newValue.toString());
+ SystemPropPoker.getInstance().poke();
+ }
+
+ private void updateDebugHwRendererOptions() {
+ final String value = SystemProperties.get(
+ ThreadedRenderer.DEBUG_RENDERER_PROPERTY, "" /* default */);
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ if (TextUtils.equals(value, mListValues[i])) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ }
+}
diff --git a/src/com/android/settings/development/ShortcutManagerThrottlingPreferenceController.java b/src/com/android/settings/development/ShortcutManagerThrottlingPreferenceController.java
index c8fdaec..a0e6592 100644
--- a/src/com/android/settings/development/ShortcutManagerThrottlingPreferenceController.java
+++ b/src/com/android/settings/development/ShortcutManagerThrottlingPreferenceController.java
@@ -26,9 +26,11 @@
import android.widget.Toast;
import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class ShortcutManagerThrottlingPreferenceController extends
- DeveloperOptionsPreferenceController {
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin {
private static final String TAG = "ShortcutMgrPrefCtrl";
@@ -56,16 +58,6 @@
return true;
}
- @Override
- protected void onDeveloperOptionsSwitchEnabled() {
- // intentional no-op
- }
-
- @Override
- protected void onDeveloperOptionsSwitchDisabled() {
- // intentional no-op
- }
-
private void resetShortcutManagerThrottling() {
if (mShortcutService == null) {
return;
diff --git a/src/com/android/settings/development/ShowLayoutBoundsPreferenceController.java b/src/com/android/settings/development/ShowLayoutBoundsPreferenceController.java
index fa13a58..ad4a44e 100644
--- a/src/com/android/settings/development/ShowLayoutBoundsPreferenceController.java
+++ b/src/com/android/settings/development/ShowLayoutBoundsPreferenceController.java
@@ -23,10 +23,12 @@
import android.support.v7.preference.PreferenceScreen;
import android.view.View;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.development.SystemPropPoker;
public class ShowLayoutBoundsPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String DEBUG_LAYOUT_KEY = "debug_layout";
diff --git a/src/com/android/settings/development/ShowSurfaceUpdatesPreferenceController.java b/src/com/android/settings/development/ShowSurfaceUpdatesPreferenceController.java
index 7c893be..1202759 100644
--- a/src/com/android/settings/development/ShowSurfaceUpdatesPreferenceController.java
+++ b/src/com/android/settings/development/ShowSurfaceUpdatesPreferenceController.java
@@ -26,8 +26,11 @@
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 ShowSurfaceUpdatesPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String SHOW_SCREEN_UPDATES_KEY = "show_screen_updates";
diff --git a/src/com/android/settings/development/ShowTapsPreferenceController.java b/src/com/android/settings/development/ShowTapsPreferenceController.java
index 6ac9c7e..ce7d4bd 100644
--- a/src/com/android/settings/development/ShowTapsPreferenceController.java
+++ b/src/com/android/settings/development/ShowTapsPreferenceController.java
@@ -23,8 +23,11 @@
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 ShowTapsPreferenceController extends DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String SHOW_TOUCHES_KEY = "show_touches";
diff --git a/src/com/android/settings/development/SimulateColorSpacePreferenceController.java b/src/com/android/settings/development/SimulateColorSpacePreferenceController.java
new file mode 100644
index 0000000..985e878
--- /dev/null
+++ b/src/com/android/settings/development/SimulateColorSpacePreferenceController.java
@@ -0,0 +1,145 @@
+/*
+ * 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.res.Resources;
+import android.provider.Settings;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.accessibility.AccessibilityManager;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class SimulateColorSpacePreferenceController extends
+ DeveloperOptionsPreferenceController implements
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
+
+ private static final String SIMULATE_COLOR_SPACE = "simulate_color_space";
+
+ @VisibleForTesting
+ static final int SETTING_VALUE_OFF = 0;
+ @VisibleForTesting
+ static final int SETTING_VALUE_ON = 1;
+
+ private ListPreference mPreference;
+
+ public SimulateColorSpacePreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return SIMULATE_COLOR_SPACE;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeSimulateColorSpace(newValue);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateSimulateColorSpace();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ public void onDeveloperOptionsDisabled() {
+ if (usingDevelopmentColorSpace()) {
+ writeSimulateColorSpace(-1);
+ }
+ mPreference.setEnabled(false);
+ }
+
+ private void updateSimulateColorSpace() {
+ final ContentResolver cr = mContext.getContentResolver();
+ final boolean enabled = Settings.Secure.getInt(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_OFF)
+ != SETTING_VALUE_OFF;
+ if (enabled) {
+ final String mode = Integer.toString(Settings.Secure.getInt(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
+ AccessibilityManager.DALTONIZER_DISABLED));
+ mPreference.setValue(mode);
+ final int index = mPreference.findIndexOfValue(mode);
+ if (index < 0) {
+ final Resources res = mContext.getResources();
+ // We're using a mode controlled by accessibility preferences.
+ mPreference.setSummary(res.getString(R.string.daltonizer_type_overridden,
+ res.getString(R.string.accessibility_display_daltonizer_preference_title)));
+ } else {
+ mPreference.setSummary("%s");
+ }
+ } else {
+ mPreference.setValue(
+ Integer.toString(AccessibilityManager.DALTONIZER_DISABLED));
+ }
+ }
+
+ private void writeSimulateColorSpace(Object value) {
+ final ContentResolver cr = mContext.getContentResolver();
+ final int newMode = Integer.parseInt(value.toString());
+ if (newMode < 0) {
+ Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
+ SETTING_VALUE_OFF);
+ } else {
+ Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
+ SETTING_VALUE_ON);
+ Settings.Secure.putInt(cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, newMode);
+ }
+ }
+
+ /**
+ * @return <code>true</code> if the color space preference is currently
+ * controlled by development settings
+ */
+ private boolean usingDevelopmentColorSpace() {
+ final ContentResolver cr = mContext.getContentResolver();
+ final boolean enabled = Settings.Secure.getInt(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_OFF)
+ != SETTING_VALUE_OFF;
+ if (enabled) {
+ final String mode = Integer.toString(Settings.Secure.getInt(
+ cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
+ AccessibilityManager.DALTONIZER_DISABLED));
+ final int index = mPreference.findIndexOfValue(mode);
+ if (index >= 0) {
+ // We're using a mode controlled by developer preferences.
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/src/com/android/settings/development/StayAwakePreferenceController.java b/src/com/android/settings/development/StayAwakePreferenceController.java
index 8e0d38c..c2e8a17 100644
--- a/src/com/android/settings/development/StayAwakePreferenceController.java
+++ b/src/com/android/settings/development/StayAwakePreferenceController.java
@@ -27,17 +27,19 @@
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.RestrictedSwitchPreference;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public class StayAwakePreferenceController extends DeveloperOptionsPreferenceController implements
Preference.OnPreferenceChangeListener, LifecycleObserver,
- OnResume, OnPause {
+ OnResume, OnPause, PreferenceControllerMixin {
private static final String TAG = "StayAwakeCtrl";
private static final String PREFERENCE_KEY = "keep_screen_on";
@@ -54,7 +56,6 @@
public StayAwakePreferenceController(Context context, Lifecycle lifecycle) {
super(context);
- mSettingsObserver = new SettingsObserver();
if (lifecycle != null) {
lifecycle.addObserver(this);
@@ -97,16 +98,21 @@
@Override
public void onResume() {
- if (mPreference != null) {
- mSettingsObserver.register(true /* register */);
+ if (mPreference == null) {
+ return;
}
+ if (mSettingsObserver == null) {
+ mSettingsObserver = new SettingsObserver();
+ }
+ mSettingsObserver.register(true /* register */);
}
@Override
public void onPause() {
- if (mPreference != null) {
- mSettingsObserver.register(false /* unregister */);
+ if (mPreference == null || mSettingsObserver == null) {
+ return;
}
+ mSettingsObserver.register(false /* unregister */);
}
@Override
diff --git a/src/com/android/settings/development/StrictModePreferenceController.java b/src/com/android/settings/development/StrictModePreferenceController.java
index 037f66e..7a4a069 100644
--- a/src/com/android/settings/development/StrictModePreferenceController.java
+++ b/src/com/android/settings/development/StrictModePreferenceController.java
@@ -25,11 +25,13 @@
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
-import android.text.TextUtils;
import android.view.IWindowManager;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
public class StrictModePreferenceController extends DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String STRICT_MODE_KEY = "strict_mode";
private static final String WINDOW_MANAGER_KEY = "window";
diff --git a/src/com/android/settings/development/TetheringHardwareAccelPreferenceController.java b/src/com/android/settings/development/TetheringHardwareAccelPreferenceController.java
index c54fc5b..ed14382 100644
--- a/src/com/android/settings/development/TetheringHardwareAccelPreferenceController.java
+++ b/src/com/android/settings/development/TetheringHardwareAccelPreferenceController.java
@@ -23,8 +23,12 @@
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 TetheringHardwareAccelPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String TETHERING_HARDWARE_OFFLOAD = "tethering_hardware_offload";
diff --git a/src/com/android/settings/development/TransitionAnimationScalePreferenceController.java b/src/com/android/settings/development/TransitionAnimationScalePreferenceController.java
new file mode 100644
index 0000000..dceb712
--- /dev/null
+++ b/src/com/android/settings/development/TransitionAnimationScalePreferenceController.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.development;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.IWindowManager;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class TransitionAnimationScalePreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String TRANSITION_ANIMATION_SCALE_KEY = "transition_animation_scale";
+
+ @VisibleForTesting
+ static final int TRANSITION_ANIMATION_SCALE_SELECTOR = 1;
+ @VisibleForTesting
+ static final float DEFAULT_VALUE = 1;
+
+ private final IWindowManager mWindowManager;
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+ private ListPreference mPreference;
+
+ public TransitionAnimationScalePreferenceController(Context context) {
+ super(context);
+
+ mWindowManager = IWindowManager.Stub.asInterface(
+ ServiceManager.getService(Context.WINDOW_SERVICE));
+ mListValues = context.getResources().getStringArray(
+ R.array.transition_animation_scale_values);
+ mListSummaries = context.getResources().getStringArray(
+ R.array.transition_animation_scale_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return TRANSITION_ANIMATION_SCALE_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeAnimationScaleOption(newValue);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateAnimationScaleValue();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeAnimationScaleOption(null);
+ mPreference.setEnabled(false);
+ }
+
+ private void writeAnimationScaleOption(Object newValue) {
+ try {
+ float scale = newValue != null ? Float.parseFloat(newValue.toString()) : DEFAULT_VALUE;
+ mWindowManager.setAnimationScale(TRANSITION_ANIMATION_SCALE_SELECTOR, scale);
+ updateAnimationScaleValue();
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+
+ private void updateAnimationScaleValue() {
+ try {
+ final float scale = mWindowManager.getAnimationScale(
+ TRANSITION_ANIMATION_SCALE_SELECTOR);
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ float val = Float.parseFloat(mListValues[i]);
+ if (scale <= val) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+}
diff --git a/src/com/android/settings/development/UsbAudioRoutingPreferenceController.java b/src/com/android/settings/development/UsbAudioRoutingPreferenceController.java
index 3cd2a2b..1e5febd 100644
--- a/src/com/android/settings/development/UsbAudioRoutingPreferenceController.java
+++ b/src/com/android/settings/development/UsbAudioRoutingPreferenceController.java
@@ -23,8 +23,11 @@
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 UsbAudioRoutingPreferenceController extends DeveloperOptionsPreferenceController
- implements Preference.OnPreferenceChangeListener {
+ implements Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String USB_AUDIO_KEY = "usb_audio";
diff --git a/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2.java b/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2.java
index 76c8669..6e3035e 100644
--- a/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2.java
+++ b/src/com/android/settings/development/VerifyAppsOverUsbPreferenceControllerV2.java
@@ -26,9 +26,11 @@
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;
@@ -38,7 +40,7 @@
*/
public class VerifyAppsOverUsbPreferenceControllerV2 extends
DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
- AdbOnChangeListener {
+ 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";
diff --git a/src/com/android/settings/development/WaitForDebuggerPreferenceController.java b/src/com/android/settings/development/WaitForDebuggerPreferenceController.java
index 2ca887a..ec259be 100644
--- a/src/com/android/settings/development/WaitForDebuggerPreferenceController.java
+++ b/src/com/android/settings/development/WaitForDebuggerPreferenceController.java
@@ -32,8 +32,12 @@
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
public class WaitForDebuggerPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin, OnActivityResultListener {
private static final String WAIT_FOR_DEBUGGER_KEY = "wait_for_debugger";
diff --git a/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java b/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java
index 61a98aa..d061281 100644
--- a/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java
+++ b/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java
@@ -18,7 +18,6 @@
import android.content.Context;
import android.content.pm.PackageInfo;
-import android.graphics.drawable.Drawable;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -27,10 +26,13 @@
import com.android.settings.R;
import com.android.settings.applications.defaultapps.DefaultAppInfo;
+import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.webview.WebViewUpdateServiceWrapper;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.settingslib.wrapper.PackageManagerWrapper;
-public class WebViewAppPreferenceControllerV2 extends DeveloperOptionsPreferenceController {
+public class WebViewAppPreferenceControllerV2 extends
+ DeveloperOptionsPreferenceController implements PreferenceControllerMixin {
private static final String TAG = "WebViewAppPrefCtrl";
private static final String WEBVIEW_APP_KEY = "select_webview_provider";
@@ -64,11 +66,9 @@
final CharSequence defaultAppLabel = getDefaultAppLabel();
if (!TextUtils.isEmpty(defaultAppLabel)) {
mPreference.setSummary(defaultAppLabel);
- mPreference.setIcon(getDefaultAppIcon());
} else {
Log.d(TAG, "No default app");
mPreference.setSummary(R.string.app_list_preference_none);
- mPreference.setIcon(null);
}
}
@@ -85,15 +85,10 @@
@VisibleForTesting
DefaultAppInfo getDefaultAppInfo() {
final PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage();
- return new DefaultAppInfo(mPackageManager,
+ return new DefaultAppInfo(mContext, mPackageManager,
currentPackage == null ? null : currentPackage.applicationInfo);
}
- private Drawable getDefaultAppIcon() {
- final DefaultAppInfo app = getDefaultAppInfo();
- return app.loadIcon();
- }
-
private CharSequence getDefaultAppLabel() {
final DefaultAppInfo app = getDefaultAppInfo();
return app.loadLabel();
diff --git a/src/com/android/settings/development/WifiAggressiveHandoverPreferenceController.java b/src/com/android/settings/development/WifiAggressiveHandoverPreferenceController.java
index 007d7d0..aa607ce 100644
--- a/src/com/android/settings/development/WifiAggressiveHandoverPreferenceController.java
+++ b/src/com/android/settings/development/WifiAggressiveHandoverPreferenceController.java
@@ -23,8 +23,12 @@
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 WifiAggressiveHandoverPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String WIFI_AGGRESSIVE_HANDOVER_KEY = "wifi_aggressive_handover";
diff --git a/src/com/android/settings/development/WifiDisplayCertificationPreferenceController.java b/src/com/android/settings/development/WifiDisplayCertificationPreferenceController.java
index 399d6d8..5de3071 100644
--- a/src/com/android/settings/development/WifiDisplayCertificationPreferenceController.java
+++ b/src/com/android/settings/development/WifiDisplayCertificationPreferenceController.java
@@ -23,9 +23,12 @@
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 WifiDisplayCertificationPreferenceController extends
DeveloperOptionsPreferenceController implements
- Preference.OnPreferenceChangeListener {
+ Preference.OnPreferenceChangeListener, PreferenceControllerMixin {
private static final String WIFI_DISPLAY_CERTIFICATION_KEY = "wifi_display_certification";
diff --git a/src/com/android/settings/development/WifiRoamScansPreferenceController.java b/src/com/android/settings/development/WifiRoamScansPreferenceController.java
index e9d2fd4..b3ff400 100644
--- a/src/com/android/settings/development/WifiRoamScansPreferenceController.java
+++ b/src/com/android/settings/development/WifiRoamScansPreferenceController.java
@@ -23,8 +23,12 @@
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 WifiRoamScansPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String WIFI_ALLOW_SCAN_WITH_TRAFFIC_KEY = "wifi_allow_scan_with_traffic";
diff --git a/src/com/android/settings/development/WifiVerboseLoggingPreferenceController.java b/src/com/android/settings/development/WifiVerboseLoggingPreferenceController.java
index 4a05d84..ad2b7eb 100644
--- a/src/com/android/settings/development/WifiVerboseLoggingPreferenceController.java
+++ b/src/com/android/settings/development/WifiVerboseLoggingPreferenceController.java
@@ -23,8 +23,12 @@
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 WifiVerboseLoggingPreferenceController extends
- DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener {
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
private static final String WIFI_VERBOSE_LOGGING_KEY = "wifi_verbose_logging";
diff --git a/src/com/android/settings/development/WindowAnimationScalePreferenceController.java b/src/com/android/settings/development/WindowAnimationScalePreferenceController.java
new file mode 100644
index 0000000..1a17fd2
--- /dev/null
+++ b/src/com/android/settings/development/WindowAnimationScalePreferenceController.java
@@ -0,0 +1,120 @@
+/*
+ * 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.RemoteException;
+import android.os.ServiceManager;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.IWindowManager;
+
+import com.android.settings.R;
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.development.DeveloperOptionsPreferenceController;
+
+public class WindowAnimationScalePreferenceController extends
+ DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener,
+ PreferenceControllerMixin {
+
+ private static final String WINDOW_ANIMATION_SCALE_KEY = "window_animation_scale";
+
+ @VisibleForTesting
+ static final int WINDOW_ANIMATION_SCALE_SELECTOR = 0;
+ @VisibleForTesting
+ static final float DEFAULT_VALUE = 1;
+
+ private final IWindowManager mWindowManager;
+ private final String[] mListValues;
+ private final String[] mListSummaries;
+
+ private ListPreference mPreference;
+
+ public WindowAnimationScalePreferenceController(Context context) {
+ super(context);
+
+ mWindowManager = IWindowManager.Stub.asInterface(
+ ServiceManager.getService(Context.WINDOW_SERVICE));
+ mListValues = context.getResources().getStringArray(R.array.window_animation_scale_values);
+ mListSummaries = context.getResources().getStringArray(
+ R.array.window_animation_scale_entries);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return WINDOW_ANIMATION_SCALE_KEY;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+
+ mPreference = (ListPreference) screen.findPreference(getPreferenceKey());
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ writeAnimationScaleOption(newValue);
+ return true;
+ }
+
+ @Override
+ public void updateState(Preference preference) {
+ updateAnimationScaleValue();
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchEnabled() {
+ mPreference.setEnabled(true);
+ }
+
+ @Override
+ protected void onDeveloperOptionsSwitchDisabled() {
+ writeAnimationScaleOption(null);
+ mPreference.setEnabled(false);
+ }
+
+ private void writeAnimationScaleOption(Object newValue) {
+ try {
+ float scale = newValue != null ? Float.parseFloat(newValue.toString()) : DEFAULT_VALUE;
+ mWindowManager.setAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR, scale);
+ updateAnimationScaleValue();
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+
+ private void updateAnimationScaleValue() {
+ try {
+ final float scale = mWindowManager.getAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR);
+ int index = 0; // default
+ for (int i = 0; i < mListValues.length; i++) {
+ float val = Float.parseFloat(mListValues[i]);
+ if (scale <= val) {
+ index = i;
+ break;
+ }
+ }
+ mPreference.setValue(mListValues[index]);
+ mPreference.setSummary(mListSummaries[index]);
+ } catch (RemoteException e) {
+ // intentional no-op
+ }
+ }
+}
diff --git a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
index 998e431..c482d87 100644
--- a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
+++ b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java
@@ -42,7 +42,7 @@
@Override
protected int getPreferenceScreenResId() {
- return R.xml.placeholder_prefs;
+ return R.xml.feature_flags_settings;
}
@Override
diff --git a/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java b/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java
new file mode 100644
index 0000000..ca4181e
--- /dev/null
+++ b/src/com/android/settings/development/qstile/DevelopmentTileConfigFragment.java
@@ -0,0 +1,53 @@
+/*
+ * 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.qstile;
+
+import android.content.Context;
+
+import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
+import com.android.settings.dashboard.DashboardFragment;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class DevelopmentTileConfigFragment extends DashboardFragment {
+ private static final String TAG = "DevelopmentTileConfig";
+
+ @Override
+ protected String getLogTag() {
+ return TAG;
+ }
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.development_tile_settings;
+ }
+
+ @Override
+ protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ final List<AbstractPreferenceController> controllers = new ArrayList<>();
+ controllers.add(new DevelopmentTilePreferenceController(context));
+ return controllers;
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.DEVELOPMENT_QS_TILE_CONFIG;
+ }
+}
diff --git a/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java b/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java
new file mode 100644
index 0000000..083a719
--- /dev/null
+++ b/src/com/android/settings/development/qstile/DevelopmentTilePreferenceController.java
@@ -0,0 +1,102 @@
+/*
+ * 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.qstile;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.service.quicksettings.TileService;
+import android.support.v14.preference.SwitchPreference;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.List;
+
+public class DevelopmentTilePreferenceController extends AbstractPreferenceController {
+
+ private final OnChangeHandler mOnChangeHandler;
+ private final PackageManager mPackageManager;
+
+ public DevelopmentTilePreferenceController(Context context) {
+ super(context);
+ mOnChangeHandler = new OnChangeHandler(context);
+ mPackageManager = context.getPackageManager();
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return null;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ Context context = screen.getContext();
+ Intent intent = new Intent(TileService.ACTION_QS_TILE)
+ .setPackage(context.getPackageName());
+ final List<ResolveInfo> resolveInfos = mPackageManager.queryIntentServices(intent,
+ PackageManager.MATCH_DISABLED_COMPONENTS);
+ for (ResolveInfo info : resolveInfos) {
+ ServiceInfo sInfo = info.serviceInfo;
+ final int enabledSetting = mPackageManager.getComponentEnabledSetting(
+ new ComponentName(sInfo.packageName, sInfo.name));
+ boolean checked = enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+ || ((enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT)
+ && sInfo.enabled);
+
+ SwitchPreference preference = new SwitchPreference(context);
+ preference.setTitle(sInfo.loadLabel(mPackageManager));
+ preference.setIcon(sInfo.icon);
+ preference.setKey(sInfo.name);
+ preference.setChecked(checked);
+ preference.setOnPreferenceChangeListener(mOnChangeHandler);
+ screen.addPreference(preference);
+ }
+ }
+
+ private static class OnChangeHandler implements Preference.OnPreferenceChangeListener {
+
+ private final Context mContext;
+ private final PackageManager mPackageManager;
+
+ public OnChangeHandler(Context context) {
+ mContext = context;
+ mPackageManager = context.getPackageManager();
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ ComponentName cn = new ComponentName(
+ mContext.getPackageName(), preference.getKey());
+ mPackageManager.setComponentEnabledSetting(cn, (Boolean) newValue
+ ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+ : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+ return true;
+ }
+ }
+}
diff --git a/src/com/android/settings/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java
similarity index 98%
rename from src/com/android/settings/qstile/DevelopmentTiles.java
rename to src/com/android/settings/development/qstile/DevelopmentTiles.java
index f05977b..bc3fcb5 100644
--- a/src/com/android/settings/qstile/DevelopmentTiles.java
+++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java
@@ -14,7 +14,7 @@
* the License.
*/
-package com.android.settings.qstile;
+package com.android.settings.development.qstile;
import android.os.RemoteException;
import android.os.SystemProperties;
diff --git a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
index 018a068..90d4c11 100644
--- a/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BasebandVersionPreferenceController.java
@@ -20,8 +20,8 @@
import android.support.v7.preference.Preference;
import com.android.settings.R;
-import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
public class BasebandVersionPreferenceController extends AbstractPreferenceController implements
diff --git a/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java b/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java
new file mode 100644
index 0000000..c37ff43
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/BatteryInfoPreferenceController.java
@@ -0,0 +1,104 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.support.annotation.VisibleForTesting;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.Utils;
+import com.android.settings.core.PreferenceControllerMixin;
+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;
+
+public class BatteryInfoPreferenceController extends AbstractPreferenceController
+ implements PreferenceControllerMixin, LifecycleObserver, OnStart, OnStop {
+
+ @VisibleForTesting
+ static final IntentFilter BATTERY_INFO_RECEIVER_INTENT_FILTER =
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ @VisibleForTesting
+ static final String KEY_BATTERY_STATUS = "battery_status";
+ @VisibleForTesting
+ static final String KEY_BATTERY_LEVEL = "battery_level";
+
+ @VisibleForTesting
+ BroadcastReceiver mBatteryInfoReceiver;
+ private Preference mBatteryStatus;
+ private Preference mBatteryLevel;
+
+
+ public BatteryInfoPreferenceController(Context context, Lifecycle lifecycle) {
+ super(context);
+ mBatteryInfoReceiver = new BatteryInfoReceiver(context);
+ if (lifecycle != null) {
+ lifecycle.addObserver(this);
+ }
+ }
+
+ @Override
+ public boolean isAvailable() {
+ return true;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return null;
+ }
+
+ @Override
+ public void displayPreference(PreferenceScreen screen) {
+ super.displayPreference(screen);
+ mBatteryLevel = screen.findPreference(KEY_BATTERY_LEVEL);
+ mBatteryStatus = screen.findPreference(KEY_BATTERY_STATUS);
+ }
+
+ @Override
+ public void onStart() {
+ mContext.registerReceiver(mBatteryInfoReceiver, BATTERY_INFO_RECEIVER_INTENT_FILTER);
+ }
+
+ @Override
+ public void onStop() {
+ mContext.unregisterReceiver(mBatteryInfoReceiver);
+ }
+
+ private class BatteryInfoReceiver extends BroadcastReceiver {
+
+ private final Context mContext;
+
+ public BatteryInfoReceiver(Context context) {
+ mContext = context;
+ }
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
+ mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent));
+ mBatteryStatus.setSummary(Utils.getBatteryStatus(mContext.getResources(), intent));
+ }
+ }
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/BluetoothAddressPreferenceController.java b/src/com/android/settings/deviceinfo/BluetoothAddressPreferenceController.java
new file mode 100644
index 0000000..431ead5
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/BluetoothAddressPreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.deviceinfo.AbstractBluetoothAddressPreferenceController;
+
+/**
+ * Concrete subclass of bluetooth address preference controller
+ */
+public class BluetoothAddressPreferenceController extends
+ AbstractBluetoothAddressPreferenceController implements PreferenceControllerMixin {
+ public BluetoothAddressPreferenceController(Context context, Lifecycle lifecycle) {
+ super(context, lifecycle);
+ }
+
+ // This space intentionally left blank
+}
diff --git a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
index ac318ff..2641f5d 100644
--- a/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/BuildNumberPreferenceController.java
@@ -35,7 +35,6 @@
import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
-import com.android.settings.development.DevelopmentSettings;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.password.ChooseLockSettingsHelper;
import com.android.settingslib.RestrictedLockUtils;
@@ -221,9 +220,5 @@
mDevHitToast = Toast.makeText(mContext, R.string.show_dev_on,
Toast.LENGTH_LONG);
mDevHitToast.show();
- // This is good time to index the Developer Options
- FeatureFactory.getFactory(mContext).getSearchFeatureProvider().getIndexingManager(mContext)
- .updateFromClassNameResource(DevelopmentSettings.class.getName(),
- true /* includeInSearchResults */);
}
}
diff --git a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
index f1dc415..e7fab5a 100644
--- a/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/DeviceModelPreferenceController.java
@@ -21,7 +21,10 @@
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
+import com.android.settings.DeviceInfoSettings;
+import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.DeviceInfoUtils;
import com.android.settingslib.core.AbstractPreferenceController;
@@ -48,7 +51,12 @@
super.displayPreference(screen);
final Preference pref = screen.findPreference(KEY_DEVICE_MODEL);
if (pref != null) {
- pref.setSummary(getDeviceModel());
+ if (FeatureFlagUtils.isEnabled(DeviceInfoSettings.DEVICE_INFO_V2_FEATURE_FLAG)) {
+ pref.setSummary(mContext.getResources().getString(R.string.model_summary,
+ getDeviceModel()));
+ } else {
+ pref.setSummary(getDeviceModel());
+ }
}
}
diff --git a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
index 60082c7..3d825b9 100644
--- a/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
+++ b/src/com/android/settings/deviceinfo/HardwareInfoDialogFragment.java
@@ -18,15 +18,18 @@
import android.app.AlertDialog;
import android.app.Dialog;
+import android.os.Build;
import android.os.Bundle;
import android.os.SystemProperties;
import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
+import android.util.FeatureFlagUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.DeviceInfoSettings;
import com.android.settings.R;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
@@ -54,6 +57,15 @@
// Model
setText(content, R.id.model_label, R.id.model_value,
DeviceModelPreferenceController.getDeviceModel());
+
+ // Serial number
+ if (FeatureFlagUtils.isEnabled(DeviceInfoSettings.DEVICE_INFO_V2_FEATURE_FLAG)) {
+ setText(content, R.id.serial_number_label, R.id.serial_number_value, getSerialNumber());
+ } else {
+ content.findViewById(R.id.serial_number_label).setVisibility(View.GONE);
+ content.findViewById(R.id.serial_number_value).setVisibility(View.GONE);
+ }
+
// Hardware rev
setText(content, R.id.hardware_rev_label, R.id.hardware_rev_value,
SystemProperties.get("ro.boot.hardware.revision"));
@@ -77,4 +89,9 @@
valueView.setVisibility(View.GONE);
}
}
+
+ @VisibleForTesting
+ String getSerialNumber() {
+ return Build.getSerial();
+ }
}
diff --git a/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java
new file mode 100644
index 0000000..f564734
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/ImeiInfoPreferenceController.java
@@ -0,0 +1,37 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
+
+public class ImeiInfoPreferenceController extends AbstractSimStatusImeiInfoPreferenceController
+ implements PreferenceControllerMixin {
+
+ private static final String KEY_IMEI_INFO = "imei_info";
+
+ public ImeiInfoPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY_IMEI_INFO;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/ImsStatusPreferenceController.java b/src/com/android/settings/deviceinfo/ImsStatusPreferenceController.java
new file mode 100644
index 0000000..07bd4a6
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/ImsStatusPreferenceController.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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.deviceinfo.AbstractImsStatusPreferenceController;
+
+/**
+ * Concrete subclass of IMS status preference controller
+ */
+public class ImsStatusPreferenceController extends AbstractImsStatusPreferenceController
+ implements PreferenceControllerMixin {
+ public ImsStatusPreferenceController(Context context,
+ Lifecycle lifecycle) {
+ super(context, lifecycle);
+ }
+
+ // This space intentionally left blank
+}
diff --git a/src/com/android/settings/deviceinfo/IpAddressPreferenceController.java b/src/com/android/settings/deviceinfo/IpAddressPreferenceController.java
new file mode 100644
index 0000000..f4e2f8c
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/IpAddressPreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.deviceinfo.AbstractIpAddressPreferenceController;
+
+/**
+ * Concrete subclass of IP address preference controller
+ */
+public class IpAddressPreferenceController extends AbstractIpAddressPreferenceController implements
+ PreferenceControllerMixin {
+ public IpAddressPreferenceController(Context context, Lifecycle lifecycle) {
+ super(context, lifecycle);
+ }
+
+ // This space intentionally left blank
+}
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 04da586..f3ef4c7 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -19,7 +19,6 @@
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
-import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
@@ -57,7 +56,7 @@
import com.android.settings.Settings.StorageUseActivity;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
import com.android.settings.deviceinfo.StorageSettings.MountTask;
import com.android.settingslib.deviceinfo.StorageMeasurement;
diff --git a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
index 31b905e..e466bbf 100644
--- a/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/SerialNumberPreferenceController.java
@@ -24,7 +24,10 @@
/**
* Preference controller for displaying device serial number. Wraps {@link Build#getSerial()}.
+ *
+ * deprecated because this preference is no longer used in About Phone V2
*/
+@Deprecated
public class SerialNumberPreferenceController extends
AbstractSerialNumberPreferenceController implements
PreferenceControllerMixin {
diff --git a/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java
new file mode 100644
index 0000000..99441b5
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/SimStatusPreferenceController.java
@@ -0,0 +1,37 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
+
+public class SimStatusPreferenceController extends AbstractSimStatusImeiInfoPreferenceController
+ implements PreferenceControllerMixin {
+
+ private static final String KEY_SIM_STATUS = "sim_status";
+
+ public SimStatusPreferenceController(Context context) {
+ super(context);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return KEY_SIM_STATUS;
+ }
+}
diff --git a/src/com/android/settings/deviceinfo/Status.java b/src/com/android/settings/deviceinfo/Status.java
index 228774f..ffdaca9 100644
--- a/src/com/android/settings/deviceinfo/Status.java
+++ b/src/com/android/settings/deviceinfo/Status.java
@@ -16,200 +16,26 @@
package com.android.settings.deviceinfo;
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.res.Resources;
-import android.net.ConnectivityManager;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.PersistableBundle;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.UserManager;
import android.provider.SearchIndexableResource;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.PreferenceScreen;
-import android.telephony.CarrierConfigManager;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.util.ArrayUtils;
import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.Utils;
+import com.android.settings.dashboard.DashboardFragment;
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.lang.ref.WeakReference;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
-import static android.content.Context.CONNECTIVITY_SERVICE;
-import static android.content.Context.WIFI_SERVICE;
+/**
+ * Fragment for showing device hardware info, such as MAC addresses and serial numbers
+ */
+public class Status extends DashboardFragment {
-public class Status extends SettingsPreferenceFragment implements Indexable {
-
- private static final String KEY_BATTERY_STATUS = "battery_status";
- private static final String KEY_BATTERY_LEVEL = "battery_level";
- private static final String KEY_IP_ADDRESS = "wifi_ip_address";
- private static final String KEY_WIFI_MAC_ADDRESS = "wifi_mac_address";
- private static final String KEY_BT_ADDRESS = "bt_address";
- private static final String KEY_WIMAX_MAC_ADDRESS = "wimax_mac_address";
- private static final String KEY_SIM_STATUS = "sim_status";
- private static final String KEY_IMEI_INFO = "imei_info";
- private static final String KEY_IMS_REGISTRATION_STATE = "ims_reg_state";
-
- // Broadcasts to listen to for connectivity changes.
- private static final String[] CONNECTIVITY_INTENTS = {
- BluetoothAdapter.ACTION_STATE_CHANGED,
- ConnectivityManager.CONNECTIVITY_ACTION,
- WifiManager.LINK_CONFIGURATION_CHANGED_ACTION,
- WifiManager.NETWORK_STATE_CHANGED_ACTION,
- };
-
- private static final int EVENT_UPDATE_STATS = 500;
-
- private static final int EVENT_UPDATE_CONNECTIVITY = 600;
-
- private ConnectivityManager mCM;
- private WifiManager mWifiManager;
-
- private Resources mRes;
-
- private String mUnavailable;
-
- private SerialNumberPreferenceController mSerialNumberPreferenceController;
-
- private Preference mUptime;
- private Preference mBatteryStatus;
- private Preference mBatteryLevel;
- private Preference mBtAddress;
- private Preference mIpAddress;
- private Preference mWifiMacAddress;
- private Preference mWimaxMacAddress;
- private Preference mImsStatus;
-
- private Handler mHandler;
-
- private static class MyHandler extends Handler {
- private WeakReference<Status> mStatus;
-
- public MyHandler(Status activity) {
- mStatus = new WeakReference<Status>(activity);
- }
-
- @Override
- public void handleMessage(Message msg) {
- Status status = mStatus.get();
- if (status == null) {
- return;
- }
-
- switch (msg.what) {
- case EVENT_UPDATE_STATS:
- status.updateTimes();
- sendEmptyMessageDelayed(EVENT_UPDATE_STATS, 1000);
- break;
-
- case EVENT_UPDATE_CONNECTIVITY:
- status.updateConnectivity();
- break;
- }
- }
- }
-
- private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
-
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
- mBatteryLevel.setSummary(Utils.getBatteryPercentage(intent));
- mBatteryStatus.setSummary(Utils.getBatteryStatus(getResources(), intent));
- }
- }
- };
-
- private IntentFilter mConnectivityIntentFilter;
- private final BroadcastReceiver mConnectivityReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- String action = intent.getAction();
- if (ArrayUtils.contains(CONNECTIVITY_INTENTS, action)) {
- mHandler.sendEmptyMessage(EVENT_UPDATE_CONNECTIVITY);
- }
- }
- };
-
- private boolean hasBluetooth() {
- return BluetoothAdapter.getDefaultAdapter() != null;
- }
-
- private boolean hasWimax() {
- return mCM.getNetworkInfo(ConnectivityManager.TYPE_WIMAX) != null;
- }
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- mHandler = new MyHandler(this);
-
- mCM = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
- mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
- mSerialNumberPreferenceController = new SerialNumberPreferenceController(getActivity());
-
- addPreferencesFromResource(R.xml.device_info_status);
- mBatteryLevel = findPreference(KEY_BATTERY_LEVEL);
- mBatteryStatus = findPreference(KEY_BATTERY_STATUS);
- mBtAddress = findPreference(KEY_BT_ADDRESS);
- mWifiMacAddress = findPreference(KEY_WIFI_MAC_ADDRESS);
- mWimaxMacAddress = findPreference(KEY_WIMAX_MAC_ADDRESS);
- mIpAddress = findPreference(KEY_IP_ADDRESS);
- mImsStatus = findPreference(KEY_IMS_REGISTRATION_STATE);
-
- mRes = getResources();
- mUnavailable = mRes.getString(R.string.status_unavailable);
-
- // Note - missing in zaku build, be careful later...
- mUptime = findPreference("up_time");
- final PreferenceScreen screen = getPreferenceScreen();
- if (!hasBluetooth()) {
- screen.removePreference(mBtAddress);
- mBtAddress = null;
- }
-
- if (!hasWimax()) {
- screen.removePreference(mWimaxMacAddress);
- mWimaxMacAddress = null;
- }
-
- mConnectivityIntentFilter = new IntentFilter();
- for (String intent: CONNECTIVITY_INTENTS) {
- mConnectivityIntentFilter.addAction(intent);
- }
-
- updateConnectivity();
-
- mSerialNumberPreferenceController.displayPreference(screen);
-
- // Remove SimStatus and Imei for Secondary user as it access Phone b/19165700
- // Also remove on Wi-Fi only devices.
- //TODO: the bug above will surface in split system user mode.
- if (!UserManager.get(getContext()).isAdminUser()
- || Utils.isWifiOnly(getContext())) {
- removePreferenceFromScreen(KEY_SIM_STATUS);
- removePreferenceFromScreen(KEY_IMEI_INFO);
- }
- }
+ private static final String TAG = "DeviceStatus";
@Override
public int getMetricsCategory() {
@@ -217,123 +43,33 @@
}
@Override
- public void onResume() {
- super.onResume();
- getContext().registerReceiver(mConnectivityReceiver, mConnectivityIntentFilter,
- android.Manifest.permission.CHANGE_NETWORK_STATE, null);
- getContext().registerReceiver(mBatteryInfoReceiver,
- new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- mHandler.sendEmptyMessage(EVENT_UPDATE_STATS);
+ protected String getLogTag() {
+ return TAG;
}
@Override
- public void onPause() {
- super.onPause();
-
- getContext().unregisterReceiver(mBatteryInfoReceiver);
- getContext().unregisterReceiver(mConnectivityReceiver);
- mHandler.removeMessages(EVENT_UPDATE_STATS);
+ protected int getPreferenceScreenResId() {
+ return R.xml.device_info_status;
}
- /**
- * Removes the specified preference, if it exists.
- * @param key the key for the Preference item
- */
- private void removePreferenceFromScreen(String key) {
- Preference pref = findPreference(key);
- if (pref != null) {
- getPreferenceScreen().removePreference(pref);
- }
+ @Override
+ protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
+ return buildPreferenceControllers(context, getLifecycle());
}
- private void setWimaxStatus() {
- if (mWimaxMacAddress != null) {
- String macAddress = SystemProperties.get("net.wimax.mac.address", mUnavailable);
- mWimaxMacAddress.setSummary(macAddress);
- }
- }
-
- private void setWifiStatus() {
- WifiInfo wifiInfo = mWifiManager.getConnectionInfo();
- boolean hasMacAddress = wifiInfo != null && wifiInfo.hasRealMacAddress();
- String macAddress = hasMacAddress ? wifiInfo.getMacAddress() : null;
- mWifiMacAddress.setSummary(!TextUtils.isEmpty(macAddress) ? macAddress : mUnavailable);
- }
-
- private void setIpAddressStatus() {
- String ipAddress = Utils.getDefaultIpAddresses(this.mCM);
- if (ipAddress != null) {
- mIpAddress.setSummary(ipAddress);
- } else {
- mIpAddress.setSummary(mUnavailable);
- }
- }
-
- private void setBtStatus() {
- BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
- if (bluetooth != null && mBtAddress != null) {
- String address = bluetooth.isEnabled() ? bluetooth.getAddress() : null;
- if (!TextUtils.isEmpty(address)) {
- // Convert the address to lowercase for consistency with the wifi MAC address.
- mBtAddress.setSummary(address.toLowerCase());
- } else {
- mBtAddress.setSummary(mUnavailable);
- }
- }
- }
-
- private void setImsRegistrationStatus() {
- CarrierConfigManager configManager = (CarrierConfigManager)
- getSystemService(Context.CARRIER_CONFIG_SERVICE);
- int subId = SubscriptionManager.getDefaultDataSubscriptionId();
- PersistableBundle config = null;
- if (configManager != null) {
- config = configManager.getConfigForSubId(subId);
- }
- if (config != null && config.getBoolean(
- CarrierConfigManager.KEY_SHOW_IMS_REGISTRATION_STATUS_BOOL)) {
- TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
- mImsStatus.setSummary((tm != null && tm.isImsRegistered(subId)) ?
- R.string.ims_reg_status_registered : R.string.ims_reg_status_not_registered);
- } else {
- removePreferenceFromScreen(KEY_IMS_REGISTRATION_STATE);
- mImsStatus = null;
- }
- }
-
- void updateConnectivity() {
- setWimaxStatus();
- setWifiStatus();
- setBtStatus();
- setIpAddressStatus();
- setImsRegistrationStatus();
- }
-
- void updateTimes() {
- long at = SystemClock.uptimeMillis() / 1000;
- long ut = SystemClock.elapsedRealtime() / 1000;
-
- if (ut == 0) {
- ut = 1;
- }
-
- mUptime.setSummary(convert(ut));
- }
-
- private String pad(int n) {
- if (n >= 10) {
- return String.valueOf(n);
- } else {
- return "0" + String.valueOf(n);
- }
- }
-
- private String convert(long t) {
- int s = (int)(t % 60);
- int m = (int)((t / 60) % 60);
- int h = (int)((t / 3600));
-
- return h + ":" + pad(m) + ":" + pad(s);
+ private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
+ Lifecycle lifecycle) {
+ final List<AbstractPreferenceController> controllers = new ArrayList<>();
+ controllers.add(new SerialNumberPreferenceController(context));
+ controllers.add(new UptimePreferenceController(context, lifecycle));
+ controllers.add(new BluetoothAddressPreferenceController(context, lifecycle));
+ controllers.add(new IpAddressPreferenceController(context, lifecycle));
+ controllers.add(new WifiMacAddressPreferenceController(context, lifecycle));
+ controllers.add(new ImsStatusPreferenceController(context, lifecycle));
+ controllers.add(new SimStatusPreferenceController(context));
+ controllers.add(new ImeiInfoPreferenceController(context));
+ controllers.add(new BatteryInfoPreferenceController(context, lifecycle));
+ return controllers;
}
/**
@@ -349,5 +85,11 @@
sir.xmlResId = R.xml.device_info_status;
return Arrays.asList(sir);
}
+
+ @Override
+ public List<AbstractPreferenceController> getPreferenceControllers(Context
+ context) {
+ return buildPreferenceControllers(context, null /* lifecycle */);
+ }
};
}
diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java
index 01903c0..a3ed940 100644
--- a/src/com/android/settings/deviceinfo/StorageSettings.java
+++ b/src/com/android/settings/deviceinfo/StorageSettings.java
@@ -93,6 +93,8 @@
private StorageSummaryPreference mInternalSummary;
private static long sTotalInternalStorage;
+ private boolean mHasLaunchedPrivateVolumeSettings = false;
+
@Override
public int getMetricsCategory() {
return MetricsEvent.DEVICEINFO_STORAGE;
@@ -110,7 +112,6 @@
final Context context = getActivity();
mStorageManager = context.getSystemService(StorageManager.class);
- mStorageManager.registerListener(mStorageListener);
if (sTotalInternalStorage <= 0) {
sTotalInternalStorage = mStorageManager.getPrimaryStorageSize();
@@ -231,14 +232,17 @@
if (mInternalCategory.getPreferenceCount() == 2
&& mExternalCategory.getPreferenceCount() == 0) {
// Only showing primary internal storage, so just shortcut
- final Bundle args = new Bundle();
- args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
- Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
- StorageDashboardFragment.class.getName(), args, null,
- R.string.storage_settings, null, false, getMetricsCategory());
- intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
- getActivity().startActivity(intent);
- finish();
+ if (!mHasLaunchedPrivateVolumeSettings) {
+ mHasLaunchedPrivateVolumeSettings = true;
+ final Bundle args = new Bundle();
+ args.putString(VolumeInfo.EXTRA_VOLUME_ID, VolumeInfo.ID_PRIVATE_INTERNAL);
+ Intent intent = Utils.onBuildStartFragmentIntent(getActivity(),
+ StorageDashboardFragment.class.getName(), args, null,
+ R.string.storage_settings, null, false, getMetricsCategory());
+ intent.putExtra(SettingsDrawerActivity.EXTRA_SHOW_MENU, true);
+ getActivity().startActivity(intent);
+ finish();
+ }
}
}
diff --git a/src/com/android/settings/deviceinfo/UptimePreferenceController.java b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
new file mode 100644
index 0000000..8bb0df7
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/UptimePreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.deviceinfo.AbstractUptimePreferenceController;
+
+/**
+ * Concrete subclass of uptime preference controller
+ */
+public class UptimePreferenceController extends AbstractUptimePreferenceController
+ implements PreferenceControllerMixin {
+ public UptimePreferenceController(Context context, Lifecycle lifecycle) {
+ super(context, lifecycle);
+ }
+
+ // This space intentionally left blank
+}
diff --git a/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java b/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java
new file mode 100644
index 0000000..92390d7
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/WifiMacAddressPreferenceController.java
@@ -0,0 +1,35 @@
+/*
+ * 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.deviceinfo;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.lifecycle.Lifecycle;
+import com.android.settingslib.deviceinfo.AbstractWifiMacAddressPreferenceController;
+
+/**
+ * Concrete subclass of WIFI MAC address preference controller
+ */
+public class WifiMacAddressPreferenceController extends AbstractWifiMacAddressPreferenceController
+ implements PreferenceControllerMixin {
+ public WifiMacAddressPreferenceController(Context context, Lifecycle lifecycle) {
+ super(context, lifecycle);
+ }
+
+ // This space intentionally left blank
+}
diff --git a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
index 7f2cc33..1149b99 100644
--- a/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceController.java
@@ -36,7 +36,7 @@
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.Utils;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.deviceinfo.PrivateVolumeSettings.SystemInfoFragment;
diff --git a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
index 280098d..2fb538e 100644
--- a/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceController.java
@@ -94,7 +94,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
AmbientDisplaySettings.class.getName(), KEY_ALWAYS_ON,
mContext.getString(R.string.ambient_display_screen_title));
diff --git a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
index c1af133..68a21ce 100644
--- a/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
+++ b/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceController.java
@@ -13,6 +13,9 @@
*/
package com.android.settings.display;
+import static android.provider.Settings.Secure.DOZE_ENABLED;
+import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
+
import android.content.Context;
import android.content.Intent;
import android.os.UserHandle;
@@ -30,9 +33,6 @@
import com.android.settings.search.ResultPayload;
import com.android.settingslib.core.AbstractPreferenceController;
-import static android.provider.Settings.Secure.DOZE_ENABLED;
-import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
-
public class AmbientDisplayNotificationsPreferenceController extends
AbstractPreferenceController implements PreferenceControllerMixin,
Preference.OnPreferenceChangeListener {
@@ -86,7 +86,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
AmbientDisplaySettings.class.getName(), KEY_AMBIENT_DISPLAY_NOTIFICATIONS,
mContext.getString(R.string.ambient_display_screen_title));
diff --git a/src/com/android/settings/display/AppGridView.java b/src/com/android/settings/display/AppGridView.java
index 2d52ef2..4b814d0 100644
--- a/src/com/android/settings/display/AppGridView.java
+++ b/src/com/android/settings/display/AppGridView.java
@@ -16,20 +16,23 @@
package com.android.settings.display;
-import com.android.settings.R;
-
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
+import android.os.UserHandle;
+import android.support.annotation.VisibleForTesting;
import android.util.AttributeSet;
+import android.util.IconDrawableFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.widget.ImageView;
+import com.android.settings.R;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -63,7 +66,8 @@
/**
* Loads application labels and icons.
*/
- private static class AppsAdapter extends ArrayAdapter<ActivityEntry> {
+ @VisibleForTesting
+ public static class AppsAdapter extends ArrayAdapter<ActivityEntry> {
private final PackageManager mPackageManager;
private final int mIconResId;
@@ -80,9 +84,8 @@
public View getView(int position, View convertView, ViewGroup parent) {
final View view = super.getView(position, convertView, parent);
final ActivityEntry entry = getItem(position);
- final ImageView iconView = (ImageView) view.findViewById(mIconResId);
- final Drawable icon = entry.info.loadIcon(mPackageManager);
- iconView.setImageDrawable(icon);
+ final ImageView iconView = view.findViewById(mIconResId);
+ iconView.setImageDrawable(entry.getIcon());
return view;
}
@@ -108,10 +111,11 @@
final PackageManager pm = mPackageManager;
final ArrayList<ActivityEntry> results = new ArrayList<>();
final List<ResolveInfo> infos = pm.queryIntentActivities(mainIntent, 0);
+ final IconDrawableFactory iconFactory = IconDrawableFactory.newInstance(getContext());
for (ResolveInfo info : infos) {
final CharSequence label = info.loadLabel(pm);
if (label != null) {
- results.add(new ActivityEntry(info, label.toString()));
+ results.add(new ActivityEntry(info, label.toString(), iconFactory));
}
}
@@ -124,13 +128,19 @@
/**
* Class used for caching the activity label and icon.
*/
- private static class ActivityEntry implements Comparable<ActivityEntry> {
+ @VisibleForTesting
+ public static class ActivityEntry implements Comparable<ActivityEntry> {
+
public final ResolveInfo info;
public final String label;
+ private final IconDrawableFactory mIconFactory;
+ private final int mUserId;
- public ActivityEntry(ResolveInfo info, String label) {
+ public ActivityEntry(ResolveInfo info, String label, IconDrawableFactory iconFactory) {
this.info = info;
this.label = label;
+ mIconFactory = iconFactory;
+ mUserId = UserHandle.myUserId();
}
@Override
@@ -142,5 +152,10 @@
public String toString() {
return label;
}
+
+ public Drawable getIcon() {
+ return mIconFactory.getBadgedIcon(
+ info.activityInfo, info.activityInfo.applicationInfo, mUserId);
+ }
}
}
diff --git a/src/com/android/settings/display/AutoBrightnessPreferenceController.java b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
index e74a1a0..f242022 100644
--- a/src/com/android/settings/display/AutoBrightnessPreferenceController.java
+++ b/src/com/android/settings/display/AutoBrightnessPreferenceController.java
@@ -73,7 +73,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
DisplaySettings.class.getName(), mAutoBrightnessKey,
mContext.getString(R.string.display_settings));
diff --git a/src/com/android/settings/display/ColorModePreferenceController.java b/src/com/android/settings/display/ColorModePreferenceController.java
index 2d669d0..2ab2ec9 100644
--- a/src/com/android/settings/display/ColorModePreferenceController.java
+++ b/src/com/android/settings/display/ColorModePreferenceController.java
@@ -18,36 +18,24 @@
import android.os.Parcel;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemProperties;
-import android.support.v7.preference.Preference;
-import android.support.v7.preference.TwoStatePreference;
import android.util.Log;
+
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
public class ColorModePreferenceController extends AbstractPreferenceController implements
- PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
+ PreferenceControllerMixin {
private static final String TAG = "ColorModePreference";
-
private static final String KEY_COLOR_MODE = "color_mode";
- @VisibleForTesting
- static final float COLOR_SATURATION_DEFAULT = 1.0f;
- @VisibleForTesting
- static final float COLOR_SATURATION_VIVID = 1.1f;
+ private static final int SURFACE_FLINGER_TRANSACTION_QUERY_WIDE_COLOR = 1024;
- private static final int SURFACE_FLINGER_TRANSACTION_SATURATION = 1022;
- @VisibleForTesting
- static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation";
-
- private final IBinder mSurfaceFlinger;
private final ConfigurationWrapper mConfigWrapper;
public ColorModePreferenceController(Context context) {
super(context);
- mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
- mConfigWrapper = new ConfigurationWrapper(context);
+ mConfigWrapper = new ConfigurationWrapper();
}
@Override
@@ -56,64 +44,35 @@
}
@Override
- public void updateState(Preference preference) {
- TwoStatePreference colorMode = (TwoStatePreference) preference;
- colorMode.setChecked(getSaturationValue() > 1.0f);
- }
-
- @Override
public boolean isAvailable() {
return mConfigWrapper.isScreenWideColorGamut();
}
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- float saturation = (boolean) newValue
- ? COLOR_SATURATION_VIVID : COLOR_SATURATION_DEFAULT;
-
- SystemProperties.set(PERSISTENT_PROPERTY_SATURATION, Float.toString(saturation));
- applySaturation(saturation);
-
- return true;
- }
-
- /**
- * Propagates the provided saturation to the SurfaceFlinger.
- */
- private void applySaturation(float saturation) {
- if (mSurfaceFlinger != null) {
- final Parcel data = Parcel.obtain();
- data.writeInterfaceToken("android.ui.ISurfaceComposer");
- data.writeFloat(saturation);
- try {
- mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_SATURATION, data, null, 0);
- } catch (RemoteException ex) {
- Log.e(TAG, "Failed to set saturation", ex);
- } finally {
- data.recycle();
- }
- }
- }
-
- private static float getSaturationValue() {
- try {
- return Float.parseFloat(SystemProperties.get(
- PERSISTENT_PROPERTY_SATURATION, Float.toString(COLOR_SATURATION_DEFAULT)));
- } catch (NumberFormatException e) {
- return COLOR_SATURATION_DEFAULT;
- }
- }
-
@VisibleForTesting
static class ConfigurationWrapper {
- private final Context mContext;
+ private final IBinder mSurfaceFlinger;
- ConfigurationWrapper(Context context) {
- mContext = context;
+ ConfigurationWrapper() {
+ mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
}
boolean isScreenWideColorGamut() {
- return mContext.getResources().getConfiguration().isScreenWideColorGamut();
+ if (mSurfaceFlinger != null) {
+ final Parcel data = Parcel.obtain();
+ final Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken("android.ui.ISurfaceComposer");
+ try {
+ mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_QUERY_WIDE_COLOR,
+ data, reply, 0);
+ return reply.readBoolean();
+ } catch (RemoteException ex) {
+ Log.e(TAG, "Failed to query wide color support", ex);
+ } finally {
+ data.recycle();
+ reply.recycle();
+ }
+ }
+ return false;
}
}
}
diff --git a/src/com/android/settings/display/ColorModePreferenceFragment.java b/src/com/android/settings/display/ColorModePreferenceFragment.java
new file mode 100644
index 0000000..7c8b841
--- /dev/null
+++ b/src/com/android/settings/display/ColorModePreferenceFragment.java
@@ -0,0 +1,207 @@
+/*
+ * 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.display;
+
+import android.app.ActivityManager;
+import android.app.IActivityManager;
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.android.settings.R;
+import com.android.settings.widget.RadioButtonPickerFragment;
+
+import java.util.Arrays;
+import java.util.List;
+
+@SuppressWarnings("WeakerAccess")
+public class ColorModePreferenceFragment extends RadioButtonPickerFragment {
+ private static final String TAG = "ColorModePreferenceFragment";
+
+ @VisibleForTesting
+ static final float COLOR_SATURATION_NATURAL = 1.0f;
+ @VisibleForTesting
+ static final float COLOR_SATURATION_BOOSTED = 1.1f;
+
+ private static final int SURFACE_FLINGER_TRANSACTION_SATURATION = 1022;
+ private static final int SURFACE_FLINGER_TRANSACTION_NATIVE_MODE = 1023;
+
+ @VisibleForTesting
+ static final String PERSISTENT_PROPERTY_SATURATION = "persist.sys.sf.color_saturation";
+ @VisibleForTesting
+ static final String PERSISTENT_PROPERTY_NATIVE_MODE = "persist.sys.sf.native_mode";
+
+ @VisibleForTesting
+ static final String KEY_COLOR_MODE_NATURAL = "color_mode_natural";
+ @VisibleForTesting
+ static final String KEY_COLOR_MODE_BOOSTED = "color_mode_boosted";
+ @VisibleForTesting
+ static final String KEY_COLOR_MODE_SATURATED = "color_mode_saturated";
+
+ private IBinder mSurfaceFlinger;
+ private IActivityManager mActivityManager;
+
+ @Override
+ public void onAttach(Context context) {
+ super.onAttach(context);
+ mSurfaceFlinger = ServiceManager.getService("SurfaceFlinger");
+ mActivityManager = ActivityManager.getService();
+ }
+
+ @Override
+ protected List<? extends CandidateInfo> getCandidates() {
+ Context c = getContext();
+ return Arrays.asList(
+ new ColorModeCandidateInfo(c.getString(R.string.color_mode_option_natural),
+ KEY_COLOR_MODE_NATURAL),
+ new ColorModeCandidateInfo(c.getString(R.string.color_mode_option_boosted),
+ KEY_COLOR_MODE_BOOSTED),
+ new ColorModeCandidateInfo(c.getString(R.string.color_mode_option_saturated),
+ KEY_COLOR_MODE_SATURATED)
+ );
+ }
+
+ @Override
+ protected String getDefaultKey() {
+ if (isNativeModeEnabled()) {
+ return KEY_COLOR_MODE_SATURATED;
+ }
+ if (getSaturationValue() > COLOR_SATURATION_NATURAL) {
+ return KEY_COLOR_MODE_BOOSTED;
+ }
+ return KEY_COLOR_MODE_NATURAL;
+ }
+
+ @Override
+ protected boolean setDefaultKey(String key) {
+ switch (key) {
+ case KEY_COLOR_MODE_NATURAL:
+ applySaturation(COLOR_SATURATION_NATURAL);
+ setNativeMode(false);
+ break;
+ case KEY_COLOR_MODE_BOOSTED:
+ applySaturation(COLOR_SATURATION_BOOSTED);
+ setNativeMode(false);
+ break;
+ case KEY_COLOR_MODE_SATURATED:
+ applySaturation(COLOR_SATURATION_NATURAL);
+ setNativeMode(true);
+ break;
+ }
+
+ updateConfiguration();
+
+ return true;
+ }
+
+ @VisibleForTesting
+ void updateConfiguration() {
+ try {
+ mActivityManager.updateConfiguration(null);
+ } catch (RemoteException e) {
+ Log.d(TAG, "Could not update configuration", e);
+ }
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsProto.MetricsEvent.COLOR_MODE_SETTINGS;
+ }
+
+ /**
+ * Propagates the provided saturation to the SurfaceFlinger.
+ */
+ private void applySaturation(float saturation) {
+ SystemProperties.set(PERSISTENT_PROPERTY_SATURATION, Float.toString(saturation));
+ if (mSurfaceFlinger != null) {
+ final Parcel data = Parcel.obtain();
+ data.writeInterfaceToken("android.ui.ISurfaceComposer");
+ data.writeFloat(saturation);
+ try {
+ mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_SATURATION, data, null, 0);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "Failed to set saturation", ex);
+ } finally {
+ data.recycle();
+ }
+ }
+ }
+
+ private static float getSaturationValue() {
+ try {
+ return Float.parseFloat(SystemProperties.get(
+ PERSISTENT_PROPERTY_SATURATION, Float.toString(COLOR_SATURATION_NATURAL)));
+ } catch (NumberFormatException e) {
+ return COLOR_SATURATION_NATURAL;
+ }
+ }
+
+ /**
+ * Toggles native mode on/off in SurfaceFlinger.
+ */
+ private void setNativeMode(boolean enabled) {
+ SystemProperties.set(PERSISTENT_PROPERTY_NATIVE_MODE, enabled ? "1" : "0");
+ if (mSurfaceFlinger != null) {
+ final Parcel data = Parcel.obtain();
+ data.writeInterfaceToken("android.ui.ISurfaceComposer");
+ data.writeInt(enabled ? 1 : 0);
+ try {
+ mSurfaceFlinger.transact(SURFACE_FLINGER_TRANSACTION_NATIVE_MODE, data, null, 0);
+ } catch (RemoteException ex) {
+ Log.e(TAG, "Failed to set native mode", ex);
+ } finally {
+ data.recycle();
+ }
+ }
+ }
+
+ private static boolean isNativeModeEnabled() {
+ return SystemProperties.getBoolean(PERSISTENT_PROPERTY_NATIVE_MODE, false);
+ }
+
+ @VisibleForTesting
+ static class ColorModeCandidateInfo extends CandidateInfo {
+ private final CharSequence mLabel;
+ private final String mKey;
+
+ ColorModeCandidateInfo(CharSequence label, String key) {
+ super(true);
+ mLabel = label;
+ mKey = key;
+ }
+
+ @Override
+ public CharSequence loadLabel() {
+ return mLabel;
+ }
+
+ @Override
+ public Drawable loadIcon() {
+ return null;
+ }
+
+ @Override
+ public String getKey() {
+ return mKey;
+ }
+ }
+}
diff --git a/src/com/android/settings/display/ScreenZoomSettings.java b/src/com/android/settings/display/ScreenZoomSettings.java
index ec3999b..ab92155 100644
--- a/src/com/android/settings/display/ScreenZoomSettings.java
+++ b/src/com/android/settings/display/ScreenZoomSettings.java
@@ -17,6 +17,7 @@
package com.android.settings.display;
import android.annotation.Nullable;
+import android.annotation.StringRes;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -99,6 +100,12 @@
}
@Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.screen_zoom_title;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsEvent.DISPLAY_SCREEN_ZOOM;
}
diff --git a/src/com/android/settings/display/VrDisplayPreferencePicker.java b/src/com/android/settings/display/VrDisplayPreferencePicker.java
index bccdaa5..5487c46 100644
--- a/src/com/android/settings/display/VrDisplayPreferencePicker.java
+++ b/src/com/android/settings/display/VrDisplayPreferencePicker.java
@@ -33,6 +33,11 @@
static final String PREF_KEY_PREFIX = "vr_display_pref_";
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.vr_display_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.VR_DISPLAY_PREFERENCE;
}
diff --git a/src/com/android/settings/dream/CurrentDreamPicker.java b/src/com/android/settings/dream/CurrentDreamPicker.java
index da9bf9e..f0d520c 100644
--- a/src/com/android/settings/dream/CurrentDreamPicker.java
+++ b/src/com/android/settings/dream/CurrentDreamPicker.java
@@ -16,11 +16,11 @@
package com.android.settings.dream;
-
import android.content.ComponentName;
import android.content.Context;
import android.graphics.drawable.Drawable;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.settings.R;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settingslib.dream.DreamBackend;
import com.android.settingslib.dream.DreamBackend.DreamInfo;
@@ -41,6 +41,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.current_dream_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.DREAM;
}
diff --git a/src/com/android/settings/dream/WhenToDreamPicker.java b/src/com/android/settings/dream/WhenToDreamPicker.java
index a55064d..7031bdf 100644
--- a/src/com/android/settings/dream/WhenToDreamPicker.java
+++ b/src/com/android/settings/dream/WhenToDreamPicker.java
@@ -38,6 +38,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.when_to_dream_settings;
+ }
+
+ @Override
public int getMetricsCategory() {
return MetricsProto.MetricsEvent.DREAM;
}
diff --git a/src/com/android/settings/enterprise/ApplicationListPreferenceController.java b/src/com/android/settings/enterprise/ApplicationListPreferenceController.java
index eee9b33..dce6f57 100644
--- a/src/com/android/settings/enterprise/ApplicationListPreferenceController.java
+++ b/src/com/android/settings/enterprise/ApplicationListPreferenceController.java
@@ -20,6 +20,7 @@
import android.content.pm.PackageManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
+import android.util.IconDrawableFactory;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -63,13 +64,14 @@
if (screen == null) {
return;
}
+ final IconDrawableFactory iconDrawableFactory = IconDrawableFactory.newInstance(mContext);
final Context prefContext = mParent.getPreferenceManager().getContext();
for (int position = 0; position < result.size(); position++) {
final UserAppInfo item = result.get(position);
final Preference preference = new Preference(prefContext);
preference.setLayoutResource(R.layout.preference_app);
preference.setTitle(item.appInfo.loadLabel(mPm));
- preference.setIcon(item.appInfo.loadIcon(mPm));
+ preference.setIcon(iconDrawableFactory.getBadgedIcon(item.appInfo));
preference.setOrder(position);
preference.setSelectable(false);
screen.addPreference(preference);
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
index 66a9948..10bc9e3 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollEnrolling.java
@@ -165,22 +165,6 @@
startIconAnimation();
}
- @Override
- protected void onResume() {
- super.onResume();
- if (mSidecar != null) {
- mSidecar.setListener(this);
- }
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- if (mSidecar != null) {
- mSidecar.setListener(null);
- }
- }
-
private void startIconAnimation() {
mIconAnimationDrawable.start();
}
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
index e9a2250..d44f9f8 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
@@ -38,8 +38,10 @@
import android.util.TimeUtils;
import android.util.TypedValue;
import android.view.View;
+
import com.android.settings.R;
import com.android.settings.Utils;
+
import libcore.icu.LocaleData;
import java.util.ArrayList;
@@ -577,7 +579,7 @@
|| (aggrStates&(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG
|HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG
|HistoryItem.STATE_WIFI_SCAN_FLAG)) != 0;
- if (!com.android.settings.Utils.isWifiOnly(getContext())) {
+ if (!com.android.settingslib.Utils.isWifiOnly(getContext())) {
mHavePhoneSignal = true;
}
if (mHistEnd <= mHistStart) mHistEnd = mHistStart+1;
diff --git a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
index 53a3770..10e4280 100644
--- a/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryOptimizationPreferenceController.java
@@ -22,7 +22,7 @@
import com.android.settings.R;
import com.android.settings.Settings;
import com.android.settings.SettingsActivity;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
diff --git a/src/com/android/settings/fuelgauge/BatterySaverSettings.java b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
index 88dab49..f00b952 100644
--- a/src/com/android/settings/fuelgauge/BatterySaverSettings.java
+++ b/src/com/android/settings/fuelgauge/BatterySaverSettings.java
@@ -25,6 +25,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.PowerManager;
+import android.provider.SearchIndexableResource;
import android.provider.Settings.Global;
import android.support.annotation.VisibleForTesting;
import android.util.Log;
@@ -38,10 +39,16 @@
import com.android.settings.dashboard.conditional.BatterySaverCondition;
import com.android.settings.dashboard.conditional.ConditionManager;
import com.android.settings.notification.SettingPref;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
import com.android.settings.widget.SwitchBar;
+import java.util.Arrays;
+import java.util.List;
+
public class BatterySaverSettings extends SettingsPreferenceFragment
- implements SwitchBar.OnSwitchChangeListener, BatterySaverReceiver.BatterySaverListener {
+ implements SwitchBar.OnSwitchChangeListener, BatterySaverReceiver.BatterySaverListener,
+ Indexable {
private static final String TAG = "BatterySaverSettings";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final String KEY_TURN_ON_AUTOMATICALLY = "turn_on_automatically";
@@ -89,7 +96,7 @@
protected String getCaption(Resources res, int value) {
if (value > 0 && value < 100) {
return res.getString(R.string.battery_saver_turn_on_automatically_pct,
- Utils.formatPercentage(value));
+ Utils.formatPercentage(value));
}
return res.getString(R.string.battery_saver_turn_on_automatically_never);
}
@@ -219,4 +226,18 @@
}
}
}
+
+ /**
+ * For Search.
+ */
+ 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.battery_saver_settings;
+ return Arrays.asList(sir);
+ }
+ };
}
diff --git a/src/com/android/settings/fuelgauge/FakeUid.java b/src/com/android/settings/fuelgauge/FakeUid.java
index 253dc02..2c3e3cf 100644
--- a/src/com/android/settings/fuelgauge/FakeUid.java
+++ b/src/com/android/settings/fuelgauge/FakeUid.java
@@ -154,6 +154,11 @@
}
@Override
+ public Timer getWifiScanTimer() {
+ return null;
+ }
+
+ @Override
public int getWifiScanBackgroundCount(int which) {
return 0;
}
@@ -169,6 +174,11 @@
}
@Override
+ public Timer getWifiScanBackgroundTimer() {
+ return null;
+ }
+
+ @Override
public long getWifiBatchedScanTime(int csphBin, long elapsedRealtimeUs, int which) {
return 0;
}
diff --git a/src/com/android/settings/fuelgauge/HighPowerDetail.java b/src/com/android/settings/fuelgauge/HighPowerDetail.java
index 296f973..a086986 100644
--- a/src/com/android/settings/fuelgauge/HighPowerDetail.java
+++ b/src/com/android/settings/fuelgauge/HighPowerDetail.java
@@ -18,7 +18,6 @@
import android.app.AlertDialog;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
@@ -165,12 +164,10 @@
: R.string.high_power_off);
}
- public static void show(Fragment caller, String packageName, int requestCode,
- boolean defaultToOn) {
+ public static void show(Fragment caller, String packageName, int requestCode) {
HighPowerDetail fragment = new HighPowerDetail();
Bundle args = new Bundle();
args.putString(AppInfoBase.ARG_PACKAGE_NAME, packageName);
- args.putBoolean(ARG_DEFAULT_ON, defaultToOn);
fragment.setArguments(args);
fragment.setTargetFragment(caller, requestCode);
fragment.show(caller.getFragmentManager(), HighPowerDetail.class.getSimpleName());
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 1955638..8a107a2 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -56,7 +56,7 @@
import com.android.settings.SettingsActivity;
import com.android.settings.Utils;
import com.android.settings.applications.LayoutPreference;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.display.AmbientDisplayPreferenceController;
diff --git a/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java b/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
index 382c692..3791d89 100644
--- a/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
+++ b/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicy.java
@@ -17,6 +17,7 @@
package com.android.settings.fuelgauge.anomaly;
import android.content.Context;
+import android.net.Uri;
import android.provider.Settings;
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;
@@ -25,6 +26,10 @@
import com.android.settings.wrapper.KeyValueListParserWrapper;
+import java.util.Arrays;
+import java.util.Set;
+import java.util.stream.Collectors;
+
/**
* Class to store the policy for anomaly detection, which comes from
* {@link android.provider.Settings.Global}
@@ -45,6 +50,8 @@
@VisibleForTesting
static final String KEY_WAKEUP_ALARM_THRESHOLD = "wakeup_alarm_threshold";
@VisibleForTesting
+ static final String KEY_WAKEUP_BLACKLISTED_TAGS = "wakeup_blacklisted_tags";
+ @VisibleForTesting
static final String KEY_BLUETOOTH_SCAN_THRESHOLD = "bluetooth_scan_threshold";
/**
@@ -96,6 +103,14 @@
public final long wakeupAlarmThreshold;
/**
+ * Array of blacklisted wakeups, by tag.
+ *
+ * @see Settings.Global#ANOMALY_DETECTION_CONSTANTS
+ * @see #KEY_WAKEUP_BLACKLISTED_TAGS
+ */
+ public final Set<String> wakeupBlacklistedTags;
+
+ /**
* Threshold for bluetooth unoptimized scanning time in milli seconds
*
* @see Settings.Global#ANOMALY_DETECTION_CONSTANTS
@@ -121,15 +136,18 @@
Log.e(TAG, "Bad anomaly detection constants");
}
- anomalyDetectionEnabled = mParserWrapper.getBoolean(KEY_ANOMALY_DETECTION_ENABLED, true);
- wakeLockDetectionEnabled = mParserWrapper.getBoolean(KEY_WAKELOCK_DETECTION_ENABLED, true);
- wakeupAlarmDetectionEnabled = mParserWrapper.getBoolean(KEY_WAKEUP_ALARM_DETECTION_ENABLED,
- false);
+ anomalyDetectionEnabled =
+ mParserWrapper.getBoolean(KEY_ANOMALY_DETECTION_ENABLED, false);
+ wakeLockDetectionEnabled =
+ mParserWrapper.getBoolean(KEY_WAKELOCK_DETECTION_ENABLED,false);
+ wakeupAlarmDetectionEnabled =
+ mParserWrapper.getBoolean(KEY_WAKEUP_ALARM_DETECTION_ENABLED,false);
bluetoothScanDetectionEnabled = mParserWrapper.getBoolean(
- KEY_BLUETOOTH_SCAN_DETECTION_ENABLED, true);
+ KEY_BLUETOOTH_SCAN_DETECTION_ENABLED, false);
wakeLockThreshold = mParserWrapper.getLong(KEY_WAKELOCK_THRESHOLD,
DateUtils.HOUR_IN_MILLIS);
- wakeupAlarmThreshold = mParserWrapper.getLong(KEY_WAKEUP_ALARM_THRESHOLD, 60);
+ wakeupAlarmThreshold = mParserWrapper.getLong(KEY_WAKEUP_ALARM_THRESHOLD, 10);
+ wakeupBlacklistedTags = parseStringSet(KEY_WAKEUP_BLACKLISTED_TAGS, null);
bluetoothScanThreshold = mParserWrapper.getLong(KEY_BLUETOOTH_SCAN_THRESHOLD,
30 * DateUtils.MINUTE_IN_MILLIS);
}
@@ -150,4 +168,14 @@
return false; // Disabled when no this type
}
}
+
+ private Set<String> parseStringSet(final String key, final Set<String> defaultSet) {
+ final String value = mParserWrapper.getString(key, null);
+ if (value != null) {
+ return Arrays.stream(value.split(":"))
+ .map(String::trim).map(Uri::decode).collect(Collectors.toSet());
+ } else {
+ return defaultSet;
+ }
+ }
}
diff --git a/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetector.java b/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetector.java
index 8823a17..46f31ab 100644
--- a/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetector.java
+++ b/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetector.java
@@ -21,6 +21,8 @@
import android.support.annotation.VisibleForTesting;
import android.text.format.DateUtils;
import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Log;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
@@ -29,10 +31,12 @@
import com.android.settings.fuelgauge.anomaly.Anomaly;
import com.android.settings.fuelgauge.anomaly.AnomalyDetectionPolicy;
import com.android.settings.fuelgauge.anomaly.AnomalyUtils;
-import com.android.settings.fuelgauge.anomaly.action.AnomalyAction;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
/**
* Check whether apps has too many wakeup alarms
@@ -42,6 +46,7 @@
@VisibleForTesting
BatteryUtils mBatteryUtils;
private long mWakeupAlarmThreshold;
+ private Set<String> mWakeupBlacklistedTags;
private Context mContext;
private AnomalyUtils mAnomalyUtils;
@@ -56,6 +61,7 @@
mBatteryUtils = BatteryUtils.getInstance(context);
mAnomalyUtils = anomalyUtils;
mWakeupAlarmThreshold = policy.wakeupAlarmThreshold;
+ mWakeupBlacklistedTags = policy.wakeupBlacklistedTags;
}
@Override
@@ -123,11 +129,14 @@
final BatteryStats.Uid.Pkg ps = packageStats.valueAt(ipkg);
final ArrayMap<String, ? extends BatteryStats.Counter> alarms =
ps.getWakeupAlarmStats();
- for (int iwa = alarms.size() - 1; iwa >= 0; iwa--) {
- int count = alarms.valueAt(iwa).getCountLocked(BatteryStats.STATS_SINCE_CHARGED);
+ for (Map.Entry<String, ? extends BatteryStats.Counter> alarm : alarms.entrySet()) {
+ if (mWakeupBlacklistedTags != null
+ && mWakeupBlacklistedTags.contains(alarm.getKey())) {
+ continue;
+ }
+ int count = alarm.getValue().getCountLocked(BatteryStats.STATS_SINCE_CHARGED);
wakeups += count;
}
-
}
return wakeups;
diff --git a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
index bf6ee8c..1ecba0d 100644
--- a/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
+++ b/src/com/android/settings/gestures/AssistGestureSettingsPreferenceController.java
@@ -162,7 +162,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
AssistGestureSettings.class.getName(), mAssistGesturePrefKey,
mContext.getString(R.string.display_settings));
diff --git a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
index bee9893..049ee18 100644
--- a/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapPowerPreferenceController.java
@@ -89,7 +89,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
DoubleTapPowerSettings.class.getName(), mDoubleTapPowerKey,
mContext.getString(R.string.display_settings));
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index 9ec06ae..deffa97 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -89,7 +89,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
DoubleTapScreenSettings.class.getName(), mDoubleTapScreenPrefKey,
mContext.getString(R.string.display_settings));
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index e1b444c..314cbc3 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -95,7 +95,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
PickupGestureSettings.class.getName(), mPickUpPrefKey,
mContext.getString(R.string.display_settings));
diff --git a/src/com/android/settings/language/LanguageAndInputSettings.java b/src/com/android/settings/language/LanguageAndInputSettings.java
index 19b1a9f..79f9ded 100644
--- a/src/com/android/settings/language/LanguageAndInputSettings.java
+++ b/src/com/android/settings/language/LanguageAndInputSettings.java
@@ -177,7 +177,6 @@
// Duplicates in summary and details pages.
keys.add(KEY_TEXT_TO_SPEECH);
keys.add(KEY_PHYSICAL_KEYBOARD);
-
return keys;
}
};
diff --git a/src/com/android/settings/language/PhoneLanguagePreferenceController.java b/src/com/android/settings/language/PhoneLanguagePreferenceController.java
index 11c3e03..e7b0c72 100644
--- a/src/com/android/settings/language/PhoneLanguagePreferenceController.java
+++ b/src/com/android/settings/language/PhoneLanguagePreferenceController.java
@@ -23,6 +23,8 @@
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
+import java.util.List;
+
public class PhoneLanguagePreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin {
@@ -48,6 +50,13 @@
}
@Override
+ public void updateNonIndexableKeys(List<String> keys) {
+ // No index needed, because this pref has the same name as the parent page. Indexing it will
+ // make search page look like there are duplicate result, creating confusion.
+ keys.add(getPreferenceKey());
+ }
+
+ @Override
public String getPreferenceKey() {
return KEY_PHONE_LANGUAGE;
}
diff --git a/src/com/android/settings/location/LocationPreferenceController.java b/src/com/android/settings/location/LocationPreferenceController.java
index 225100f..9b68848 100644
--- a/src/com/android/settings/location/LocationPreferenceController.java
+++ b/src/com/android/settings/location/LocationPreferenceController.java
@@ -127,7 +127,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
LocationSettings.class.getName(), KEY_LOCATION,
mContext.getString(R.string.location_settings_title));
diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.java
index d66b310..39d5f6d 100644
--- a/src/com/android/settings/location/LocationSettings.java
+++ b/src/com/android/settings/location/LocationSettings.java
@@ -27,6 +27,7 @@
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
+import android.provider.SearchIndexableResource;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.support.v7.preference.PreferenceGroup;
@@ -40,6 +41,8 @@
import com.android.settings.Utils;
import com.android.settings.applications.InstalledAppDetails;
import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
import com.android.settings.widget.SwitchBar;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedPreference;
@@ -47,6 +50,7 @@
import com.android.settingslib.location.RecentLocationApps;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -77,7 +81,7 @@
* implementation.
*/
public class LocationSettings extends LocationSettingsBase
- implements SwitchBar.OnSwitchChangeListener {
+ implements SwitchBar.OnSwitchChangeListener, Indexable {
private static final String TAG = "LocationSettings";
@@ -455,4 +459,18 @@
return new SummaryProvider(activity, summaryLoader);
}
};
+
+ /**
+ * For Search.
+ */
+ 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.location_settings;
+ return Arrays.asList(sir);
+ }
+ };
}
diff --git a/src/com/android/settings/location/ScanningSettings.java b/src/com/android/settings/location/ScanningSettings.java
index fd5a7fd..5c34b62 100644
--- a/src/com/android/settings/location/ScanningSettings.java
+++ b/src/com/android/settings/location/ScanningSettings.java
@@ -16,6 +16,8 @@
package com.android.settings.location;
+import android.content.Context;
+import android.provider.SearchIndexableResource;
import android.provider.Settings.Global;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
@@ -24,11 +26,16 @@
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 java.util.Arrays;
+import java.util.List;
/**
* A page that configures the background scanning settings for Wi-Fi and Bluetooth.
*/
-public class ScanningSettings extends SettingsPreferenceFragment {
+public class ScanningSettings extends SettingsPreferenceFragment implements Indexable {
private static final String KEY_WIFI_SCAN_ALWAYS_AVAILABLE = "wifi_always_scanning";
private static final String KEY_BLUETOOTH_SCAN_ALWAYS_AVAILABLE = "bluetooth_always_scanning";
@@ -56,13 +63,13 @@
private void initPreferences() {
final SwitchPreference wifiScanAlwaysAvailable =
- (SwitchPreference) findPreference(KEY_WIFI_SCAN_ALWAYS_AVAILABLE);
+ (SwitchPreference) findPreference(KEY_WIFI_SCAN_ALWAYS_AVAILABLE);
wifiScanAlwaysAvailable.setChecked(Global.getInt(getContentResolver(),
- Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1);
+ Global.WIFI_SCAN_ALWAYS_AVAILABLE, 0) == 1);
final SwitchPreference bleScanAlwaysAvailable =
- (SwitchPreference) findPreference(KEY_BLUETOOTH_SCAN_ALWAYS_AVAILABLE);
+ (SwitchPreference) findPreference(KEY_BLUETOOTH_SCAN_ALWAYS_AVAILABLE);
bleScanAlwaysAvailable.setChecked(Global.getInt(getContentResolver(),
- Global.BLE_SCAN_ALWAYS_AVAILABLE, 0) == 1);
+ Global.BLE_SCAN_ALWAYS_AVAILABLE, 0) == 1);
}
@Override
@@ -81,4 +88,18 @@
}
return true;
}
+
+ /**
+ * For Search.
+ */
+ 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.location_scanning;
+ return Arrays.asList(sir);
+ }
+ };
}
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index 1199400..1670b0d 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -15,6 +15,9 @@
*/
package com.android.settings.network;
+import static android.os.UserHandle.myUserId;
+import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+
import android.content.Context;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
@@ -24,17 +27,14 @@
import android.telephony.ServiceState;
import android.telephony.TelephonyManager;
-import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.RestrictedLockUtilsWrapper;
+import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;
-import static android.os.UserHandle.myUserId;
-import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
-
public class MobileNetworkPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnResume, OnPause {
diff --git a/src/com/android/settings/network/MobilePlanPreferenceController.java b/src/com/android/settings/network/MobilePlanPreferenceController.java
index d5ff924..6556113 100644
--- a/src/com/android/settings/network/MobilePlanPreferenceController.java
+++ b/src/com/android/settings/network/MobilePlanPreferenceController.java
@@ -15,6 +15,13 @@
*/
package com.android.settings.network;
+import static android.content.Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+import static android.os.UserHandle.myUserId;
+import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
+
+import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
+
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
@@ -30,8 +37,8 @@
import android.util.Log;
import com.android.settings.R;
-import com.android.settings.Utils;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnCreate;
@@ -39,12 +46,6 @@
import java.util.List;
-import static android.content.Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT;
-import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
-import static android.os.UserHandle.myUserId;
-import static android.os.UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS;
-import static com.android.settingslib.RestrictedLockUtils.hasBaseUserRestriction;
-
public class MobilePlanPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnSaveInstanceState {
diff --git a/src/com/android/settings/nfc/AndroidBeam.java b/src/com/android/settings/nfc/AndroidBeam.java
index fe264f3..e40fc21 100644
--- a/src/com/android/settings/nfc/AndroidBeam.java
+++ b/src/com/android/settings/nfc/AndroidBeam.java
@@ -16,6 +16,7 @@
package com.android.settings.nfc;
+import android.annotation.StringRes;
import android.nfc.NfcAdapter;
import android.os.Bundle;
import android.os.UserHandle;
@@ -130,4 +131,10 @@
public int getMetricsCategory() {
return MetricsEvent.NFC_BEAM;
}
+
+ @Override
+ @StringRes
+ protected int getTitle() {
+ return R.string.android_beam_settings_title;
+ }
}
diff --git a/src/com/android/settings/nfc/PaymentBackend.java b/src/com/android/settings/nfc/PaymentBackend.java
index bc9dbbe..91cd96c 100644
--- a/src/com/android/settings/nfc/PaymentBackend.java
+++ b/src/com/android/settings/nfc/PaymentBackend.java
@@ -73,6 +73,7 @@
public void onResume() {
mSettingsPackageMonitor.register(mContext, mContext.getMainLooper(), false);
+ refresh();
}
public void refresh() {
diff --git a/src/com/android/settings/nfc/PaymentSettings.java b/src/com/android/settings/nfc/PaymentSettings.java
index 10f1154..66d1103 100644
--- a/src/com/android/settings/nfc/PaymentSettings.java
+++ b/src/com/android/settings/nfc/PaymentSettings.java
@@ -58,8 +58,14 @@
mPaymentBackend = new PaymentBackend(getActivity());
setHasOptionsMenu(true);
- PreferenceManager manager = getPreferenceManager();
- PreferenceScreen screen = manager.createPreferenceScreen(getActivity());
+ final PreferenceScreen screen;
+ if (usePreferenceScreenTitle()) {
+ addPreferencesFromResource(R.xml.nfc_payment_settings);
+ screen = getPreferenceScreen();
+ } else {
+ PreferenceManager manager = getPreferenceManager();
+ screen = manager.createPreferenceScreen(getActivity());
+ }
List<PaymentBackend.PaymentAppInfo> appInfos = mPaymentBackend.getPaymentAppInfos();
if (appInfos != null && appInfos.size() > 0) {
@@ -71,7 +77,9 @@
mPaymentBackend);
screen.addPreference(foreground);
}
- setPreferenceScreen(screen);
+ if (!usePreferenceScreenTitle()) {
+ setPreferenceScreen(screen);
+ }
}
@Override
diff --git a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
index 94eccf9..18efd43 100644
--- a/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
+++ b/src/com/android/settings/notification/BadgingNotificationPreferenceController.java
@@ -133,7 +133,7 @@
@Override
public ResultPayload getResultPayload() {
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(mContext,
ConfigureNotificationSettings.class.getName(), KEY_NOTIFICATION_BADGING,
mContext.getString(R.string.configure_notification_settings));
diff --git a/src/com/android/settings/notification/EmptyTextSettings.java b/src/com/android/settings/notification/EmptyTextSettings.java
index 3f8ccc6..2b5998e 100644
--- a/src/com/android/settings/notification/EmptyTextSettings.java
+++ b/src/com/android/settings/notification/EmptyTextSettings.java
@@ -32,6 +32,17 @@
private TextView mEmpty;
@Override
+ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+ super.onCreatePreferences(savedInstanceState, rootKey);
+ if (usePreferenceScreenTitle()) {
+ final int resId = getPreferenceScreenResId();
+ if (resId > 0) {
+ addPreferencesFromResource(resId);
+ }
+ }
+ }
+
+ @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mEmpty = new TextView(getContext());
@@ -47,4 +58,9 @@
protected void setEmptyText(int text) {
mEmpty.setText(text);
}
+
+ /**
+ * Get the res id for static preference xml for this fragment.
+ */
+ protected abstract int getPreferenceScreenResId();
}
diff --git a/src/com/android/settings/notification/NotificationAccessSettings.java b/src/com/android/settings/notification/NotificationAccessSettings.java
index 858482c..af89f49 100644
--- a/src/com/android/settings/notification/NotificationAccessSettings.java
+++ b/src/com/android/settings/notification/NotificationAccessSettings.java
@@ -16,7 +16,6 @@
package com.android.settings.notification;
-import android.app.ActivityManager;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Fragment;
@@ -38,11 +37,6 @@
private static final String TAG = NotificationAccessSettings.class.getSimpleName();
private static final Config CONFIG = getNotificationListenerConfig();
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- }
-
private static Config getNotificationListenerConfig() {
final Config c = new Config();
c.tag = TAG;
@@ -100,6 +94,11 @@
mNm.setNotificationListenerAccessGranted(service, true);
}
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.notification_access_settings;
+ }
+
@VisibleForTesting
void logSpecialPermissionChange(boolean enable, String packageName) {
int logCategory = enable ? MetricsEvent.APP_SPECIAL_PERMISSION_NOTIVIEW_ALLOW
diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java
index 6812d4d..982f4a4 100644
--- a/src/com/android/settings/notification/SoundSettings.java
+++ b/src/com/android/settings/notification/SoundSettings.java
@@ -57,7 +57,7 @@
@Override
public void onAttach(Context context) {
super.onAttach(context);
- mProgressiveDisclosureMixin.setTileLimit(6);
+ mProgressiveDisclosureMixin.setTileLimit(1);
}
@Override
diff --git a/src/com/android/settings/notification/ZenAccessSettings.java b/src/com/android/settings/notification/ZenAccessSettings.java
index 238c11e..44052b1 100644
--- a/src/com/android/settings/notification/ZenAccessSettings.java
+++ b/src/com/android/settings/notification/ZenAccessSettings.java
@@ -21,9 +21,7 @@
import android.app.AlertDialog;
import android.app.AppGlobals;
import android.app.Dialog;
-import android.app.DialogFragment;
import android.app.NotificationManager;
-import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.ApplicationInfo;
@@ -38,7 +36,6 @@
import android.os.Handler;
import android.os.Looper;
import android.os.RemoteException;
-import android.provider.Settings;
import android.provider.Settings.Secure;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
@@ -48,7 +45,6 @@
import android.util.ArraySet;
import android.util.Log;
import android.view.View;
-import android.widget.Toast;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -80,7 +76,9 @@
mContext = getActivity();
mPkgMan = mContext.getPackageManager();
mNoMan = mContext.getSystemService(NotificationManager.class);
- setPreferenceScreen(getPreferenceManager().createPreferenceScreen(mContext));
+ if (!usePreferenceScreenTitle()) {
+ setPreferenceScreen(getPreferenceManager().createPreferenceScreen(mContext));
+ }
}
@Override
@@ -90,6 +88,11 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.zen_access_settings;
+ }
+
+ @Override
public void onResume() {
super.onResume();
if (!ActivityManager.isLowRamDeviceStatic()) {
diff --git a/src/com/android/settings/notification/ZenModePrioritySettings.java b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
similarity index 66%
rename from src/com/android/settings/notification/ZenModePrioritySettings.java
rename to src/com/android/settings/notification/ZenModeBehaviorSettings.java
index b164407..d03b015 100644
--- a/src/com/android/settings/notification/ZenModePrioritySettings.java
+++ b/src/com/android/settings/notification/ZenModeBehaviorSettings.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015 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.
@@ -18,7 +18,10 @@
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
+import android.content.Context;
import android.os.Bundle;
+import android.provider.SearchIndexableResource;
+import android.provider.Settings;
import android.service.notification.ZenModeConfig;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.DropDownPreference;
@@ -29,14 +32,20 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
-public class ZenModePrioritySettings extends ZenModeSettingsBase {
- private static final String KEY_REMINDERS = "reminders";
- private static final String KEY_EVENTS = "events";
- private static final String KEY_MESSAGES = "messages";
- private static final String KEY_CALLS = "calls";
- private static final String KEY_REPEAT_CALLERS = "repeat_callers";
+import java.util.Arrays;
+import java.util.List;
+
+public class ZenModeBehaviorSettings extends ZenModeSettingsBase implements Indexable {
+ private static final String KEY_ALARMS = "zen_mode_alarms";
+ private static final String KEY_MEDIA = "zen_mode_media";
+ private static final String KEY_REMINDERS = "zen_mode_reminders";
+ private static final String KEY_EVENTS = "zen_mode_events";
+ private static final String KEY_MESSAGES = "zen_mode_messages";
+ private static final String KEY_CALLS = "zen_mode_calls";
+ private static final String KEY_REPEAT_CALLERS = "zen_mode_repeat_callers";
private static final int SOURCE_NONE = -1;
@@ -46,13 +55,15 @@
private DropDownPreference mMessages;
private DropDownPreference mCalls;
private SwitchPreference mRepeatCallers;
+ private SwitchPreference mAlarms;
+ private SwitchPreference mMediaSystemOther;
private Policy mPolicy;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.zen_mode_priority_settings);
+ addPreferencesFromResource(R.xml.zen_mode_behavior_settings);
final PreferenceScreen root = getPreferenceScreen();
mPolicy = NotificationManager.from(mContext).getNotificationPolicy();
@@ -141,19 +152,50 @@
val);
if (DEBUG) Log.d(TAG, "onPrefChange allowRepeatCallers=" + val);
int priorityCategories = getNewPriorityCategories(val,
- NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS);
+ Policy.PRIORITY_CATEGORY_REPEAT_CALLERS);
savePolicy(priorityCategories, mPolicy.priorityCallSenders,
mPolicy.priorityMessageSenders, mPolicy.suppressedVisualEffects);
return true;
}
});
+ mAlarms = (SwitchPreference) root.findPreference(KEY_ALARMS);
+ mAlarms.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (mDisableListeners) return true;
+ final boolean val = (Boolean) newValue;
+ mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_ALARMS, val);
+ if (DEBUG) Log.d(TAG, "onPrefChange allowAlarms=" + val);
+ savePolicy(getNewPriorityCategories(val, Policy.PRIORITY_CATEGORY_ALARMS),
+ mPolicy.priorityCallSenders, mPolicy.priorityMessageSenders,
+ mPolicy.suppressedVisualEffects);
+ return true;
+ }
+ });
+
+ mMediaSystemOther = (SwitchPreference) root.findPreference(KEY_MEDIA);
+ mMediaSystemOther.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ if (mDisableListeners) return true;
+ final boolean val = (Boolean) newValue;
+ mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_ZEN_ALLOW_MEDIA, val);
+ if (DEBUG) Log.d(TAG, "onPrefChange allowMediaSystemOther=" + val);
+ savePolicy(getNewPriorityCategories(val,
+ Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER),
+ mPolicy.priorityCallSenders, mPolicy.priorityMessageSenders,
+ mPolicy.suppressedVisualEffects);
+ return true;
+ }
+ });
+
updateControls();
}
@Override
protected void onZenModeChanged() {
- // don't care
+ updateControls();
}
@Override
@@ -162,8 +204,7 @@
updateControls();
}
- private void updateControls() {
- mDisableListeners = true;
+ private void updateControlsPolicy() {
if (mCalls != null) {
mCalls.setValue(Integer.toString(
isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CALLS)
@@ -172,15 +213,62 @@
mMessages.setValue(Integer.toString(
isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_MESSAGES)
? mPolicy.priorityMessageSenders : SOURCE_NONE));
+ mAlarms.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_ALARMS));
+ mMediaSystemOther.setChecked(isPriorityCategoryEnabled(
+ Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER));
mReminders.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_REMINDERS));
mEvents.setChecked(isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_EVENTS));
mRepeatCallers.setChecked(
isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_REPEAT_CALLERS));
mRepeatCallers.setVisible(!isPriorityCategoryEnabled(Policy.PRIORITY_CATEGORY_CALLS)
|| mPolicy.priorityCallSenders != Policy.PRIORITY_SENDERS_ANY);
+
+ }
+
+ private void updateControls() {
+ mDisableListeners = true;
+ switch(mZenMode) {
+ case Settings.Global.ZEN_MODE_NO_INTERRUPTIONS:
+ toggleBasicNoInterruptions();
+ mAlarms.setChecked(false);
+ mMediaSystemOther.setChecked(false);
+ setTogglesEnabled(false);
+ break;
+ case Settings.Global.ZEN_MODE_ALARMS:
+ toggleBasicNoInterruptions();
+ mAlarms.setChecked(true);
+ mMediaSystemOther.setChecked(true);
+ setTogglesEnabled(false);
+ break;
+ default:
+ updateControlsPolicy();
+ setTogglesEnabled(true);
+ }
mDisableListeners = false;
}
+ private void toggleBasicNoInterruptions() {
+ if (mCalls != null) {
+ mCalls.setValue(Integer.toString(SOURCE_NONE));
+ }
+ mMessages.setValue(Integer.toString(SOURCE_NONE));
+ mReminders.setChecked(false);
+ mEvents.setChecked(false);
+ mRepeatCallers.setChecked(false);
+ }
+
+ private void setTogglesEnabled(boolean enable) {
+ if (mCalls != null) {
+ mCalls.setEnabled(enable);
+ }
+ mMessages.setEnabled(enable);
+ mReminders.setEnabled(enable);
+ mEvents.setEnabled(enable);
+ mRepeatCallers.setEnabled(enable);
+ mAlarms.setEnabled(enable);
+ mMediaSystemOther.setEnabled(enable);
+ }
+
@Override
public int getMetricsCategory() {
return MetricsEvent.NOTIFICATION_ZEN_MODE_PRIORITY;
@@ -222,4 +310,18 @@
NotificationManager.from(mContext).setNotificationPolicy(mPolicy);
}
+ /**
+ * For Search.
+ */
+ 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_behavior_settings;
+ return Arrays.asList(sir);
+ }
+ };
+
}
diff --git a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
index 4abdd7e..86576cf 100644
--- a/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
+++ b/src/com/android/settings/notification/ZenModeRuleSettingsBase.java
@@ -85,6 +85,12 @@
}
mId = intent.getStringExtra(ConditionProviderService.EXTRA_RULE_ID);
+ if (mId == null) {
+ Log.w(TAG, "rule id is null");
+ toastAndFinish();
+ return;
+ }
+
if (DEBUG) Log.d(TAG, "mId=" + mId);
if (refreshRuleOrFinish()) {
return;
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 8cb700b..7f9a7c3 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -28,14 +28,11 @@
import android.content.pm.PackageManager;
import android.content.pm.ServiceInfo;
import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.AsyncTask;
import android.os.Bundle;
+import android.provider.SearchIndexableResource;
import android.provider.Settings;
import android.service.notification.ConditionProviderService;
import android.service.notification.ZenModeConfig;
-import com.android.settings.utils.ManagedServiceSettings;
-import com.android.settings.utils.ZenServiceListing;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
@@ -45,25 +42,29 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.utils.ManagedServiceSettings;
+import com.android.settings.utils.ZenServiceListing;
import com.android.settingslib.TwoTargetPreference;
-import java.lang.ref.WeakReference;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-public class ZenModeSettings extends ZenModeSettingsBase {
+public class ZenModeSettings extends ZenModeSettingsBase implements Indexable {
- public static final String KEY_VISUAL_SETTINGS = "visual_interruptions_settings";
-
- private static final String KEY_PRIORITY_SETTINGS = "priority_settings";
- private static final String KEY_AUTOMATIC_RULES = "automatic_rules";
+ public static final String KEY_VISUAL_SETTINGS = "zen_mode_visual_interruptions_settings";
+ private static final String KEY_BEHAVIOR_SETTINGS = "zen_mode_behavior_settings";
+ private static final String KEY_AUTOMATIC_RULES = "zen_mode_automatic_rules";
static final ManagedServiceSettings.Config CONFIG = getConditionProviderConfig();
private PreferenceCategory mAutomaticRules;
- private Preference mPrioritySettings;
+ private Preference mBehaviorSettings;
private Preference mVisualSettings;
private Policy mPolicy;
private SummaryBuilder mSummaryBuilder;
@@ -78,7 +79,7 @@
final PreferenceScreen root = getPreferenceScreen();
mAutomaticRules = (PreferenceCategory) root.findPreference(KEY_AUTOMATIC_RULES);
- mPrioritySettings = root.findPreference(KEY_PRIORITY_SETTINGS);
+ mBehaviorSettings = root.findPreference(KEY_BEHAVIOR_SETTINGS);
mVisualSettings = root.findPreference(KEY_VISUAL_SETTINGS);
mPolicy = NotificationManager.from(mContext).getNotificationPolicy();
mSummaryBuilder = new SummaryBuilder(getContext());
@@ -113,13 +114,13 @@
}
private void updateControls() {
- updatePrioritySettingsSummary();
+ updateBehaviorSettingsSummary();
updateVisualSettingsSummary();
updateAutomaticRules();
}
- private void updatePrioritySettingsSummary() {
- mPrioritySettings.setSummary(mSummaryBuilder.getPrioritySettingSummary(mPolicy));
+ private void updateBehaviorSettingsSummary() {
+ mBehaviorSettings.setSummary(mSummaryBuilder.getBehaviorSettingSummary(mPolicy, mZenMode));
}
private void updateVisualSettingsSummary() {
@@ -352,29 +353,44 @@
mContext = context;
}
- String getPrioritySettingSummary(Policy policy) {
- String s = mContext.getString(R.string.zen_mode_alarms);
- s = prepend(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_EVENTS),
- R.string.zen_mode_events);
- s = prepend(s, isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_REMINDERS),
- R.string.zen_mode_reminders);
- if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_MESSAGES)) {
- if (policy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) {
- s = append(s, true, R.string.zen_mode_all_messages);
+ private static final int[] ALL_PRIORITY_CATEGORIES = {
+ Policy.PRIORITY_CATEGORY_ALARMS,
+ Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER,
+ Policy.PRIORITY_CATEGORY_REMINDERS,
+ Policy.PRIORITY_CATEGORY_EVENTS,
+ Policy.PRIORITY_CATEGORY_MESSAGES,
+ Policy.PRIORITY_CATEGORY_CALLS,
+ Policy.PRIORITY_CATEGORY_REPEAT_CALLERS,
+ };
+
+ String getBehaviorSettingSummary(Policy policy, int zenMode) {
+ List<String> enabledCategories;
+
+ if (zenMode == Settings.Global.ZEN_MODE_NO_INTERRUPTIONS) {
+ return mContext.getString(R.string.zen_mode_behavior_total_silence);
+ } else if (zenMode == Settings.Global.ZEN_MODE_ALARMS) {
+ return mContext.getString(R.string.zen_mode_behavior_alarms_only);
+ } else {
+ enabledCategories = getEnabledCategories(policy);
+ }
+
+ int numCategories = enabledCategories.size();
+ if (numCategories == 0) {
+ return mContext.getString(R.string.zen_mode_behavior_no_sound);
+ }
+
+ String s = enabledCategories.get(0).toLowerCase();
+ for (int i = 1; i < numCategories; i++) {
+ if (i == numCategories - 1) {
+ s = mContext.getString(R.string.join_many_items_last,
+ s, enabledCategories.get(i).toLowerCase());
} else {
- s = append(s, true, R.string.zen_mode_selected_messages);
+ s = mContext.getString(R.string.join_many_items_middle,
+ s, enabledCategories.get(i).toLowerCase());
}
}
- if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_CALLS)) {
- if (policy.priorityCallSenders == Policy.PRIORITY_SENDERS_ANY) {
- s = append(s, true, R.string.zen_mode_all_callers);
- } else {
- s = append(s, true, R.string.zen_mode_selected_callers);
- }
- } else if (isCategoryEnabled(policy, Policy.PRIORITY_CATEGORY_REPEAT_CALLERS)) {
- s = append(s, true, R.string.zen_mode_repeat_callers);
- }
- return s;
+
+ return mContext.getString(R.string.zen_mode_behavior_no_sound_except, s);
}
String getVisualSettingSummary(Policy policy) {
@@ -413,22 +429,45 @@
return count;
}
- @VisibleForTesting
- String append(String s, boolean condition, int resId) {
- if (condition) {
- return mContext.getString(
- R.string.join_many_items_middle, s, mContext.getString(resId));
+ private List<String> getEnabledCategories(Policy policy) {
+ List<String> enabledCategories = new ArrayList<>();
+ for (int category : ALL_PRIORITY_CATEGORIES) {
+ if (isCategoryEnabled(policy, category)) {
+ if (category == Policy.PRIORITY_CATEGORY_ALARMS) {
+ enabledCategories.add(mContext.getString(R.string.zen_mode_alarms));
+ } else if (category == Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER) {
+ enabledCategories.add(mContext.getString(
+ R.string.zen_mode_media_system_other));
+ } else if (category == Policy.PRIORITY_CATEGORY_REMINDERS) {
+ enabledCategories.add(mContext.getString(R.string.zen_mode_reminders));
+ } else if (category == Policy.PRIORITY_CATEGORY_EVENTS) {
+ enabledCategories.add(mContext.getString(R.string.zen_mode_events));
+ } else if (category == Policy.PRIORITY_CATEGORY_MESSAGES) {
+ if (policy.priorityMessageSenders == Policy.PRIORITY_SENDERS_ANY) {
+ enabledCategories.add(mContext.getString(
+ R.string.zen_mode_all_messages));
+ } else {
+ enabledCategories.add(mContext.getString(
+ R.string.zen_mode_selected_messages));
+ }
+ } else if (category == Policy.PRIORITY_CATEGORY_CALLS) {
+ if (policy.priorityCallSenders == Policy.PRIORITY_SENDERS_ANY) {
+ enabledCategories.add(mContext.getString(
+ R.string.zen_mode_all_callers));
+ } else {
+ enabledCategories.add(mContext.getString(
+ R.string.zen_mode_selected_callers));
+ }
+ } else if (category == Policy.PRIORITY_CATEGORY_REPEAT_CALLERS) {
+ if (!enabledCategories.contains(mContext.getString(
+ R.string.zen_mode_all_callers))) {
+ enabledCategories.add(mContext.getString(
+ R.string.zen_mode_repeat_callers));
+ }
+ }
+ }
}
- return s;
- }
-
- @VisibleForTesting
- String prepend(String s, boolean condition, int resId) {
- if (condition) {
- return mContext.getString(
- R.string.join_many_items_middle, mContext.getString(resId), s);
- }
- return s;
+ return enabledCategories;
}
private boolean isCategoryEnabled(Policy policy, int categoryType) {
@@ -463,4 +502,17 @@
return type + rule.getName().toString();
}
};
+ /**
+ * For Search.
+ */
+ 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);
+ }
+ };
}
diff --git a/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java b/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
index aa27848..474992c 100644
--- a/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
+++ b/src/com/android/settings/notification/ZenModeVisualInterruptionSettings.java
@@ -18,7 +18,9 @@
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
+import android.content.Context;
import android.os.Bundle;
+import android.provider.SearchIndexableResource;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -26,8 +28,13 @@
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
-public class ZenModeVisualInterruptionSettings extends ZenModeSettingsBase {
+import java.util.Arrays;
+import java.util.List;
+
+public class ZenModeVisualInterruptionSettings extends ZenModeSettingsBase implements Indexable {
private static final String KEY_SCREEN_OFF = "screenOff";
private static final String KEY_SCREEN_ON = "screenOn";
@@ -122,4 +129,18 @@
suppressedVisualEffects);
NotificationManager.from(mContext).setNotificationPolicy(mPolicy);
}
+
+ /**
+ * For Search.
+ */
+ 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_visual_interruptions_settings;
+ return Arrays.asList(sir);
+ }
+ };
}
diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java
index 5126727..a694603 100644
--- a/src/com/android/settings/password/ChooseLockGeneric.java
+++ b/src/com/android/settings/password/ChooseLockGeneric.java
@@ -179,6 +179,8 @@
.getBooleanExtra(CONFIRM_CREDENTIALS, true);
if (getActivity() instanceof ChooseLockGeneric.InternalActivity) {
mPasswordConfirmed = !confirmCredentials;
+ mUserPassword = getActivity().getIntent().getStringExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD);
}
mHideDrawer = getActivity().getIntent().getBooleanExtra(EXTRA_HIDE_DRAWER, false);
@@ -198,6 +200,10 @@
mEncryptionRequestQuality = savedInstanceState.getInt(ENCRYPT_REQUESTED_QUALITY);
mEncryptionRequestDisabled = savedInstanceState.getBoolean(
ENCRYPT_REQUESTED_DISABLED);
+ if (mUserPassword == null) {
+ mUserPassword = savedInstanceState.getString(
+ ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD);
+ }
}
// a) If this is started from other user, use that user id.
@@ -268,6 +274,10 @@
// Forward the target user id to ChooseLockGeneric.
chooseLockGenericIntent.putExtra(Intent.EXTRA_USER_ID, mUserId);
chooseLockGenericIntent.putExtra(CONFIRM_CREDENTIALS, !mPasswordConfirmed);
+ if (mUserPassword != null) {
+ chooseLockGenericIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD,
+ mUserPassword);
+ }
startActivityForResult(chooseLockGenericIntent, SKIP_FINGERPRINT_REQUEST);
return true;
} else {
@@ -393,6 +403,9 @@
outState.putBoolean(WAITING_FOR_CONFIRMATION, mWaitingForConfirmation);
outState.putInt(ENCRYPT_REQUESTED_QUALITY, mEncryptionRequestQuality);
outState.putBoolean(ENCRYPT_REQUESTED_DISABLED, mEncryptionRequestDisabled);
+ if (mUserPassword != null) {
+ outState.putString(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, mUserPassword);
+ }
}
private void updatePreferencesOrFinish(boolean isRecreatingActivity) {
@@ -580,7 +593,8 @@
.setUserId(mUserId);
if (mHasChallenge) {
builder.setChallenge(mChallenge);
- } else {
+ }
+ if (mUserPassword != null) {
builder.setPassword(mUserPassword);
}
return builder.build();
@@ -593,7 +607,8 @@
.setUserId(mUserId);
if (mHasChallenge) {
builder.setChallenge(mChallenge);
- } else {
+ }
+ if (mUserPassword != null) {
builder.setPattern(mUserPassword);
}
return builder.build();
diff --git a/src/com/android/settings/password/ChooseLockPassword.java b/src/com/android/settings/password/ChooseLockPassword.java
index d890956..9f5192d 100644
--- a/src/com/android/settings/password/ChooseLockPassword.java
+++ b/src/com/android/settings/password/ChooseLockPassword.java
@@ -105,6 +105,7 @@
mIntent = new Intent(context, ChooseLockPassword.class);
mIntent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, false);
mIntent.putExtra(EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, false);
+ mIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false);
}
public IntentBuilder setPasswordQuality(int quality) {
@@ -130,7 +131,6 @@
}
public IntentBuilder setPassword(String password) {
- mIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false);
mIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, password);
return this;
}
diff --git a/src/com/android/settings/password/ChooseLockPattern.java b/src/com/android/settings/password/ChooseLockPattern.java
index e4698ba..7cd9db8 100644
--- a/src/com/android/settings/password/ChooseLockPattern.java
+++ b/src/com/android/settings/password/ChooseLockPattern.java
@@ -95,6 +95,7 @@
mIntent = new Intent(context, ChooseLockPattern.class);
mIntent.putExtra(EncryptionInterstitial.EXTRA_REQUIRE_PASSWORD, false);
mIntent.putExtra(ChooseLockGeneric.CONFIRM_CREDENTIALS, false);
+ mIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false);
}
public IntentBuilder setUserId(int userId) {
@@ -109,7 +110,6 @@
}
public IntentBuilder setPattern(String pattern) {
- mIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false);
mIntent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_PASSWORD, pattern);
return this;
}
diff --git a/src/com/android/settings/qstile/DevelopmentTileConfigActivity.java b/src/com/android/settings/qstile/DevelopmentTileConfigActivity.java
deleted file mode 100644
index 5968d7a..0000000
--- a/src/com/android/settings/qstile/DevelopmentTileConfigActivity.java
+++ /dev/null
@@ -1,99 +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.qstile;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.os.Bundle;
-import android.service.quicksettings.TileService;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.Preference;
-
-import com.android.settings.SettingsActivity;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.core.instrumentation.Instrumentable;
-
-public class DevelopmentTileConfigActivity extends SettingsActivity {
-
- @Override
- public Intent getIntent() {
- Intent modIntent = new Intent(super.getIntent())
- .putExtra(EXTRA_SHOW_FRAGMENT, DevelopmentTileConfigFragment.class.getName())
- .putExtra(EXTRA_HIDE_DRAWER, true);
- return modIntent;
- }
-
- @Override
- protected boolean isValidFragment(String fragmentName) {
- return (DevelopmentTileConfigFragment.class.getName().equals(fragmentName));
- }
-
- public static class DevelopmentTileConfigFragment extends SettingsPreferenceFragment
- implements Preference.OnPreferenceChangeListener {
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
-
- Context context = getPrefContext();
- setPreferenceScreen(getPreferenceManager().createPreferenceScreen(context));
- getPreferenceScreen().removeAll();
-
- Intent intent = new Intent(TileService.ACTION_QS_TILE)
- .setPackage(context.getPackageName());
- PackageManager pm = getPackageManager();
- for (ResolveInfo info :
- pm.queryIntentServices(intent, PackageManager.MATCH_DISABLED_COMPONENTS)) {
- ServiceInfo sInfo = info.serviceInfo;
- int enabledSetting = pm.getComponentEnabledSetting(
- new ComponentName(sInfo.packageName, sInfo.name));
- boolean checked = enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED
- || ((enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT)
- && sInfo.enabled);
-
- SwitchPreference preference = new SwitchPreference(context);
- preference.setTitle(sInfo.loadLabel(pm));
- preference.setIcon(sInfo.icon);
- preference.setKey(sInfo.name);
- preference.setChecked(checked);
- preference.setPersistent(false);
- preference.setOnPreferenceChangeListener(this);
- getPreferenceScreen().addPreference(preference);
- }
- }
-
- @Override
- public int getMetricsCategory() {
- return Instrumentable.METRICS_CATEGORY_UNKNOWN;
- }
-
- @Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
- ComponentName cn = new ComponentName(
- getPrefContext().getPackageName(), preference.getKey());
- getPackageManager().setComponentEnabledSetting(cn, (Boolean) newValue
- ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
- : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
- PackageManager.DONT_KILL_APP);
- return true;
- }
- }
-}
\ No newline at end of file
diff --git a/src/com/android/settings/search/AccessibilityServiceResultLoader.java b/src/com/android/settings/search/AccessibilityServiceResultLoader.java
index 7ffbcfc..345ab30 100644
--- a/src/com/android/settings/search/AccessibilityServiceResultLoader.java
+++ b/src/com/android/settings/search/AccessibilityServiceResultLoader.java
@@ -26,8 +26,10 @@
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.graphics.drawable.Drawable;
+import android.os.UserHandle;
import android.support.annotation.VisibleForTesting;
import android.support.v4.content.ContextCompat;
+import android.util.IconDrawableFactory;
import android.view.accessibility.AccessibilityManager;
import com.android.settings.R;
@@ -44,17 +46,22 @@
private static final int NAME_NO_MATCH = -1;
+ private final Context mContext;
+
private List<String> mBreadcrumb;
private SiteMapManager mSiteMapManager;
@VisibleForTesting
final String mQuery;
private final AccessibilityManager mAccessibilityManager;
private final PackageManager mPackageManager;
+ private final int mUserId;
public AccessibilityServiceResultLoader(Context context, String query,
SiteMapManager mapManager) {
super(context);
+ mContext = context;
+ mUserId = UserHandle.myUserId();
mSiteMapManager = mapManager;
mPackageManager = context.getPackageManager();
mAccessibilityManager =
@@ -68,6 +75,7 @@
final Context context = getContext();
final List<AccessibilityServiceInfo> services = mAccessibilityManager
.getInstalledAccessibilityServiceList();
+ final IconDrawableFactory iconFactory = IconDrawableFactory.newInstance(mContext);
final String screenTitle = context.getString(R.string.accessibility_settings);
for (AccessibilityServiceInfo service : services) {
if (service == null) {
@@ -87,11 +95,14 @@
if (resolveInfo.getIconResource() == 0) {
icon = ContextCompat.getDrawable(context, R.mipmap.ic_accessibility_generic);
} else {
- icon = resolveInfo.loadIcon(mPackageManager);
+ icon = iconFactory.getBadgedIcon(
+ resolveInfo.serviceInfo,
+ resolveInfo.serviceInfo.applicationInfo,
+ mUserId);
}
final String componentName = new ComponentName(serviceInfo.packageName,
serviceInfo.name).flattenToString();
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(context,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
AccessibilitySettings.class.getName(), componentName, screenTitle);
results.add(new SearchResult.Builder()
diff --git a/src/com/android/settings/search/DatabaseIndexingUtils.java b/src/com/android/settings/search/DatabaseIndexingUtils.java
index ce58256..8d63ea5 100644
--- a/src/com/android/settings/search/DatabaseIndexingUtils.java
+++ b/src/com/android/settings/search/DatabaseIndexingUtils.java
@@ -46,21 +46,28 @@
"SEARCH_INDEX_DATA_PROVIDER";
/**
- * Builds intent into a subsetting.
+ * Builds intent that launches the search destination as a sub-setting.
*/
- public static Intent buildSubsettingIntent(Context context, String className, String key,
+ public static Intent buildSearchResultPageIntent(Context context, String className, String key,
String screenTitle) {
+ return buildSearchResultPageIntent(context, className, key, screenTitle,
+ MetricsProto.MetricsEvent.DASHBOARD_SEARCH_RESULTS);
+ }
+
+ public static Intent buildSearchResultPageIntent(Context context, String className, String key,
+ String screenTitle, int sourceMetricsCategory) {
final Bundle args = new Bundle();
args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
- return Utils.onBuildStartFragmentIntent(context,
- className, args, null, 0, screenTitle, false,
- MetricsProto.MetricsEvent.DASHBOARD_SEARCH_RESULTS);
+ final Intent searchDestination = Utils.onBuildStartFragmentIntent(context,
+ className, args, null, 0, screenTitle, false, sourceMetricsCategory);
+ searchDestination.putExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key);
+ searchDestination.setClass(context, SearchResultTrampoline.class);
+ return searchDestination;
}
/**
* @param className which wil provide the map between from {@link Uri}s to
- * {@link PreferenceControllerMixin}
- * @param context
+ * {@link PreferenceControllerMixin}
* @return A map between {@link Uri}s and {@link PreferenceControllerMixin}s to get the payload
* types for Settings.
*/
@@ -85,7 +92,7 @@
List<AbstractPreferenceController> controllers =
provider.getPreferenceControllers(context);
- if (controllers == null ) {
+ if (controllers == null) {
return null;
}
@@ -106,7 +113,7 @@
/**
* @param uriMap Map between the {@link PreferenceControllerMixin} keys
* and the controllers themselves.
- * @param key The look-up key
+ * @param key The look-up key
* @return The Payload from the {@link PreferenceControllerMixin} specified by the key,
* if it exists. Otherwise null.
*/
diff --git a/src/com/android/settings/search/InputDeviceResultLoader.java b/src/com/android/settings/search/InputDeviceResultLoader.java
index 61e1ad1..e5e6553 100644
--- a/src/com/android/settings/search/InputDeviceResultLoader.java
+++ b/src/com/android/settings/search/InputDeviceResultLoader.java
@@ -107,7 +107,7 @@
: context.getString(R.string.keyboard_layout_default_label);
final String key = deviceName;
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(context,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
PHYSICAL_KEYBOARD_FRAGMENT, key, screenTitle);
results.add(new SearchResult.Builder()
.setTitle(deviceName)
@@ -140,7 +140,7 @@
final ServiceInfo serviceInfo = info.getServiceInfo();
final String key = new ComponentName(serviceInfo.packageName, serviceInfo.name)
.flattenToString();
- final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(context,
+ final Intent intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context,
VIRTUAL_KEYBOARD_FRAGMENT, key, screenTitle);
results.add(new SearchResult.Builder()
.setTitle(title)
diff --git a/src/com/android/settings/search/InstalledAppResultLoader.java b/src/com/android/settings/search/InstalledAppResultLoader.java
index 69a4693..7645c15 100644
--- a/src/com/android/settings/search/InstalledAppResultLoader.java
+++ b/src/com/android/settings/search/InstalledAppResultLoader.java
@@ -33,7 +33,7 @@
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.dashboard.SiteMapManager;
import com.android.settings.utils.AsyncLoader;
import com.android.settingslib.wrapper.PackageManagerWrapper;
diff --git a/src/com/android/settings/search/IntentSearchViewHolder.java b/src/com/android/settings/search/IntentSearchViewHolder.java
index 711d08e..8f6aa2c 100644
--- a/src/com/android/settings/search/IntentSearchViewHolder.java
+++ b/src/com/android/settings/search/IntentSearchViewHolder.java
@@ -20,6 +20,7 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.UserHandle;
+import android.support.annotation.VisibleForTesting;
import android.util.Log;
import android.view.View;
@@ -34,6 +35,8 @@
public class IntentSearchViewHolder extends SearchViewHolder {
private static final String TAG = "IntentSearchViewHolder";
+ @VisibleForTesting
+ static final int REQUEST_CODE_NO_OP = 0;
public IntentSearchViewHolder(View view) {
super(view);
@@ -60,7 +63,7 @@
final PackageManager pm = fragment.getActivity().getPackageManager();
final List<ResolveInfo> info = pm.queryIntentActivities(intent, 0 /* flags */);
if (info != null && !info.isEmpty()) {
- fragment.startActivity(intent);
+ fragment.startActivityForResult(intent, REQUEST_CODE_NO_OP);
} else {
Log.e(TAG, "Cannot launch search result, title: "
+ result.title + ", " + intent);
diff --git a/src/com/android/settings/search/SearchFeatureProvider.java b/src/com/android/settings/search/SearchFeatureProvider.java
index 956808d..4df8203 100644
--- a/src/com/android/settings/search/SearchFeatureProvider.java
+++ b/src/com/android/settings/search/SearchFeatureProvider.java
@@ -16,6 +16,8 @@
*/
package com.android.settings.search;
+import android.annotation.NonNull;
+import android.content.ComponentName;
import android.content.Context;
import android.view.View;
@@ -33,6 +35,15 @@
boolean isEnabled(Context context);
/**
+ * Ensures the caller has necessary privilege to launch search result page.
+ *
+ * @throws IllegalArgumentException when caller is null
+ * @throws SecurityException when caller is not allowed to launch search result page
+ */
+ void verifyLaunchSearchResultPageCaller(Context context, @NonNull ComponentName caller)
+ throws SecurityException, IllegalArgumentException;
+
+ /**
* Returns a new loader to search in index database.
*/
DatabaseResultLoader getDatabaseSearchLoader(Context context, String query);
diff --git a/src/com/android/settings/search/SearchFeatureProviderImpl.java b/src/com/android/settings/search/SearchFeatureProviderImpl.java
index 420b847..8c4883e 100644
--- a/src/com/android/settings/search/SearchFeatureProviderImpl.java
+++ b/src/com/android/settings/search/SearchFeatureProviderImpl.java
@@ -17,6 +17,7 @@
package com.android.settings.search;
+import android.content.ComponentName;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
@@ -43,6 +44,18 @@
}
@Override
+ public void verifyLaunchSearchResultPageCaller(Context context, ComponentName caller) {
+ if (caller == null) {
+ throw new IllegalArgumentException("ExternalSettingsTrampoline intents "
+ + "must be called with startActivityForResult");
+ }
+ final String packageName = caller.getPackageName();
+ if (!TextUtils.equals(packageName, context.getPackageName())) {
+ throw new SecurityException("Only Settings app can launch search result page");
+ }
+ }
+
+ @Override
public DatabaseResultLoader getDatabaseSearchLoader(Context context, String query) {
return new DatabaseResultLoader(context, cleanQuery(query), getSiteMapManager());
}
diff --git a/src/com/android/settings/search/SearchFragment.java b/src/com/android/settings/search/SearchFragment.java
index 092404c..ca951c6 100644
--- a/src/com/android/settings/search/SearchFragment.java
+++ b/src/com/android/settings/search/SearchFragment.java
@@ -75,7 +75,6 @@
private static final String STATE_QUERY = "state_query";
private static final String STATE_SHOWING_SAVED_QUERY = "state_showing_saved_query";
private static final String STATE_NEVER_ENTERED_QUERY = "state_never_entered_query";
- private static final String STATE_RESULT_CLICK_COUNT = "state_result_click_count";
static final class SearchLoaderId {
// Search Query IDs
@@ -96,17 +95,12 @@
@VisibleForTesting
AtomicInteger mUnfinishedLoadersCount = new AtomicInteger(NUM_QUERY_LOADERS);
- // Logging
- @VisibleForTesting
- static final String RESULT_CLICK_COUNT = "settings_search_result_click_count";
-
@VisibleForTesting
String mQuery;
private boolean mNeverEnteredQuery = true;
@VisibleForTesting
boolean mShowingSavedQuery;
- private int mResultClickCount;
private MetricsFeatureProvider mMetricsFeatureProvider;
@VisibleForTesting
SavedQueryController mSavedQueryController;
@@ -161,7 +155,6 @@
if (savedInstanceState != null) {
mQuery = savedInstanceState.getString(STATE_QUERY);
mNeverEnteredQuery = savedInstanceState.getBoolean(STATE_NEVER_ENTERED_QUERY);
- mResultClickCount = savedInstanceState.getInt(STATE_RESULT_CLICK_COUNT);
mShowingSavedQuery = savedInstanceState.getBoolean(STATE_SHOWING_SAVED_QUERY);
} else {
mShowingSavedQuery = true;
@@ -244,7 +237,6 @@
super.onStop();
final Activity activity = getActivity();
if (activity != null && activity.isFinishing()) {
- mMetricsFeatureProvider.histogram(activity, RESULT_CLICK_COUNT, mResultClickCount);
if (mNeverEnteredQuery) {
mMetricsFeatureProvider.action(activity,
MetricsEvent.ACTION_LEAVE_SEARCH_RESULT_WITHOUT_QUERY);
@@ -258,7 +250,6 @@
outState.putString(STATE_QUERY, mQuery);
outState.putBoolean(STATE_NEVER_ENTERED_QUERY, mNeverEnteredQuery);
outState.putBoolean(STATE_SHOWING_SAVED_QUERY, mShowingSavedQuery);
- outState.putInt(STATE_RESULT_CLICK_COUNT, mResultClickCount);
}
@Override
@@ -276,7 +267,6 @@
mNoResultsView.setVisibility(View.GONE);
}
- mResultClickCount = 0;
mNeverEnteredQuery = false;
mQuery = query;
@@ -335,7 +325,6 @@
if (mUnfinishedLoadersCount.decrementAndGet() != 0) {
return;
}
-
mSearchAdapter.notifyResultsLoaded();
}
@@ -372,7 +361,6 @@
logSearchResultClicked(resultViewHolder, result, logTaggedData);
mSearchFeatureProvider.searchResultClicked(getContext(), mQuery, result);
mSavedQueryController.saveQuery(mQuery);
- mResultClickCount++;
}
public void onSearchResultsDisplayed(int resultCount) {
@@ -384,6 +372,8 @@
mNoResultsView.setVisibility(View.GONE);
mResultsRecyclerView.scrollToPosition(0);
}
+ mMetricsFeatureProvider.action(
+ getVisibilityLogger(), MetricsEvent.ACTION_SEARCH_RESULTS, 1);
mSearchFeatureProvider.showFeedbackButton(this, getView());
}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index c946d46..7252e2d 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -17,16 +17,15 @@
package com.android.settings.search;
import android.provider.SearchIndexableResource;
-import android.support.annotation.DrawableRes;
import android.support.annotation.VisibleForTesting;
import android.support.annotation.XmlRes;
import android.text.TextUtils;
+
import com.android.settings.DateTimeSettings;
import com.android.settings.DeviceInfoSettings;
import com.android.settings.DisplaySettings;
import com.android.settings.EncryptionAndCredential;
import com.android.settings.LegalSettings;
-import com.android.settings.R;
import com.android.settings.ScreenPinningSettings;
import com.android.settings.SecuritySettings;
import com.android.settings.accessibility.AccessibilitySettings;
@@ -41,11 +40,10 @@
import com.android.settings.backup.BackupSettingsFragment;
import com.android.settings.bluetooth.BluetoothSettings;
import com.android.settings.connecteddevice.ConnectedDeviceDashboardFragment;
-import com.android.settings.datausage.DataPlanUsageSummary;
import com.android.settings.datausage.DataUsageMeteredSettings;
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.Status;
import com.android.settings.deviceinfo.StorageDashboardFragment;
import com.android.settings.deviceinfo.StorageSettings;
@@ -74,7 +72,7 @@
import com.android.settings.notification.ChannelImportanceSettings;
import com.android.settings.notification.ConfigureNotificationSettings;
import com.android.settings.notification.SoundSettings;
-import com.android.settings.notification.ZenModePrioritySettings;
+import com.android.settings.notification.ZenModeBehaviorSettings;
import com.android.settings.notification.ZenModeSettings;
import com.android.settings.notification.ZenModeVisualInterruptionSettings;
import com.android.settings.print.PrintSettingsFragment;
@@ -90,6 +88,7 @@
import com.android.settings.wifi.ConfigureWifiSettings;
import com.android.settings.wifi.SavedAccessPointsWifiSettings;
import com.android.settings.wifi.WifiSettings;
+
import java.util.Collection;
import java.util.HashMap;
@@ -102,23 +101,21 @@
public static final String SUBSETTING_TARGET_PACKAGE = "subsetting_target_package";
@XmlRes
- public static final int NO_DATA_RES_ID = 0;
+ public static final int NO_RES_ID = 0;
@VisibleForTesting
static final HashMap<String, SearchIndexableResource> sResMap = new HashMap<>();
@VisibleForTesting
- static void addIndex(Class<?> indexClass, @XmlRes int xmlResId,
- @DrawableRes int iconResId) {
- addIndex(indexClass, xmlResId, iconResId, null /* targetAction */);
+ static void addIndex(Class<?> indexClass) {
+ addIndex(indexClass, null /* targetAction */);
}
@VisibleForTesting
- static void addIndex(Class<?> indexClass, @XmlRes int xmlResId,
- @DrawableRes int iconResId, String targetAction) {
+ static void addIndex(Class<?> indexClass, String targetAction) {
String className = indexClass.getName();
- SearchIndexableResource resource =
- new SearchIndexableResource(0, xmlResId, className, iconResId);
+ SearchIndexableResource resource = new SearchIndexableResource(
+ 0 /* rank */, NO_RES_ID, className, NO_RES_ID);
if (!TextUtils.isEmpty(targetAction)) {
resource.intentAction = targetAction;
@@ -129,97 +126,73 @@
}
static {
- addIndex(WifiSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless);
- addIndex(NetworkDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless);
- addIndex(ConfigureWifiSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_wireless);
- addIndex(SavedAccessPointsWifiSettings.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_wireless);
- addIndex(BluetoothSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_bluetooth);
- addIndex(SimSettings.class, NO_DATA_RES_ID, R.drawable.ic_sim_sd);
- addIndex(DataPlanUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
- addIndex(DataUsageSummary.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
- addIndex(DataUsageMeteredSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_data_usage);
- addIndex(ScreenZoomSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
- addIndex(DisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display,
- "android.settings.DISPLAY_SETTINGS");
- addIndex(AmbientDisplaySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
- addIndex(WallpaperTypeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
- addIndex(ConfigureNotificationSettings.class,
- R.xml.configure_notification_settings, R.drawable.ic_settings_notifications);
- addIndex(AppAndNotificationDashboardFragment.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_applications);
- addIndex(SoundSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_sound,
- "android.settings.SOUND_SETTINGS");
- addIndex(ZenModeSettings.class,
- R.xml.zen_mode_settings, R.drawable.ic_settings_notifications);
- addIndex(ZenModePrioritySettings.class,
- R.xml.zen_mode_priority_settings, R.drawable.ic_settings_notifications);
- addIndex(StorageSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
- addIndex(PowerUsageSummary.class,
- R.xml.power_usage_summary, R.drawable.ic_settings_battery);
- addIndex(PowerUsageAdvanced.class, NO_DATA_RES_ID, R.drawable.ic_settings_battery);
- addIndex(BatterySaverSettings.class,
- R.xml.battery_saver_settings, R.drawable.ic_settings_battery);
- addIndex(DefaultAppSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
- addIndex(ManageAssist.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
- addIndex(SpecialAccessSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_applications);
- addIndex(UserSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_multiuser);
- addIndex(AssistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
- addIndex(PickupGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
- addIndex(DoubleTapScreenSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
- addIndex(DoubleTapPowerSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
- addIndex(DoubleTwistGestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
- addIndex(SwipeToNotificationSettings.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_gestures);
- addIndex(GestureSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_gestures);
- addIndex(LanguageAndInputSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
- addIndex(LocationSettings.class, R.xml.location_settings, R.drawable.ic_settings_location);
- addIndex(ScanningSettings.class, R.xml.location_scanning, R.drawable.ic_settings_location);
- addIndex(SecuritySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
- addIndex(EncryptionAndCredential.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
- addIndex(ScreenPinningSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_security);
- addIndex(UserAndAccountDashboardFragment.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_accounts);
- addIndex(VirtualKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
- addIndex(AvailableVirtualKeyboardFragment.class,
- NO_DATA_RES_ID, R.drawable.ic_settings_language);
- addIndex(PhysicalKeyboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
- addIndex(BackupSettingsActivity.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup);
- addIndex(BackupSettingsFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_backup);
- addIndex(DateTimeSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_date_time);
- addIndex(AccessibilitySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility);
- addIndex(PrintSettingsFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_print);
- addIndex(DevelopmentSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_development);
- addIndex(DeviceInfoSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
- addIndex(Status.class, NO_DATA_RES_ID, 0 /* icon */);
- addIndex(LegalSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
- addIndex(ZenModeVisualInterruptionSettings.class,
- R.xml.zen_mode_visual_interruptions_settings,
- R.drawable.ic_settings_notifications);
- addIndex(SystemDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
- addIndex(ResetDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_restore);
- addIndex(StorageDashboardFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_storage);
- addIndex(ConnectedDeviceDashboardFragment.class, NO_DATA_RES_ID,
- R.drawable.ic_devices_other);
- addIndex(EnterprisePrivacySettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_about);
- addIndex(PaymentSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_nfc_payment);
- addIndex(TextToSpeechSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_accessibility);
- addIndex(
- TtsEnginePreferenceFragment.class, NO_DATA_RES_ID, R.drawable.ic_settings_language);
- addIndex(LockscreenDashboardFragment.class, R.xml.security_lockscreen_settings,
- R.drawable.ic_settings_security);
- addIndex(MagnificationPreferenceFragment.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_accessibility);
- addIndex(AccessibilityShortcutPreferenceFragment.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_accessibility);
- addIndex(ChannelImportanceSettings.class, NO_DATA_RES_ID,
- R.drawable.ic_settings_notifications);
- addIndex(DreamSettings.class, NO_DATA_RES_ID, R.drawable.ic_settings_display);
- addIndex(SupportDashboardActivity.class, NO_DATA_RES_ID, R.drawable.ic_help);
- addIndex(
- AutomaticStorageManagerSettings.class,
- NO_DATA_RES_ID,
- R.drawable.ic_settings_storage);
+ addIndex(WifiSettings.class);
+ addIndex(NetworkDashboardFragment.class);
+ addIndex(ConfigureWifiSettings.class);
+ addIndex(SavedAccessPointsWifiSettings.class);
+ addIndex(BluetoothSettings.class);
+ addIndex(SimSettings.class);
+ addIndex(DataUsageSummary.class);
+ addIndex(DataUsageMeteredSettings.class);
+ addIndex(ScreenZoomSettings.class);
+ addIndex(DisplaySettings.class, "android.settings.DISPLAY_SETTINGS");
+ addIndex(AmbientDisplaySettings.class);
+ addIndex(WallpaperTypeSettings.class);
+ addIndex(AppAndNotificationDashboardFragment.class);
+ addIndex(SoundSettings.class, "android.settings.SOUND_SETTINGS");
+ addIndex(ZenModeSettings.class);
+ addIndex(StorageSettings.class);
+ addIndex(PowerUsageAdvanced.class);
+ addIndex(DefaultAppSettings.class);
+ addIndex(ManageAssist.class);
+ addIndex(SpecialAccessSettings.class);
+ addIndex(UserSettings.class);
+ addIndex(AssistGestureSettings.class);
+ addIndex(PickupGestureSettings.class);
+ addIndex(DoubleTapScreenSettings.class);
+ addIndex(DoubleTapPowerSettings.class);
+ addIndex(DoubleTwistGestureSettings.class);
+ addIndex(SwipeToNotificationSettings.class);
+ addIndex(GestureSettings.class);
+ addIndex(LanguageAndInputSettings.class);
+ addIndex(LocationSettings.class);
+ addIndex(ScanningSettings.class);
+ addIndex(SecuritySettings.class);
+ addIndex(EncryptionAndCredential.class);
+ addIndex(ScreenPinningSettings.class);
+ addIndex(UserAndAccountDashboardFragment.class);
+ addIndex(VirtualKeyboardFragment.class);
+ addIndex(AvailableVirtualKeyboardFragment.class);
+ addIndex(PhysicalKeyboardFragment.class);
+ addIndex(BackupSettingsActivity.class);
+ addIndex(BackupSettingsFragment.class);
+ addIndex(DateTimeSettings.class);
+ addIndex(AccessibilitySettings.class);
+ 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(EnterprisePrivacySettings.class);
+ addIndex(PaymentSettings.class);
+ addIndex(TextToSpeechSettings.class);
+ addIndex(TtsEnginePreferenceFragment.class);
+ addIndex(MagnificationPreferenceFragment.class);
+ addIndex(AccessibilityShortcutPreferenceFragment.class);
+ addIndex(ChannelImportanceSettings.class);
+ addIndex(DreamSettings.class);
+ addIndex(SupportDashboardActivity.class);
+ addIndex(AutomaticStorageManagerSettings.class);
+ addIndex(ConfigureNotificationSettings.class);
+ addIndex(PowerUsageSummary.class);
+ addIndex(BatterySaverSettings.class);
+ addIndex(LockscreenDashboardFragment.class);
+ addIndex(ZenModeBehaviorSettings.class);
+ addIndex(ZenModeVisualInterruptionSettings.class);
}
private SearchIndexableResources() {
diff --git a/src/com/android/settings/search/SearchResultTrampoline.java b/src/com/android/settings/search/SearchResultTrampoline.java
new file mode 100644
index 0000000..3bbe6bd
--- /dev/null
+++ b/src/com/android/settings/search/SearchResultTrampoline.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.android.settings.SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.settings.SettingsActivity;
+import com.android.settings.SubSettings;
+import com.android.settings.overlay.FeatureFactory;
+
+/**
+ * A trampoline activity that launches setting result page.
+ */
+public class SearchResultTrampoline extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // First make sure caller has privilege to launch a search result page.
+ FeatureFactory.getFactory(this)
+ .getSearchFeatureProvider()
+ .verifyLaunchSearchResultPageCaller(this, getCallingActivity());
+ // Didn't crash, proceed and launch the result as a subsetting.
+ final Intent intent = getIntent();
+
+ // Hack to take EXTRA_FRAGMENT_ARG_KEY from intent and set into
+ // EXTRA_SHOW_FRAGMENT_ARGUMENTS. This is necessary because intent could be from external
+ // caller and args may not persisted.
+ final String settingKey = intent.getStringExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY);
+ final Bundle args = new Bundle();
+ args.putString(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, settingKey);
+ intent.putExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS, args);
+
+ // Reroute request to SubSetting.
+ intent.setClass(this /* context */, SubSettings.class)
+ .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+ startActivity(intent);
+
+ // Done.
+ finish();
+ }
+
+}
diff --git a/src/com/android/settings/search/indexing/IndexData.java b/src/com/android/settings/search/indexing/IndexData.java
index 0e1fa2d..9dad3fe 100644
--- a/src/com/android/settings/search/indexing/IndexData.java
+++ b/src/com/android/settings/search/indexing/IndexData.java
@@ -273,7 +273,7 @@
|| TextUtils.equals(mIntentTargetPackage,
SearchIndexableResources.SUBSETTING_TARGET_PACKAGE)) {
// Action is null, we will launch it as a sub-setting
- intent = DatabaseIndexingUtils.buildSubsettingIntent(context, mClassName, mKey,
+ intent = DatabaseIndexingUtils.buildSearchResultPageIntent(context, mClassName, mKey,
mScreenTitle);
} else {
intent = new Intent(mIntentAction);
diff --git a/src/com/android/settings/search/indexing/IndexDataConverter.java b/src/com/android/settings/search/indexing/IndexDataConverter.java
index 487132b..2b875c3 100644
--- a/src/com/android/settings/search/indexing/IndexDataConverter.java
+++ b/src/com/android/settings/search/indexing/IndexDataConverter.java
@@ -19,6 +19,7 @@
import android.annotation.Nullable;
import android.content.Context;
+import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.provider.SearchIndexableData;
import android.provider.SearchIndexableResource;
@@ -29,7 +30,6 @@
import android.util.Xml;
import com.android.settings.core.PreferenceControllerMixin;
-
import com.android.settings.search.DatabaseIndexingUtils;
import com.android.settings.search.Indexable;
import com.android.settings.search.ResultPayload;
@@ -43,7 +43,6 @@
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
-import java.util.Locale;
import java.util.Map;
import java.util.Set;
@@ -307,9 +306,11 @@
resourceIndexData.add(headerBuilder.build(mContext));
}
} catch (XmlPullParserException e) {
- throw new RuntimeException("Error parsing PreferenceScreen", e);
+ Log.w(LOG_TAG, "XML Error parsing PreferenceScreen: ", e);
} catch (IOException e) {
- throw new RuntimeException("Error parsing PreferenceScreen", e);
+ Log.w(LOG_TAG, "IO Error parsing PreferenceScreen: ", e);
+ } catch (Resources.NotFoundException e) {
+ Log.w(LOG_TAG, "Resoucre not found error parsing PreferenceScreen: ", e);
} finally {
if (parser != null) parser.close();
}
diff --git a/src/com/android/settings/system/ResetDashboardFragment.java b/src/com/android/settings/system/ResetDashboardFragment.java
index 48295a4..b7b6b77 100644
--- a/src/com/android/settings/system/ResetDashboardFragment.java
+++ b/src/com/android/settings/system/ResetDashboardFragment.java
@@ -21,7 +21,7 @@
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
-import com.android.settings.applications.ResetAppPrefPreferenceController;
+import com.android.settings.applications.manageapplications.ResetAppPrefPreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.network.NetworkResetPreferenceController;
import com.android.settings.search.BaseSearchIndexProvider;
diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java
index 362ca1f..0e9fc39 100644
--- a/src/com/android/settings/webview/WebViewAppPicker.java
+++ b/src/com/android/settings/webview/WebViewAppPicker.java
@@ -58,14 +58,20 @@
}
@Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.webview_app_settings;
+ }
+
+ @Override
protected List<DefaultAppInfo> getCandidates() {
final List<DefaultAppInfo> packageInfoList = new ArrayList<DefaultAppInfo>();
- List<ApplicationInfo> pkgs =
- getWebViewUpdateServiceWrapper().getValidWebViewApplicationInfos(getContext());
+ final Context context = getContext();
+ final WebViewUpdateServiceWrapper webViewUpdateService = getWebViewUpdateServiceWrapper();
+ final List<ApplicationInfo> pkgs =
+ webViewUpdateService.getValidWebViewApplicationInfos(context);
for (ApplicationInfo ai : pkgs) {
- packageInfoList.add(createDefaultAppInfo(mPm, ai,
- getDisabledReason(getWebViewUpdateServiceWrapper(),
- getContext(), ai.packageName)));
+ packageInfoList.add(createDefaultAppInfo(context, mPm, ai,
+ getDisabledReason(webViewUpdateService, context, ai.packageName)));
}
return packageInfoList;
}
@@ -112,9 +118,9 @@
}
private static class WebViewAppInfo extends DefaultAppInfo {
- public WebViewAppInfo(PackageManagerWrapper pm, PackageItemInfo packageItemInfo,
- String summary, boolean enabled) {
- super(pm, packageItemInfo, summary, enabled);
+ public WebViewAppInfo(Context context, PackageManagerWrapper pm,
+ PackageItemInfo packageItemInfo, String summary, boolean enabled) {
+ super(context, pm, packageItemInfo, summary, enabled);
}
@Override
@@ -131,9 +137,9 @@
@VisibleForTesting
- DefaultAppInfo createDefaultAppInfo(PackageManagerWrapper pm, PackageItemInfo packageItemInfo,
- String disabledReason) {
- return new WebViewAppInfo(pm, packageItemInfo, disabledReason,
+ DefaultAppInfo createDefaultAppInfo(Context context, PackageManagerWrapper pm,
+ PackageItemInfo packageItemInfo, String disabledReason) {
+ return new WebViewAppInfo(context, pm, packageItemInfo, disabledReason,
TextUtils.isEmpty(disabledReason) /* enabled */);
}
diff --git a/src/com/android/settings/webview/WebViewAppPreferenceController.java b/src/com/android/settings/webview/WebViewAppPreferenceController.java
index 96db801..9410af7 100644
--- a/src/com/android/settings/webview/WebViewAppPreferenceController.java
+++ b/src/com/android/settings/webview/WebViewAppPreferenceController.java
@@ -46,7 +46,7 @@
@Override
public DefaultAppInfo getDefaultAppInfo() {
PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage();
- return new DefaultAppInfo(mPackageManager,
+ return new DefaultAppInfo(mContext, mPackageManager,
currentPackage == null ? null : currentPackage.applicationInfo);
}
diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java
index 0d6b4dc..3fe438f 100755
--- a/src/com/android/settings/wfd/WifiDisplaySettings.java
+++ b/src/com/android/settings/wfd/WifiDisplaySettings.java
@@ -36,6 +36,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
+import android.os.ServiceManager;
import android.provider.Settings;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.ListPreference;
@@ -212,8 +213,13 @@
}
public static boolean isAvailable(Context context) {
- return context.getSystemService(Context.DISPLAY_SERVICE) != null
- && context.getSystemService(Context.WIFI_P2P_SERVICE) != null;
+ try {
+ return context.getSystemService(Context.DISPLAY_SERVICE) != null
+ && context.getSystemService(Context.WIFI_P2P_SERVICE) != null;
+ } catch (Exception e) {
+ // Service is not registered, so this is definitely not available.
+ return false;
+ }
}
private void scheduleUpdate(int changes) {
diff --git a/src/com/android/settings/widget/RadioButtonPickerFragment.java b/src/com/android/settings/widget/RadioButtonPickerFragment.java
index 6854793..f1df0a5 100644
--- a/src/com/android/settings/widget/RadioButtonPickerFragment.java
+++ b/src/com/android/settings/widget/RadioButtonPickerFragment.java
@@ -67,7 +67,12 @@
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
super.onCreatePreferences(savedInstanceState, rootKey);
- addPreferencesFromResource(R.xml.placeholder_prefs);
+ final int resId = getPreferenceScreenResId();
+ if (usePreferenceScreenTitle() && resId > 0) {
+ addPreferencesFromResource(resId);
+ } else {
+ addPreferencesFromResource(R.xml.placeholder_prefs);
+ }
updateCandidates();
}
@@ -111,6 +116,13 @@
}
/**
+ * Get the res id for static preference xml for this fragment.
+ */
+ protected int getPreferenceScreenResId() {
+ return -1;
+ }
+
+ /**
* A chance for subclasses to bind additional things to the preference.
*/
@VisibleForTesting(otherwise = VisibleForTesting.PROTECTED)
@@ -154,7 +166,7 @@
public RadioButtonPreference bindPreference(RadioButtonPreference pref,
String key, CandidateInfo info, String defaultKey) {
pref.setTitle(info.loadLabel());
- pref.setIcon(info.loadIcon());
+ Utils.setSafeIcon(pref, info.loadIcon());
pref.setKey(key);
if (TextUtils.equals(defaultKey, key)) {
pref.setChecked(true);
diff --git a/src/com/android/settings/WorkOnlyCategory.java b/src/com/android/settings/widget/WorkOnlyCategory.java
similarity index 90%
rename from src/com/android/settings/WorkOnlyCategory.java
rename to src/com/android/settings/widget/WorkOnlyCategory.java
index ca4c82d..53badb2 100644
--- a/src/com/android/settings/WorkOnlyCategory.java
+++ b/src/com/android/settings/widget/WorkOnlyCategory.java
@@ -12,13 +12,16 @@
* permissions and limitations under the License.
*/
-package com.android.settings;
+package com.android.settings.widget;
import android.content.Context;
import android.os.UserManager;
import android.support.v7.preference.PreferenceCategory;
import android.util.AttributeSet;
+import com.android.settings.SelfAvailablePreference;
+import com.android.settings.Utils;
+
/**
* A PreferenceCategory that is only visible when the device has a work profile.
*/
diff --git a/src/com/android/settings/widget/WorkOnlyCategoryPreferenceController.java b/src/com/android/settings/widget/WorkOnlyCategoryPreferenceController.java
new file mode 100644
index 0000000..a308b2f
--- /dev/null
+++ b/src/com/android/settings/widget/WorkOnlyCategoryPreferenceController.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.widget;
+
+import android.content.Context;
+
+import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.List;
+
+public class WorkOnlyCategoryPreferenceController extends AbstractPreferenceController
+ implements PreferenceControllerMixin {
+
+ private final String mKey;
+ private final List<AbstractPreferenceController> mChildren;
+
+ public WorkOnlyCategoryPreferenceController(Context context,
+ String key, List<AbstractPreferenceController> childrenControllers) {
+ super(context);
+ mKey = key;
+ mChildren = childrenControllers;
+ }
+
+ @Override
+ public boolean isAvailable() {
+ if (mChildren == null || mChildren.isEmpty()) {
+ return true;
+ }
+ // Category is available if any child is available
+ for (AbstractPreferenceController controller : mChildren) {
+ if (controller.isAvailable()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return mKey;
+ }
+}
diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java
index 3cf7f93..8ee340a 100644
--- a/src/com/android/settings/wifi/WifiConfigController.java
+++ b/src/com/android/settings/wifi/WifiConfigController.java
@@ -60,7 +60,7 @@
import com.android.settings.ProxySelector;
import com.android.settings.R;
-import com.android.settings.Utils;
+import com.android.settingslib.Utils;
import com.android.settingslib.wifi.AccessPoint;
import java.net.Inet4Address;
@@ -411,15 +411,23 @@
submit.setEnabled(isSubmittable());
}
+ boolean isValidPsk(String password) {
+ if (password.length() == 64 && password.matches("[0-9A-Fa-f]{64}")) {
+ return true;
+ } else if (password.length() >= 8 && password.length() <= 63) {
+ return true;
+ }
+ return false;
+ }
+
boolean isSubmittable() {
boolean enabled = false;
boolean passwordInvalid = false;
-
if (mPasswordView != null
&& ((mAccessPointSecurity == AccessPoint.SECURITY_WEP
&& mPasswordView.length() == 0)
|| (mAccessPointSecurity == AccessPoint.SECURITY_PSK
- && (mPasswordView.length() < 8 || mPasswordView.length() > 63)))) {
+ && !isValidPsk(mPasswordView.getText().toString())))) {
passwordInvalid = true;
}
if ((mSsidView != null && mSsidView.length() == 0)
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index 98af552..5490889 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -68,6 +68,7 @@
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;
@@ -870,12 +871,12 @@
private void addConnectedAccessPointPreference(AccessPoint connectedAp) {
final LongPressAccessPointPreference pref = getOrCreatePreference(connectedAp);
- // Save the state of the current access point in the bundle so that we can restore it
- // in the Wifi Network Details Fragment
- pref.getAccessPoint().saveWifiState(pref.getExtras());
-
// Launch details page on click.
pref.setOnPreferenceClickListener(preference -> {
+ // Save the state of the current access point in the bundle so that we can restore it
+ // in the Wifi Network Details Fragment
+ pref.getAccessPoint().saveWifiState(pref.getExtras());
+
SettingsActivity activity = (SettingsActivity) WifiSettings.this.getActivity();
activity.startPreferencePanel(this,
WifiNetworkDetailsFragment.class.getName(), pref.getExtras(),
@@ -1121,7 +1122,8 @@
// Add saved Wi-Fi access points
final List<AccessPoint> accessPoints =
- WifiTracker.getCurrentAccessPoints(context, true, false);
+ WifiSavedConfigUtils.getAllConfigs(context,
+ context.getSystemService(WifiManager.class));
for (AccessPoint accessPoint : accessPoints) {
data = new SearchIndexableRaw(context);
data.title = accessPoint.getSsidStr();
diff --git a/src/com/android/settings/wrapper/KeyValueListParserWrapper.java b/src/com/android/settings/wrapper/KeyValueListParserWrapper.java
index 16dc50e..3fab571 100644
--- a/src/com/android/settings/wrapper/KeyValueListParserWrapper.java
+++ b/src/com/android/settings/wrapper/KeyValueListParserWrapper.java
@@ -56,13 +56,23 @@
* Get the value for key as a boolean.
* @param key The key to lookup.
* @param defaultValue The value to return if the key was not found.
- * @return the string value associated with the key.
+ * @return the boolean value associated with the key.
*/
public boolean getBoolean(String key, boolean defaultValue) {
return mParser.getBoolean(key, defaultValue);
}
/**
+ * Get the value for key as a string.
+ * @param key The key to lookup.
+ * @param defaultValue The value to return if the key was not found.
+ * @return the string value associated with the key.
+ */
+ public String getString(String key, String defaultValue) {
+ return mParser.getString(key, defaultValue);
+ }
+
+ /**
* Get the value for key as a long.
* @param key The key to lookup.
* @param defaultValue The value to return if the key was not found, or the value was not a
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 9b86ced..fda5c8a 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -5,6 +5,7 @@
com.android.settings.fuelgauge.PowerUsageAnomalyDetails
com.android.settings.fuelgauge.AdvancedPowerUsageDetail
com.android.settings.development.featureflags.FeatureFlagsDashboard
+com.android.settings.development.qstile.DevelopmentTileConfigFragment
com.android.settings.deviceinfo.StorageProfileFragment
com.android.settings.wifi.details.WifiNetworkDetailsFragment
com.android.settings.wifi.p2p.WifiP2pSettings
diff --git a/tests/robotests/assets/grandfather_not_implementing_indexable b/tests/robotests/assets/grandfather_not_implementing_indexable
index bbb4bb2..91a6649 100644
--- a/tests/robotests/assets/grandfather_not_implementing_indexable
+++ b/tests/robotests/assets/grandfather_not_implementing_indexable
@@ -1,6 +1,4 @@
com.android.settings.location.LocationMode
-com.android.settings.notification.ZenModePrioritySettings
-com.android.settings.notification.ZenModeVisualInterruptionSettings
com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment
com.android.settings.deviceinfo.SimStatus
com.android.settings.deviceinfo.PrivateVolumeForget
@@ -24,18 +22,16 @@
com.android.settings.notification.ChannelNotificationSettings
com.android.settings.notification.ChannelGroupNotificationSettings
com.android.settings.datausage.AppDataUsage
+com.android.settings.datausage.DataPlanUsageSummary
com.android.settings.accessibility.FontSizePreferenceFragmentForSetupWizard
com.android.settings.applications.ManageDomainUrls
com.android.settings.applications.WriteSettingsDetails
-com.android.settings.location.LocationSettings
com.android.settings.applications.ProcessStatsSummary
com.android.settings.users.RestrictedProfileSettings
com.android.settings.accounts.ChooseAccountActivity
com.android.settings.accounts.ManagedProfileSettings
com.android.settings.accessibility.ToggleAutoclickPreferenceFragment
com.android.settings.applications.AppLaunchSettings
-com.android.settings.fuelgauge.BatterySaverSettings
-com.android.settings.location.ScanningSettings
com.android.settings.applications.ProcessStatsUi
com.android.settings.notification.ZenModeScheduleRuleSettings
com.android.settings.datausage.BillingCycleSettings
@@ -69,10 +65,8 @@
com.android.settings.applications.UsageAccessDetails
com.android.settings.applications.AppStorageSettings
com.android.settings.notification.NotificationAccessSettings
-com.android.settings.notification.ZenModeSettings
com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment
com.android.settings.localepicker.LocaleListEditor
-com.android.settings.qstile.DevelopmentTileConfigActivity$DevelopmentTileConfigFragment
com.android.settings.applications.ExternalSourcesDetails
com.android.settings.applications.PictureInPictureSettings
com.android.settings.applications.PictureInPictureDetails
@@ -80,13 +74,13 @@
com.android.settings.SecuritySettings$SecuritySubSettings
com.android.settings.PrivacySettings
com.android.settings.WifiCallingSettings
+com.android.settings.WifiCallingSettingsForSub
com.android.settings.password.SetupChooseLockGeneric$SetupChooseLockGenericFragment
com.android.settings.SetupRedactionInterstitial$SetupRedactionInterstitialFragment
com.android.settings.TrustAgentSettings
com.android.settings.password.ChooseLockGeneric$ChooseLockGenericFragment
com.android.settings.IccLockSettings
com.android.settings.TetherSettings
-com.android.settings.ApplicationSettings
com.android.settings.ApnEditor
com.android.settings.UserCredentialsSettings
com.android.settings.TestingSettings
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 4ee97fa..85e99c3 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.DevelopmentSettingsDashboardFragment
+com.android.settings.development.DevelopmentSettings
com.android.settings.display.ScreenZoomPreferenceFragmentForSetupWizard
com.android.settings.search.indexing.FakeSettingsFragment
diff --git a/tests/robotests/res/xml-mcc999/display_settings.xml b/tests/robotests/res/xml-mcc999/display_settings.xml
index 4e0ce6b..8c5d47a 100644
--- a/tests/robotests/res/xml-mcc999/display_settings.xml
+++ b/tests/robotests/res/xml-mcc999/display_settings.xml
@@ -50,6 +50,8 @@
android:key="pref_key_4"
android:title="pref_title_4"
android:summary="summary_4"
+ android:entries="@array/app_install_location_entries"
+ android:entryValues="@array/app_install_location_values"
settings:keywords="keywords1, keywords2, keywords3" />
<CheckBoxPreference
diff --git a/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java b/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
index 40b76df..ee7bdb0 100644
--- a/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
+++ b/tests/robotests/src/android/bluetooth/BluetoothCodecConfig.java
@@ -20,4 +20,35 @@
* A placeholder class to prevent ClassNotFound exceptions caused by lack of visibility.
*/
public class BluetoothCodecConfig {
+
+ public static final int SAMPLE_RATE_NONE = 0;
+ public static final int SAMPLE_RATE_48000 = 0x1 << 1;
+ public static final int SOURCE_CODEC_TYPE_INVALID = 1000 * 1000;
+ public static final int SOURCE_CODEC_TYPE_AAC = 1;
+ public static final int CODEC_PRIORITY_DEFAULT = 0;
+ public static final int CODEC_PRIORITY_HIGHEST = 1000 * 1000;
+ public static final int BITS_PER_SAMPLE_NONE = 0;
+ public static final int CHANNEL_MODE_NONE = 0;
+ public static final int BITS_PER_SAMPLE_24 = 0x1 << 1;
+ public static final int CHANNEL_MODE_STEREO = 0x1 << 1;
+
+ public int getSampleRate() {
+ return 0;
+ }
+
+ public int getCodecType() {
+ return 0;
+ }
+
+ public int getBitsPerSample() {
+ return 0;
+ }
+
+ public int getChannelMode() {
+ return 0;
+ }
+
+ public long getCodecSpecific1() {
+ return 0;
+ }
}
diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
index c5a1833..09ee15f 100644
--- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java
@@ -17,26 +17,25 @@
package com.android.settings;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
import android.content.Context;
import android.os.Build;
-import android.os.UserManager;
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.XmlTestUtils;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.DeviceInfoUtils;
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;
@@ -48,17 +47,13 @@
@Config(
manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION,
- shadows = ShadowUtils.class
+ shadows = {ShadowUtils.class, ShadowConnectivityManager.class}
)
public class DeviceInfoSettingsTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
@Mock
private PreferenceScreen mScreen;
@Mock
- private UserManager mUserManager;
- @Mock
private SummaryLoader mSummaryLoader;
private DeviceInfoSettings mSettings;
@@ -66,7 +61,6 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
mSettings = spy(new DeviceInfoSettings());
doReturn(mScreen).when(mSettings).getPreferenceScreen();
}
diff --git a/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
index 9054a8e..9441707 100644
--- a/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/DefaultAppSettingsTest.java
@@ -95,7 +95,7 @@
when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Sms1, Browser1, Phone1");
+ verify(summaryLoader).setSummary(summaryProvider, "Browser1, Phone1, Sms1");
// 2 available
when(defaultSms.getDefaultAppLabel()).thenReturn(null);
@@ -108,13 +108,13 @@
when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Sms1, Phone1");
+ verify(summaryLoader).setSummary(summaryProvider, "Phone1, Sms1");
when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
summaryProvider.setListening(true);
- verify(summaryLoader).setSummary(summaryProvider, "Sms1, Browser1");
+ verify(summaryLoader).setSummary(summaryProvider, "Phone1, Sms1");
// 1 available
when(defaultSms.getDefaultAppLabel()).thenReturn(null);
diff --git a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
index 93f364b..58a9577 100644
--- a/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/InstalledAppDetailsTest.java
@@ -564,6 +564,21 @@
mAppDetail.mBatteryCallbacks);
}
+ @Test
+ public void initUninstallButtonForUserApp_shouldSetNegativeButton() {
+ final ApplicationInfo info = new ApplicationInfo();
+ info.flags = ApplicationInfo.FLAG_INSTALLED;
+ info.enabled = true;
+ final PackageInfo packageInfo = mock(PackageInfo.class);
+ packageInfo.applicationInfo = info;
+ ReflectionHelpers.setField(mAppDetail, "mUserManager", mUserManager);
+ ReflectionHelpers.setField(mAppDetail, "mPackageInfo", packageInfo);
+
+ mAppDetail.initUninstallButtonForUserApp();
+
+ verify(mAppDetail.mActionButtons).setButton1Positive(false);
+ }
+
@Implements(Utils.class)
public static class ShadowUtils {
@Implementation
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 6c8ad9b..c71bc29 100644
--- a/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/assist/AssistContextPreferenceControllerTest.java
@@ -16,14 +16,21 @@
package com.android.settings.applications.assist;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;
import android.support.v7.preference.PreferenceScreen;
import android.support.v7.preference.TwoStatePreference;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.core.lifecycle.Lifecycle;
import org.junit.Before;
@@ -35,13 +42,6 @@
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AssistContextPreferenceControllerTest {
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 0ae9615..d4cd6da 100644
--- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
+++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java
@@ -21,11 +21,13 @@
import static org.mockito.Mockito.when;
import android.content.ComponentName;
+import android.content.Context;
import android.content.pm.PackageItemInfo;
import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.wrapper.PackageManagerWrapper;
import org.junit.Before;
@@ -33,6 +35,7 @@
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)
@@ -48,31 +51,33 @@
@Mock
private PackageManagerWrapper mPackageManagerWrapper;
+ private Context mContext;
private DefaultAppInfo mInfo;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
when(mPackageManagerWrapper.getPackageManager()).thenReturn(mPackageManager);
}
@Test
public void initInfoWithActivityInfo_shouldLoadInfo() {
mPackageItemInfo.packageName = "test";
- mInfo = new DefaultAppInfo(mPackageManagerWrapper, mPackageItemInfo);
+ mInfo = new DefaultAppInfo(mContext, mPackageManagerWrapper, mPackageItemInfo);
mInfo.loadLabel();
- mInfo.loadIcon();
+ Drawable icon = mInfo.loadIcon();
assertThat(mInfo.getKey()).isEqualTo(mPackageItemInfo.packageName);
+ assertThat(icon).isNotNull();
verify(mPackageItemInfo).loadLabel(mPackageManager);
- verify(mPackageItemInfo).loadIcon(mPackageManager);
}
@Test
public void initInfoWithComponent_shouldLoadInfo() {
when(mComponentName.getPackageName()).thenReturn("com.android.settings");
- mInfo = new DefaultAppInfo(mPackageManagerWrapper, 0 /* uid */, mComponentName);
+ mInfo = new DefaultAppInfo(mContext, mPackageManagerWrapper, 0 /* uid */, mComponentName);
mInfo.getKey();
verify(mComponentName).flattenToString();
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
new file mode 100644
index 0000000..982fb56
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterItemTest.java
@@ -0,0 +1,92 @@
+/*
+ * 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.applications.manageapplications;
+
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_BLOCKED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_ENABLED;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_USAGE_ACCESS;
+import static com.google.common.truth.Truth.assertThat;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.applications.AppStateUsageBridge;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.applications.ApplicationsState;
+
+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)
+public class AppFilterItemTest {
+
+ @Test
+ public void equals_sameContent_true() {
+ final AppFilterItem item = AppFilterRegistry.getInstance().get(FILTER_APPS_USAGE_ACCESS);
+ final AppFilterItem item2 = new AppFilterItem(
+ AppStateUsageBridge.FILTER_APP_USAGE,
+ FILTER_APPS_USAGE_ACCESS,
+ R.string.filter_all_apps);
+
+ // Same instance, should be same
+ assertThat(item).isEqualTo(item);
+
+ // Same content, should be same
+ assertThat(item).isEqualTo(item2);
+ }
+
+ @Test
+ public void compare_sameContent_return0() {
+ final AppFilterItem item = AppFilterRegistry.getInstance().get(FILTER_APPS_USAGE_ACCESS);
+ final AppFilterItem item2 = new AppFilterItem(
+ AppStateUsageBridge.FILTER_APP_USAGE,
+ FILTER_APPS_USAGE_ACCESS,
+ R.string.filter_all_apps);
+
+ assertThat(item.compareTo(item)).isEqualTo(0);
+ assertThat(item.compareTo(item2)).isEqualTo(0);
+ assertThat(item2.compareTo(item)).isEqualTo(0);
+ }
+
+ @Test
+ public void compare_toNull_return1() {
+ final AppFilterItem item = AppFilterRegistry.getInstance().get(FILTER_APPS_USAGE_ACCESS);
+ assertThat(item.compareTo(null)).isEqualTo(1);
+ }
+
+ @Test
+ public void compare_differentFilter_returnFilterDiff() {
+ final AppFilterItem item = AppFilterRegistry.getInstance().get(FILTER_APPS_USAGE_ACCESS);
+ final AppFilterItem item2 = new AppFilterItem(
+ ApplicationsState.FILTER_ALL_ENABLED,
+ FILTER_APPS_ENABLED,
+ R.string.filter_enabled_apps);
+ assertThat(item.compareTo(item2)).isNotEqualTo(0);
+ }
+
+ @Test
+ public void hash_differentItem_differentHash() {
+ final AppFilterItem item = AppFilterRegistry.getInstance().get(FILTER_APPS_USAGE_ACCESS);
+ final AppFilterItem item2 = AppFilterRegistry.getInstance().get(FILTER_APPS_BLOCKED);
+
+ assertThat(item.hashCode()).isNotEqualTo(item2.hashCode());
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
new file mode 100644
index 0000000..3fe5e67
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/AppFilterRegistryTest.java
@@ -0,0 +1,91 @@
+/*
+ * 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.applications.manageapplications;
+
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_ALL;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_INSTALL_SOURCES;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_POWER_WHITELIST;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_USAGE_ACCESS;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_WITH_OVERLAY;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_WRITE_SETTINGS;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_GAMES;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_HIGH_POWER;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_MAIN;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_MANAGE_SOURCES;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_MOVIES;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_NOTIFICATION;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_OVERLAY;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_PHOTOGRAPHY;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_STORAGE;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_USAGE_ACCESS;
+import static com.android.settings.applications.manageapplications.ManageApplications
+ .LIST_TYPE_WRITE_SETTINGS;
+import static com.google.common.truth.Truth.assertThat;
+
+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)
+public class AppFilterRegistryTest {
+
+ @Test
+ public void getDefaultType_shouldMatchForAllListType() {
+ final AppFilterRegistry registry = AppFilterRegistry.getInstance();
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_USAGE_ACCESS))
+ .isEqualTo(FILTER_APPS_USAGE_ACCESS);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_HIGH_POWER))
+ .isEqualTo(FILTER_APPS_POWER_WHITELIST);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_OVERLAY)).isEqualTo(
+ FILTER_APPS_WITH_OVERLAY);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_WRITE_SETTINGS)).isEqualTo(
+ FILTER_APPS_WRITE_SETTINGS);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_MANAGE_SOURCES)).isEqualTo(
+ FILTER_APPS_INSTALL_SOURCES);
+
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_MAIN))
+ .isEqualTo(FILTER_APPS_ALL);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_NOTIFICATION))
+ .isEqualTo(FILTER_APPS_ALL);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_STORAGE)).isEqualTo(FILTER_APPS_ALL);
+
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_GAMES)).isEqualTo(FILTER_APPS_ALL);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_MOVIES)).isEqualTo(FILTER_APPS_ALL);
+ assertThat(registry.getDefaultFilterType(LIST_TYPE_PHOTOGRAPHY)).isEqualTo(FILTER_APPS_ALL);
+ }
+}
+
diff --git a/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
new file mode 100644
index 0000000..cf2403b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ApplicationViewHolderTest.java
@@ -0,0 +1,95 @@
+/*
+ * 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.applications.manageapplications;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+
+import android.content.Context;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+
+import com.android.settings.R;
+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.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ApplicationViewHolderTest {
+
+ private Context mContext;
+ private View mView;
+ private ApplicationViewHolder mHolder;
+
+ @Before
+ public void seUp() {
+ mContext = RuntimeEnvironment.application;
+ mView = ApplicationViewHolder.newView(LayoutInflater.from(mContext),
+ new FrameLayout(mContext));
+ mHolder = new ApplicationViewHolder(mView);
+ }
+
+ @Test
+ public void updateDisableView_appDisabledUntilUsed_shouldSetDisabled() {
+ final ApplicationInfo info = new ApplicationInfo();
+ info.flags = ApplicationInfo.FLAG_INSTALLED;
+ info.enabled = true;
+ info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
+ mHolder.updateDisableView(info);
+
+ assertThat(mHolder.mDisabled.getText()).isEqualTo(mContext.getText(R.string.disabled));
+ }
+
+ @Test
+ public void setSummaries() {
+ mHolder.setSummary("hello");
+ assertThat(mHolder.mSummary.getText()).isEqualTo("hello");
+
+ mHolder.setSummary(R.string.disabled);
+ assertThat(mHolder.mSummary.getText()).isEqualTo(mContext.getText(R.string.disabled));
+ }
+
+ @Test
+ public void updateSize() {
+ final String invalidStr = "invalid";
+ final ApplicationsState.AppEntry entry = mock(ApplicationsState.AppEntry.class);
+ entry.internalSizeStr = "internal";
+ entry.externalSizeStr = "external";
+ entry.sizeStr = entry.internalSizeStr;
+
+ mHolder.updateSizeText(entry, invalidStr, ManageApplications.SIZE_INTERNAL);
+ assertThat(mHolder.mSummary.getText()).isEqualTo(entry.internalSizeStr);
+
+ mHolder.updateSizeText(entry, invalidStr, ManageApplications.SIZE_EXTERNAL);
+ assertThat(mHolder.mSummary.getText()).isEqualTo(entry.externalSizeStr);
+
+ entry.sizeStr = null;
+ entry.size = ApplicationsState.SIZE_INVALID;
+ mHolder.updateSizeText(entry, invalidStr, ManageApplications.SIZE_EXTERNAL);
+ assertThat(mHolder.mSummary.getText()).isEqualTo(invalidStr);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
similarity index 82%
rename from tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java
rename to tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
index 8ed7284..9eb36ef 100644
--- a/tests/robotests/src/com/android/settings/applications/ManageApplicationsTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/ManageApplicationsTest.java
@@ -14,8 +14,10 @@
* limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
+import static com.android.settings.applications.manageapplications.AppFilterRegistry
+ .FILTER_APPS_ALL;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
@@ -29,19 +31,16 @@
import android.app.Activity;
import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import android.os.Handler;
+import android.os.Bundle;
import android.os.Looper;
+import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.TextView;
import com.android.settings.R;
-import com.android.settings.Settings;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
@@ -101,29 +100,6 @@
}
@Test
- public void launchFragment() {
- SettingsRobolectricTestRunner.startSettingsFragment(
- mFragment, Settings.ManageApplicationsActivity.class);
- }
-
- @Test
- public void updateDisableView_appDisabledUntilUsed_shouldSetDisabled() {
- final TextView view = mock(TextView.class);
- final ApplicationInfo info = new ApplicationInfo();
- info.flags = ApplicationInfo.FLAG_INSTALLED;
- info.enabled = true;
- info.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED;
- ManageApplications fragment = mock(ManageApplications.class);
- when(fragment.getActivity()).thenReturn(mock(Activity.class));
- final ManageApplications.ApplicationsAdapter adapter =
- new ManageApplications.ApplicationsAdapter(mState, fragment, 0);
-
- adapter.updateDisableView(view, info);
-
- verify(view).setText(R.string.disabled);
- }
-
- @Test
public void updateMenu_mainListType_showAppReset() {
setUpOptionMenus();
ReflectionHelpers.setField(mFragment, "mListType", ManageApplications.LIST_TYPE_MAIN);
@@ -167,13 +143,12 @@
ReflectionHelpers.setField(fragment, "mLoadingContainer", mock(View.class));
ReflectionHelpers.setField(fragment, "mListContainer", mock(View.class));
when(fragment.getActivity()).thenReturn(mock(Activity.class));
- final Handler handler = mock(Handler.class);
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState, fragment, 0));
+ spy(new ManageApplications.ApplicationsAdapter(mState, fragment,
+ AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
final LoadingViewController loadingViewController =
mock(LoadingViewController.class);
ReflectionHelpers.setField(adapter, "mLoadingViewController", loadingViewController);
- ReflectionHelpers.setField(adapter, "mFgHandler", handler);
// app loading completed
ReflectionHelpers.setField(adapter, "mHasReceivedLoadEntries", true);
@@ -192,14 +167,12 @@
ReflectionHelpers.setField(fragment, "mLoadingContainer", mock(View.class));
ReflectionHelpers.setField(fragment, "mListContainer", mock(View.class));
when(fragment.getActivity()).thenReturn(mock(Activity.class));
-
- final Handler handler = mock(Handler.class);
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState, fragment, 0));
+ spy(new ManageApplications.ApplicationsAdapter(mState, fragment,
+ AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
final LoadingViewController loadingViewController =
mock(LoadingViewController.class);
ReflectionHelpers.setField(adapter, "mLoadingViewController", loadingViewController);
- ReflectionHelpers.setField(adapter, "mFgHandler", handler);
// app loading not yet completed
ReflectionHelpers.setField(adapter, "mHasReceivedLoadEntries", false);
@@ -213,6 +186,10 @@
public void onRebuildComplete_shouldHideLoadingView() {
final Context context = RuntimeEnvironment.application;
final ManageApplications fragment = mock(ManageApplications.class);
+ final RecyclerView recyclerView = mock(RecyclerView.class);
+ final View emptyView = mock(View.class);
+ ReflectionHelpers.setField(fragment, "mRecyclerView", recyclerView);
+ ReflectionHelpers.setField(fragment, "mEmptyView", emptyView);
final View loadingContainer = mock(View.class);
when(loadingContainer.getContext()).thenReturn(context);
final View listContainer = mock(View.class);
@@ -221,14 +198,14 @@
ReflectionHelpers.setField(fragment, "mLoadingContainer", loadingContainer);
ReflectionHelpers.setField(fragment, "mListContainer", listContainer);
when(fragment.getActivity()).thenReturn(mock(Activity.class));
- final Handler handler = mock(Handler.class);
final ManageApplications.ApplicationsAdapter adapter =
- spy(new ManageApplications.ApplicationsAdapter(mState, fragment, 0));
+ spy(new ManageApplications.ApplicationsAdapter(mState, fragment,
+ AppFilterRegistry.getInstance().get(FILTER_APPS_ALL), new Bundle()));
final LoadingViewController loadingViewController =
mock(LoadingViewController.class);
ReflectionHelpers.setField(adapter, "mLoadingViewController", loadingViewController);
- ReflectionHelpers.setField(adapter, "mFgHandler", handler);
- ReflectionHelpers.setField(adapter, "mFilterMode", -1);
+ ReflectionHelpers.setField(adapter, "mAppFilter",
+ AppFilterRegistry.getInstance().get(FILTER_APPS_ALL));
// app loading not yet completed
ReflectionHelpers.setField(adapter, "mHasReceivedLoadEntries", false);
diff --git a/tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java
similarity index 83%
rename from tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java
index 3d04c73..28ac9d9 100644
--- a/tests/robotests/src/com/android/settings/applications/MusicViewHolderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/MusicViewHolderControllerTest.java
@@ -11,13 +11,12 @@
* 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
+ * limitations under the License.
*/
-package com.android.settings.applications;
+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;
@@ -29,11 +28,12 @@
import android.os.storage.VolumeInfo;
import android.provider.DocumentsContract;
import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.applications.StorageStatsSource;
-import com.android.settingslib.deviceinfo.StorageVolumeProvider;
import org.junit.Before;
import org.junit.Test;
@@ -52,14 +52,13 @@
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Fragment mFragment;
@Mock
- private StorageVolumeProvider mSvp;
- @Mock
private StorageStatsSource mSource;
private Context mContext;
private MusicViewHolderController mController;
private VolumeInfo mVolume;
- private AppViewHolder mHolder;
+ private View mView;
+ private ApplicationViewHolder mHolder;
@Before
public void setUp() throws Exception {
@@ -70,25 +69,26 @@
new UserHandle(0));
LayoutInflater inflater = LayoutInflater.from(mContext);
- mHolder = AppViewHolder.createOrRecycle(inflater, null);
+ mView = ApplicationViewHolder.newView(inflater, new FrameLayout(mContext));
+ mHolder = new ApplicationViewHolder(mView);
}
@Test
public void storageShouldBeZeroBytesIfQueriedBeforeStorageQueryFinishes() {
mController.setupView(mHolder);
- assertThat(mHolder.summary.getText().toString()).isEqualTo("0.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo("0.00 B");
}
@Test
public void storageShouldRepresentStorageStatsQuery() throws Exception {
- when(mSource.getExternalStorageStats(nullable(String.class), nullable(UserHandle.class))).thenReturn(
- new StorageStatsSource.ExternalStorageStats(1, 1, 0, 0, 0));
+ when(mSource.getExternalStorageStats(nullable(String.class), nullable(UserHandle.class)))
+ .thenReturn(new StorageStatsSource.ExternalStorageStats(1, 1, 0, 0, 0));
mController.queryStats();
mController.setupView(mHolder);
- assertThat(mHolder.summary.getText().toString()).isEqualTo("1.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo("1.00 B");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/applications/PhotosViewHolderControllerTest.java b/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java
similarity index 69%
rename from tests/robotests/src/com/android/settings/applications/PhotosViewHolderControllerTest.java
rename to tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java
index 7bf338d..2a26e31 100644
--- a/tests/robotests/src/com/android/settings/applications/PhotosViewHolderControllerTest.java
+++ b/tests/robotests/src/com/android/settings/applications/manageapplications/PhotosViewHolderControllerTest.java
@@ -1,7 +1,22 @@
-package com.android.settings.applications;
+/*
+ * 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.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;
@@ -12,11 +27,12 @@
import android.os.UserHandle;
import android.os.storage.VolumeInfo;
import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settingslib.applications.StorageStatsSource;
-import com.android.settingslib.deviceinfo.StorageVolumeProvider;
import org.junit.Before;
import org.junit.Test;
@@ -33,14 +49,14 @@
public class PhotosViewHolderControllerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Fragment mFragment;
-
- @Mock private StorageVolumeProvider mSvp;
@Mock private StorageStatsSource mSource;
private Context mContext;
private PhotosViewHolderController mController;
private VolumeInfo mVolume;
- private AppViewHolder mHolder;
+ private View mView;
+ private ApplicationViewHolder mHolder;
+
@Before
public void setUp() throws Exception {
@@ -51,15 +67,16 @@
new PhotosViewHolderController(
mContext, mSource, mVolume.fsUuid, new UserHandle(0));
- LayoutInflater inflater = LayoutInflater.from(mContext);
- mHolder = AppViewHolder.createOrRecycle(inflater, null);
+ final LayoutInflater inflater = LayoutInflater.from(mContext);
+ mView = ApplicationViewHolder.newView(inflater, new FrameLayout(mContext));
+ mHolder = new ApplicationViewHolder(mView);
}
@Test
public void storageShouldBeZeroBytesIfQueriedBeforeStorageQueryFinishes() {
mController.setupView(mHolder);
- assertThat(mHolder.summary.getText().toString()).isEqualTo("0.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo("0.00 B");
}
@Test
@@ -70,7 +87,7 @@
mController.queryStats();
mController.setupView(mHolder);
- assertThat(mHolder.summary.getText().toString()).isEqualTo("11.00 B");
+ assertThat(mHolder.mSummary.getText().toString()).isEqualTo("11.00 B");
}
@Test
diff --git a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java
index 464703b..7b0a3f23 100644
--- a/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java
+++ b/tests/robotests/src/com/android/settings/bluetooth/BluetoothDetailsButtonsControllerTest.java
@@ -48,30 +48,30 @@
public class BluetoothDetailsButtonsControllerTest extends BluetoothDetailsControllerTestBase {
private BluetoothDetailsButtonsController mController;
private ActionButtonPreference mButtonsPref;
- private Button mLeftButton;
- private Button mRightButton;
+ private Button mConnectButton;
+ private Button mForgetButton;
@Override
public void setUp() {
super.setUp();
final View buttons = View.inflate(
RuntimeEnvironment.application, R.layout.two_action_buttons, null /* parent */);
- mLeftButton = buttons.findViewById(R.id.button1_positive);
- mRightButton = buttons.findViewById(R.id.button2_positive);
+ mConnectButton = buttons.findViewById(R.id.button2_positive);
+ mForgetButton = buttons.findViewById(R.id.button1_positive);
mController = new BluetoothDetailsButtonsController(mContext, mFragment, mCachedDevice,
mLifecycle);
mButtonsPref = ActionButtonPreferenceTest.createMock();
when(mButtonsPref.getKey()).thenReturn(mController.getPreferenceKey());
- when(mButtonsPref.setButton1OnClickListener(any(View.OnClickListener.class)))
- .thenAnswer(invocation -> {
- final Object[] args = invocation.getArguments();
- mLeftButton.setOnClickListener((View.OnClickListener) args[0]);
- return mButtonsPref;
- });
when(mButtonsPref.setButton2OnClickListener(any(View.OnClickListener.class)))
.thenAnswer(invocation -> {
final Object[] args = invocation.getArguments();
- mRightButton.setOnClickListener((View.OnClickListener) args[0]);
+ mConnectButton.setOnClickListener((View.OnClickListener) args[0]);
+ return mButtonsPref;
+ });
+ when(mButtonsPref.setButton1OnClickListener(any(View.OnClickListener.class)))
+ .thenAnswer(invocation -> {
+ final Object[] args = invocation.getArguments();
+ mForgetButton.setOnClickListener((View.OnClickListener) args[0]);
return mButtonsPref;
});
mScreen.addPreference(mButtonsPref);
@@ -83,14 +83,14 @@
public void connected() {
showScreen(mController);
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_disconnect);
- verify(mButtonsPref).setButton2Text(R.string.forget);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_disconnect);
+ verify(mButtonsPref).setButton1Text(R.string.forget);
}
@Test
public void clickOnDisconnect() {
showScreen(mController);
- mLeftButton.callOnClick();
+ mConnectButton.callOnClick();
verify(mCachedDevice).disconnect();
}
@@ -100,9 +100,9 @@
when(mCachedDevice.isConnected()).thenReturn(false);
showScreen(mController);
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_connect);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_connect);
- mLeftButton.callOnClick();
+ mConnectButton.callOnClick();
verify(mCachedDevice).connect(eq(true));
}
@@ -110,15 +110,15 @@
public void becomeDisconnected() {
showScreen(mController);
// By default we start out with the device connected.
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_disconnect);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_disconnect);
// Now make the device appear to have changed to disconnected.
when(mCachedDevice.isConnected()).thenReturn(false);
mController.onDeviceAttributesChanged();
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_connect);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_connect);
// Click the button and make sure that connect (not disconnect) gets called.
- mLeftButton.callOnClick();
+ mConnectButton.callOnClick();
verify(mCachedDevice).connect(eq(true));
}
@@ -128,16 +128,16 @@
when(mCachedDevice.isConnected()).thenReturn(false);
showScreen(mController);
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_connect);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_connect);
// Now make the device appear to have changed to connected.
when(mCachedDevice.isConnected()).thenReturn(true);
mController.onDeviceAttributesChanged();
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_disconnect);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_disconnect);
// Click the button and make sure that disconnnect (not connect) gets called.
- mLeftButton.callOnClick();
+ mConnectButton.callOnClick();
verify(mCachedDevice).disconnect();
}
@@ -148,7 +148,7 @@
when(mFragment.getFragmentManager()).thenReturn(fragmentManager);
FragmentTransaction ft = mock(FragmentTransaction.class);
when(fragmentManager.beginTransaction()).thenReturn(ft);
- mRightButton.callOnClick();
+ mForgetButton.callOnClick();
ArgumentCaptor<ForgetDeviceDialogFragment> dialogCaptor =
ArgumentCaptor.forClass(ForgetDeviceDialogFragment.class);
@@ -163,26 +163,26 @@
when(mCachedDevice.isBusy()).thenReturn(true);
showScreen(mController);
- verify(mButtonsPref).setButton1Text(R.string.bluetooth_device_context_disconnect);
- verify(mButtonsPref).setButton1Enabled(false);
- verify(mButtonsPref).setButton2Text(R.string.forget);
+ verify(mButtonsPref).setButton2Text(R.string.bluetooth_device_context_disconnect);
+ verify(mButtonsPref).setButton2Enabled(false);
+ verify(mButtonsPref).setButton1Text(R.string.forget);
// Now pretend the device became non-busy.
when(mCachedDevice.isBusy()).thenReturn(false);
mController.onDeviceAttributesChanged();
- verify(mButtonsPref).setButton1Enabled(true);
+ verify(mButtonsPref).setButton2Enabled(true);
}
@Test
public void becomesBusy() {
showScreen(mController);
- verify(mButtonsPref).setButton1Enabled(true);
+ verify(mButtonsPref).setButton2Enabled(true);
// Now pretend the device became busy.
when(mCachedDevice.isBusy()).thenReturn(true);
mController.onDeviceAttributesChanged();
- verify(mButtonsPref).setButton1Enabled(false);
+ verify(mButtonsPref).setButton2Enabled(false);
}
}
diff --git a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
index 72e0b10..748c317 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataPlanUsageSummaryTest.java
@@ -33,17 +33,13 @@
import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.testutils.XmlTestUtils;
-import com.android.settings.testutils.shadow.ShadowDataUsageUtils;
import com.android.settingslib.NetworkPolicyEditor;
import java.util.ArrayList;
-import java.util.List;
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;
@@ -128,53 +124,6 @@
assertThat(mDataUsageSummary.isMetered(mWifiConfiguration)).isFalse();
}
- @Test
- @Config(shadows = ShadowDataUsageUtils.class)
- public void testNonIndexableKeys_existInXmlLayout() {
- final Context context = RuntimeEnvironment.application;
- ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true;
- ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true;
- final List<String> niks = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER
- .getNonIndexableKeys(context);
- final List<String> keys = new ArrayList<>();
-
- keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage_wifi));
- keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.data_usage));
- keys.addAll(XmlTestUtils.getKeysFromPreferenceXml(context,
- R.xml.data_plan_usage_cell_data_preference_screen));
-
- assertThat(keys).containsAllIn(niks);
- }
-
- @Test
- @Config(shadows = ShadowDataUsageUtils.class)
- public void testNonIndexableKeys_hasMobileData_hasWifi_allNonIndexableKeysAdded() {
- ShadowDataUsageUtils.IS_WIFI_SUPPORTED = false;
- ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = false;
- List<String> keys = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER
- .getNonIndexableKeys(mContext);
-
- // Mobile data keys
- assertThat(keys).contains(DataPlanUsageSummary.KEY_MOBILE_USAGE_TITLE);
- assertThat(keys).contains(DataPlanUsageSummary.KEY_MOBILE_DATA_USAGE_TOGGLE);
-
- // Wifi keys
- assertThat(keys).contains(DataPlanUsageSummary.KEY_WIFI_DATA_USAGE);
- assertThat(keys).contains(DataPlanUsageSummary.KEY_NETWORK_RESTRICTIONS);
- assertThat(keys).contains(DataPlanUsageSummary.KEY_WIFI_USAGE_TITLE);
- }
-
- @Test
- @Config(shadows = ShadowDataUsageUtils.class)
- public void testNonIndexableKeys_noMobile_noWifi_limitedNonIndexableKeys() {
- ShadowDataUsageUtils.IS_WIFI_SUPPORTED = true;
- ShadowDataUsageUtils.IS_MOBILE_DATA_SUPPORTED = true;
- List<String> keys = DataPlanUsageSummary.SEARCH_INDEX_DATA_PROVIDER
- .getNonIndexableKeys(mContext);
-
- assertThat(keys).containsExactly(DataPlanUsageSummary.KEY_WIFI_USAGE_TITLE);
- }
-
private void initTest() {
mDataUsageSummary = new DataPlanUsageSummary();
mPolicyEditor = mock(NetworkPolicyEditor.class);
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
index 750f785..dc53ca1 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageSummaryTest.java
@@ -28,11 +28,13 @@
import android.net.ConnectivityManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
+import android.text.format.Formatter;
+
import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settingslib.NetworkPolicyEditor;
-import java.util.ArrayList;
import org.junit.Before;
import org.junit.Test;
@@ -43,10 +45,13 @@
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.util.ReflectionHelpers;
+import java.util.ArrayList;
+
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class DataUsageSummaryTest {
- @Mock private ConnectivityManager mManager;
+ @Mock
+ private ConnectivityManager mManager;
private Context mContext;
/**
@@ -77,6 +82,21 @@
dataUsageSummary.updateNetworkRestrictionSummary(preference);
verify(preference).setSummary(mContext.getResources().getQuantityString(
- R.plurals.network_restrictions_summary, 0, 0));
+ R.plurals.network_restrictions_summary, 0, 0));
+ }
+
+ @Test
+ @Config(shadows = {
+ SettingsShadowResources.class,
+ SettingsShadowResources.SettingsShadowTheme.class
+ })
+ public void formatUsage_shouldLookLikeFormatFileSize() {
+ SettingsShadowResources.overrideResource(com.android.internal.R.string.fileSizeSuffix,
+ "%1$s %2$s");
+ final long usage = 2147483648L; // 2GB
+ final String formattedUsage =
+ DataUsageSummary.formatUsage(mContext, "^1", usage).toString();
+ final String formattedAsFileSize = Formatter.formatFileSize(mContext, usage);
+ assertThat(formattedUsage).isEqualTo(formattedAsFileSize);
}
}
diff --git a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
index 41bff93..5cbef72 100644
--- a/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/AutoTimeZonePreferenceControllerTest.java
@@ -16,35 +16,34 @@
package com.android.settings.datetime;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.robolectric.shadow.api.Shadow.extract;
+
import android.content.Context;
import android.net.ConnectivityManager;
import android.provider.Settings;
import android.support.v7.preference.Preference;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
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 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,
+ shadows = ShadowConnectivityManager.class)
public class AutoTimeZonePreferenceControllerTest {
@Mock
- private Context mMockContext;
- @Mock
- private ConnectivityManager mCm;
- @Mock
private UpdateTimeAndDateCallback mCallback;
private Context mContext;
@@ -55,17 +54,17 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- ShadowApplication.getInstance().setSystemService(Context.CONNECTIVITY_SERVICE, mCm);
- mContext = ShadowApplication.getInstance().getApplicationContext();
+ mContext = RuntimeEnvironment.application;
mPreference = new Preference(mContext);
- when(mMockContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(mCm);
- when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
+ ShadowConnectivityManager connectivityManager =
+ extract(mContext.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);
}
@Test
public void isFromSUW_notAvailable() {
mController = new AutoTimeZonePreferenceController(
- mMockContext, null /* callback */, true /* isFromSUW */);
+ mContext, null /* callback */, true /* isFromSUW */);
assertThat(mController.isAvailable()).isFalse();
}
@@ -73,17 +72,19 @@
@Test
public void notFromSUW_isAvailable() {
mController = new AutoTimeZonePreferenceController(
- mMockContext, null /* callback */, false /* isFromSUW */);
+ mContext, null /* callback */, false /* isFromSUW */);
assertThat(mController.isAvailable()).isTrue();
}
@Test
public void isWifiOnly_notAvailable() {
- when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
+ ShadowConnectivityManager connectivityManager =
+ extract(mContext.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
mController = new AutoTimeZonePreferenceController(
- mMockContext, null /* callback */, false /* isFromSUW */);
+ mContext, null /* callback */, false /* isFromSUW */);
assertThat(mController.isAvailable()).isFalse();
}
@@ -91,17 +92,19 @@
@Test
public void isFromSUW_notEnable() {
mController = new AutoTimeZonePreferenceController(
- mMockContext, null /* callback */, true /* isFromSUW */);
+ mContext, null /* callback */, true /* isFromSUW */);
assertThat(mController.isEnabled()).isFalse();
}
@Test
public void isWifiOnly_notEnable() {
- when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
+ ShadowConnectivityManager connectivityManager =
+ extract(mContext.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
mController = new AutoTimeZonePreferenceController(
- mMockContext, null /* callback */, false /* isFromSUW */);
+ mContext, null /* callback */, false /* isFromSUW */);
assertThat(mController.isEnabled()).isFalse();
}
diff --git a/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java b/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java
index 843c753..ada59f4 100644
--- a/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java
+++ b/tests/robotests/src/com/android/settings/datetime/TimeChangeListenerMixinTest.java
@@ -66,7 +66,8 @@
public void onResume_shouldRegisterIntentFilter() {
mMixin.onResume();
mContext.sendBroadcast(new Intent(Intent.ACTION_TIME_TICK));
- mContext.sendBroadcast(new Intent(Intent.ACTION_TIME_CHANGED));
+ mContext.sendBroadcast(new Intent(Intent.ACTION_TIME_CHANGED)
+ .addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND));
mContext.sendBroadcast(new Intent(Intent.ACTION_TIMEZONE_CHANGED));
verify(mCallback, times(3)).updateTimeAndDateDisplay(mContext);
@@ -77,7 +78,8 @@
mMixin.onResume();
mMixin.onPause();
mContext.sendBroadcast(new Intent(Intent.ACTION_TIME_TICK));
- mContext.sendBroadcast(new Intent(Intent.ACTION_TIME_CHANGED));
+ mContext.sendBroadcast(new Intent(Intent.ACTION_TIME_CHANGED)
+ .addFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND));
mContext.sendBroadcast(new Intent(Intent.ACTION_TIMEZONE_CHANGED));
verify(mCallback, never()).updateTimeAndDateDisplay(mContext);
diff --git a/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java
new file mode 100644
index 0000000..dd29627
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/AbstractBluetoothA2dpPreferenceControllerTest.java
@@ -0,0 +1,175 @@
+/*
+ * 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.AbstractBluetoothA2dpPreferenceController
+ .STREAMING_LABEL_ID;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+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.bluetooth.BluetoothA2dp;
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AbstractBluetoothA2dpPreferenceControllerTest {
+
+ @Mock
+ private BluetoothA2dp mBluetoothA2dp;
+ @Mock
+ private BluetoothCodecConfig mBluetoothCodecConfig;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+
+ private Lifecycle mLifecycle;
+ private Context mContext;
+ private AbstractBluetoothA2dpPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mLifecycle = new Lifecycle();
+ mController = spy(new AbstractBluetoothA2dpPreferenceControllerImpl(mContext, mLifecycle,
+ mBluetoothA2dpConfigStore));
+ doReturn(mBluetoothCodecConfig).when(mController).getCodecConfig();
+ doNothing().when(mController).setCodecConfigPreference(any());
+ when(mBluetoothA2dpConfigStore.createCodecConfig()).thenReturn(mBluetoothCodecConfig);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_bluetoothConnected_shouldUpdateCodec() {
+ mController.onBluetoothServiceConnected(mBluetoothA2dp);
+
+ mController.onPreferenceChange(mPreference, "" /* new value */);
+
+ verify(mController).setCodecConfigPreference(any());
+ }
+
+ @Test
+ public void onPreferenceChange_bluetoothNotConnected_shouldNotUpdateCodec() {
+ mController.onBluetoothServiceDisconnected();
+
+ mController.onPreferenceChange(mPreference, "" /* new value */);
+
+ verify(mController, never()).setCodecConfigPreference(any());
+ }
+
+ @Test
+ public void updateState_option2Set_shouldUpdateToOption2() {
+ when(mBluetoothCodecConfig.getSampleRate()).thenReturn(
+ BluetoothCodecConfig.SAMPLE_RATE_48000);
+
+ doReturn(2).when(mController).getCurrentA2dpSettingIndex(any());
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mController.getListValues()[2]);
+ verify(mPreference).setSummary(mContext.getResources().getString(STREAMING_LABEL_ID,
+ mController.getListSummaries()[2]));
+ }
+
+ @Test
+ public void onBluetoothServiceConnected_shouldUpdateState() {
+ mController.onBluetoothServiceConnected(mBluetoothA2dp);
+
+ verify(mController).updateState(mPreference);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mPreference).setEnabled(false);
+ }
+
+ static class AbstractBluetoothA2dpPreferenceControllerImpl extends
+ AbstractBluetoothA2dpPreferenceController {
+
+ public AbstractBluetoothA2dpPreferenceControllerImpl(Context context,
+ Lifecycle lifecycle, BluetoothA2dpConfigStore store) {
+ super(context, lifecycle, store);
+ }
+
+ @Override
+ public String getPreferenceKey() {
+ return null;
+ }
+
+ @Override
+ protected String[] getListValues() {
+ return new String[]{"1", "2", "3"};
+ }
+
+ @Override
+ protected String[] getListSummaries() {
+ return new String[]{"foo", "bar", "foobar"};
+ }
+
+ @Override
+ protected void writeConfigurationValues(Object newValue) {
+ }
+
+ @Override
+ protected int getCurrentA2dpSettingIndex(BluetoothCodecConfig config) {
+ return 0;
+ }
+
+ @Override
+ protected int getDefaultIndex() {
+ return 0;
+ }
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/development/AdbPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/AdbPreferenceControllerTest.java
index 25353ab..ddcd850 100644
--- a/tests/robotests/src/com/android/settings/development/AdbPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/AdbPreferenceControllerTest.java
@@ -18,12 +18,11 @@
import static com.google.common.truth.Truth.assertThat;
-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 static org.mockito.Mockito.when;
-import android.content.ContentResolver;
import android.content.Context;
import android.os.UserManager;
import android.provider.Settings;
@@ -44,8 +43,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AdbPreferenceControllerTest {
- @Mock
- private Context mContext;
+
@Mock
private SwitchPreference mPreference;
@Mock
@@ -55,71 +53,24 @@
@Mock
private DevelopmentSettingsDashboardFragment mFragment;
- private ContentResolver mContentResolver;
+ private Context mContext;
private AdbPreferenceController mController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
- mContentResolver = RuntimeEnvironment.application.getContentResolver();
+ mContext = RuntimeEnvironment.application;
mController = spy(new AdbPreferenceController(mContext, mFragment));
- doNothing().when(mController).notifyStateChanged();
- when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager);
- when(mContext.getContentResolver()).thenReturn(mContentResolver);
+ doReturn(true).when(mController).isAvailable();
when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
mPreference);
mController.displayPreference(mPreferenceScreen);
}
@Test
- public void isAvailable_notAdmin_shouldBeFalse() {
- when(mUserManager.isAdminUser()).thenReturn(false);
-
- assertThat(mController.isAvailable()).isFalse();
- }
-
- @Test
- public void isAvailable_isAdmin_shouldBeTrue() {
- when(mUserManager.isAdminUser()).thenReturn(true);
-
- assertThat(mController.isAvailable()).isTrue();
- }
-
- @Test
- public void onPreferenceChanged_settingDisabled_shouldTurnOffAdb() {
- when(mContext.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
- mController.onPreferenceChange(null, false);
-
- final int mode = Settings.System.getInt(mContentResolver,
- Settings.Global.ADB_ENABLED, -1);
-
- assertThat(mode).isEqualTo(AdbPreferenceController.ADB_SETTING_OFF);
- }
-
- @Test
- public void updateState_settingEnabled_preferenceShouldBeChecked() {
- Settings.System.putInt(mContentResolver, Settings.Global.ADB_ENABLED,
- AdbPreferenceController.ADB_SETTING_ON);
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Test
- public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
- Settings.System.putInt(mContentResolver, Settings.Global.ADB_ENABLED,
- AdbPreferenceController.ADB_SETTING_OFF);
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Test
public void onDeveloperOptionsDisabled_shouldDisablePreference() {
- when(mContext.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
- when(mUserManager.isAdminUser()).thenReturn(true);
mController.onDeveloperOptionsDisabled();
- final int mode = Settings.System.getInt(mContentResolver,
+ final int mode = Settings.System.getInt(mContext.getContentResolver(),
Settings.Global.ADB_ENABLED, -1);
assertThat(mode).isEqualTo(AdbPreferenceController.ADB_SETTING_OFF);
@@ -138,7 +89,7 @@
@Test
public void onAdbDialogConfirmed_shouldEnableAdbSetting() {
mController.onAdbDialogConfirmed();
- final int mode = Settings.System.getInt(mContentResolver,
+ final int mode = Settings.System.getInt(mContext.getContentResolver(),
Settings.Global.ADB_ENABLED, -1);
assertThat(mode).isEqualTo(AdbPreferenceController.ADB_SETTING_ON);
@@ -146,7 +97,7 @@
@Test
public void onAdbDialogDismissed_preferenceShouldNotBeChecked() {
- Settings.System.putInt(mContentResolver, Settings.Global.ADB_ENABLED,
+ Settings.System.putInt(mContext.getContentResolver(), Settings.Global.ADB_ENABLED,
AdbPreferenceController.ADB_SETTING_OFF);
mController.onAdbDialogDismissed();
diff --git a/tests/robotests/src/com/android/settings/development/AnimatorDurationScalePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/AnimatorDurationScalePreferenceControllerTest.java
new file mode 100644
index 0000000..5acaf0a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/AnimatorDurationScalePreferenceControllerTest.java
@@ -0,0 +1,136 @@
+/*
+ * 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.AnimatorDurationScalePreferenceController
+ .ANIMATOR_DURATION_SCALE_SELECTOR;
+import static com.android.settings.development.AnimatorDurationScalePreferenceController
+ .DEFAULT_VALUE;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.IWindowManager;
+
+import com.android.settings.R;
+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;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class AnimatorDurationScalePreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private IWindowManager mWindowManager;
+
+ /**
+ * 0: Animation off
+ * 1: Animation scale .5x
+ * 2: Animation scale 1x
+ * 3: Animation scale 1.5x
+ * 4: Animation scale 2x
+ * 5: Animation scale 5x
+ * 6: Animation scale 10x
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private AnimatorDurationScalePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(
+ R.array.animator_duration_scale_values);
+ mListSummaries = mContext.getResources().getStringArray(
+ R.array.animator_duration_scale_entries);
+ mController = new AnimatorDurationScalePreferenceController(mContext);
+ ReflectionHelpers.setField(mController, "mWindowManager", mWindowManager);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetDefault() throws RemoteException {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ verify(mWindowManager).setAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR, DEFAULT_VALUE);
+ }
+
+ @Test
+ public void onPreferenceChange_option5Selected_shouldSetOption5() throws RemoteException {
+ mController.onPreferenceChange(mPreference, mListValues[5]);
+
+ verify(mWindowManager).setAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR,
+ Float.valueOf(mListValues[5]));
+ }
+
+ @Test
+ public void updateState_option5Set_shouldUpdatePreferenceToOption5() throws RemoteException {
+ when(mWindowManager.getAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR)).thenReturn(
+ Float.valueOf(mListValues[5]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[5]);
+ verify(mPreference).setSummary(mListSummaries[5]);
+ }
+
+ @Test
+ public void updateState_option3Set_shouldUpdatePreferenceToOption3() throws RemoteException {
+ when(mWindowManager.getAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR)).thenReturn(
+ Float.valueOf(mListValues[3]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[3]);
+ verify(mPreference).setSummary(mListSummaries[3]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() throws RemoteException {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mWindowManager).setAnimationScale(ANIMATOR_DURATION_SCALE_SELECTOR, DEFAULT_VALUE);
+ verify(mPreference).setEnabled(false);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() throws RemoteException {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BackgroundProcessLimitPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BackgroundProcessLimitPreferenceControllerTest.java
new file mode 100644
index 0000000..b384cd0
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BackgroundProcessLimitPreferenceControllerTest.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.IActivityManager;
+import android.content.Context;
+import android.os.RemoteException;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+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)
+public class BackgroundProcessLimitPreferenceControllerTest {
+
+ @Mock
+ private IActivityManager mActivityManager;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: Standard limit
+ * 1: No Background processes
+ * 2: At most 1 process
+ * 3: At most 2 processes
+ * 4: At most 3 processes
+ * 5: At most 4 processes
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private BackgroundProcessLimitPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.app_process_limit_values);
+ mListSummaries = mContext.getResources().getStringArray(R.array.app_process_limit_entries);
+ mController = spy(new BackgroundProcessLimitPreferenceController(mContext));
+ doReturn(mActivityManager).when(mController).getActivityManagerService();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_noBackgroundProcessSet_shouldSetToNoBackgroundProcess()
+ throws RemoteException {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ verify(mActivityManager).setProcessLimit(Integer.valueOf(mListValues[1]));
+ }
+
+ @Test
+ public void onPreferenceChange_1ProcessSet_shouldSetTo1BackgroundProcess()
+ throws RemoteException {
+ mController.onPreferenceChange(mPreference, mListValues[2]);
+
+ verify(mActivityManager).setProcessLimit(Integer.valueOf(mListValues[2]));
+ }
+
+ @Test
+ public void updateState_noBackgroundProcessSet_shouldSetPreferenceToNoBackgroundProcess()
+ throws RemoteException {
+ when(mActivityManager.getProcessLimit()).thenReturn(Integer.valueOf(mListValues[1]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_1ProcessSet_shouldSetPreference1BackgroundProcess()
+ throws RemoteException {
+ when(mActivityManager.getProcessLimit()).thenReturn(Integer.valueOf(mListValues[2]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[2]);
+ verify(mPreference).setSummary(mListSummaries[2]);
+ }
+
+ @Test
+ public void updateState_veryHighLimit_shouldDefaultToStandardLimit() throws RemoteException {
+ when(mActivityManager.getProcessLimit()).thenReturn(Integer.MAX_VALUE);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisableAndResetPreference()
+ throws RemoteException {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mPreference).setEnabled(false);
+ verify(mActivityManager).setProcessLimit(-1);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceControllerTest.java
new file mode 100644
index 0000000..2438b21
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioBitsPerSamplePreferenceControllerTest.java
@@ -0,0 +1,111 @@
+/*
+ * 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.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothAudioBitsPerSamplePreferenceControllerTest {
+
+ @Mock
+ private BluetoothCodecConfig mBluetoothCodecConfig;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+
+ /**
+ * 0: Use System Selection (Default)
+ * 1: 16 bits/sample
+ * 2: 24 bits/sample
+ * 3: 32 bits/sample
+ */
+ private String[] mListValues;
+ private Context mContext;
+ private BluetoothAudioBitsPerSamplePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = spy(new BluetoothAudioBitsPerSamplePreferenceController(mContext,
+ new Lifecycle(), mBluetoothA2dpConfigStore));
+ mListValues = mController.getListValues();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
+ when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
+ mController.writeConfigurationValues(mListValues[2]);
+
+ verify(mBluetoothA2dpConfigStore).setBitsPerSample(BluetoothCodecConfig.BITS_PER_SAMPLE_24);
+ }
+
+ @Test
+ public void writeConfigurationValues_default_shouldSetDefault() {
+ when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
+ mController.writeConfigurationValues(mListValues[0]);
+
+ verify(mBluetoothA2dpConfigStore).setBitsPerSample(
+ BluetoothCodecConfig.BITS_PER_SAMPLE_NONE);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
+ when(mBluetoothCodecConfig.getBitsPerSample()).thenReturn(
+ BluetoothCodecConfig.BITS_PER_SAMPLE_24);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(2);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
+ when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(0);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioChannelModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioChannelModePreferenceControllerTest.java
new file mode 100644
index 0000000..efcd240
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioChannelModePreferenceControllerTest.java
@@ -0,0 +1,110 @@
+/*
+ * 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.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothAudioChannelModePreferenceControllerTest {
+
+ @Mock
+ private BluetoothCodecConfig mBluetoothCodecConfig;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+
+ /**
+ * 0: Use System Selection (Default)
+ * 1: Mono
+ * 2: Stereo
+ */
+ private String[] mListValues;
+ private Context mContext;
+ private BluetoothAudioChannelModePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = spy(new BluetoothAudioChannelModePreferenceController(mContext,
+ new Lifecycle(), mBluetoothA2dpConfigStore));
+ mListValues = mController.getListValues();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
+ when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
+ mController.writeConfigurationValues(mListValues[2]);
+
+ verify(mBluetoothA2dpConfigStore).setChannelMode(BluetoothCodecConfig.CHANNEL_MODE_STEREO);
+ }
+
+ @Test
+ public void writeConfigurationValues_default_shouldSetDefault() {
+ when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
+ mController.writeConfigurationValues(mListValues[0]);
+
+ verify(mBluetoothA2dpConfigStore).setChannelMode(
+ BluetoothCodecConfig.CHANNEL_MODE_NONE);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
+ when(mBluetoothCodecConfig.getChannelMode()).thenReturn(
+ BluetoothCodecConfig.CHANNEL_MODE_STEREO);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(2);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
+ when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(0);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java
new file mode 100644
index 0000000..560a9c3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioCodecPreferenceControllerTest.java
@@ -0,0 +1,117 @@
+/*
+ * 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.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothAudioCodecPreferenceControllerTest {
+
+ @Mock
+ private BluetoothCodecConfig mBluetoothCodecConfig;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+
+ /**
+ * 0: Use System Selection (Default)
+ * 1: SBC
+ * 2: AAC
+ * 3: Qualcomm aptX audio
+ * 4: Qualcomm aptX HD audio
+ * 5: LDAC
+ * 6: Enable Optional Codecs
+ * 7: Disable Optional Codecs
+ */
+ private String[] mListValues;
+ private Context mContext;
+ private BluetoothAudioCodecPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = spy(new BluetoothAudioCodecPreferenceController(mContext, new Lifecycle(),
+ mBluetoothA2dpConfigStore));
+ mListValues = mController.getListValues();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
+ when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
+ mController.writeConfigurationValues(mListValues[2]);
+
+ verify(mBluetoothA2dpConfigStore).setCodecType(BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
+ verify(mBluetoothA2dpConfigStore).setCodecPriority(
+ BluetoothCodecConfig.CODEC_PRIORITY_HIGHEST);
+ }
+
+ @Test
+ public void writeConfigurationValues_default_shouldSetDefaultPriority() {
+ when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
+ mController.writeConfigurationValues(mListValues[0]);
+
+ verify(mBluetoothA2dpConfigStore).setCodecPriority(
+ BluetoothCodecConfig.CODEC_PRIORITY_DEFAULT);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
+ when(mBluetoothCodecConfig.getCodecType()).thenReturn(
+ BluetoothCodecConfig.SOURCE_CODEC_TYPE_AAC);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(2);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
+ when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(0);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioQualityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioQualityPreferenceControllerTest.java
new file mode 100644
index 0000000..e00ac00
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioQualityPreferenceControllerTest.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.development;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothAudioQualityPreferenceControllerTest {
+
+ @Mock
+ private BluetoothCodecConfig mBluetoothCodecConfig;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+
+ /**
+ * 0: Optimized for Audio Quality (990kbps/909kbps)
+ * 1: Balanced Audio And Connection Quality (660kbps/606kbps)
+ * 2: Stereo
+ */
+ private String[] mListValues;
+ private Context mContext;
+ private BluetoothAudioQualityPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = spy(new BluetoothAudioQualityPreferenceController(mContext,
+ new Lifecycle(), mBluetoothA2dpConfigStore));
+ mListValues = mController.getListValues();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void writeConfigurationValues_option3_shouldWrite1003ToSharedStore() {
+ when(mPreference.findIndexOfValue(mListValues[3])).thenReturn(3);
+ mController.writeConfigurationValues(mListValues[3]);
+
+ verify(mBluetoothA2dpConfigStore).setCodecSpecific1Value(1003);
+ }
+
+ @Test
+ public void writeConfigurationValues_default_shouldSetDefault() {
+ when(mPreference.findIndexOfValue(mListValues[0])).thenReturn(0);
+ mController.writeConfigurationValues(mListValues[0]);
+
+ verify(mBluetoothA2dpConfigStore).setCodecSpecific1Value(1000);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
+ when(mBluetoothCodecConfig.getCodecSpecific1()).thenReturn(Long.valueOf(2));
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(2);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
+ when(mBluetoothCodecConfig.getCodecType()).thenReturn(1381391835);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(3);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java
new file mode 100644
index 0000000..f683d21
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothAudioSampleRatePreferenceControllerTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.bluetooth.BluetoothCodecConfig;
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+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;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BluetoothAudioSampleRatePreferenceControllerTest {
+
+ @Mock
+ private BluetoothCodecConfig mBluetoothCodecConfig;
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private BluetoothA2dpConfigStore mBluetoothA2dpConfigStore;
+
+ /**
+ * 0: Use System Selection (Default)
+ * 1: 44.1 kHz
+ * 2: 48.0 kHz
+ * 3: 88.2 kHz
+ * 4: 96.0 kHz
+ */
+ private String[] mListValues;
+ private Lifecycle mLifecycle;
+ private Context mContext;
+ private BluetoothAudioSampleRatePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mLifecycle = new Lifecycle();
+ mController = spy(new BluetoothAudioSampleRatePreferenceController(mContext, mLifecycle,
+ mBluetoothA2dpConfigStore));
+ mListValues = mController.getListValues();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void writeConfigurationValues_option2_shouldWriteOption2ToSharedStore() {
+ when(mPreference.findIndexOfValue(mListValues[2])).thenReturn(2);
+ mController.writeConfigurationValues(mListValues[2]);
+
+ verify(mBluetoothA2dpConfigStore).setSampleRate(BluetoothCodecConfig.SAMPLE_RATE_48000);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_option2_shouldReturnSecondIndex() {
+ when(mBluetoothCodecConfig.getSampleRate()).thenReturn(
+ BluetoothCodecConfig.SAMPLE_RATE_48000);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(2);
+ }
+
+ @Test
+ public void getCurrentA2dpSettingIndex_unknownOption_shouldReturnDefault() {
+ when(mBluetoothCodecConfig.getSampleRate()).thenReturn(1381391835);
+
+ final int index = mController.getCurrentA2dpSettingIndex(mBluetoothCodecConfig);
+
+ assertThat(index).isEqualTo(0);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/BluetoothAvrcpVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/BluetoothAvrcpVersionPreferenceControllerTest.java
new file mode 100644
index 0000000..07d0e50
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/BluetoothAvrcpVersionPreferenceControllerTest.java
@@ -0,0 +1,146 @@
+/*
+ * 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.BluetoothAvrcpVersionPreferenceController
+ .BLUETOOTH_AVRCP_VERSION_PROPERTY;
+
+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.v7.preference.ListPreference;
+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.settings.testutils.shadow.SettingsShadowSystemProperties;
+
+import org.junit.After;
+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 BluetoothAvrcpVersionPreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mPreferenceScreen;
+
+ private Context mContext;
+ private BluetoothAvrcpVersionPreferenceController mController;
+
+ /**
+ * 0: AVRCP 1.4 (Default)
+ * 1: AVRCP 1.3
+ * 2: AVRCP 1.5
+ * 3: AVRCP 1.6
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(
+ R.array.bluetooth_avrcp_version_values);
+ mListSummaries = mContext.getResources().getStringArray(R.array.bluetooth_avrcp_versions);
+ mController = new BluetoothAvrcpVersionPreferenceController(mContext);
+ when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
+ mPreference);
+ mController.displayPreference(mPreferenceScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onPreferenceChange_setAvrcp13_shouldEnableAvrcp13() {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ final String currentValue = SystemProperties.get(BLUETOOTH_AVRCP_VERSION_PROPERTY);
+
+ assertThat(currentValue).isEqualTo(mListValues[1]);
+ }
+
+ @Test
+ public void onPreferenceChange_setAvrcp15_shouldEnableAvrcp15() {
+ mController.onPreferenceChange(mPreference, mListValues[2]);
+
+ final String currentValue = SystemProperties.get(BLUETOOTH_AVRCP_VERSION_PROPERTY);
+
+ assertThat(currentValue).isEqualTo(mListValues[2]);
+ }
+
+ @Test
+ public void updateState_setAvrcp13_shouldSetPreferenceToAvrcp13() {
+ SystemProperties.set(BLUETOOTH_AVRCP_VERSION_PROPERTY, mListValues[1]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_setAvrcp15_shouldSetPreferenceToAvrcp15() {
+ SystemProperties.set(BLUETOOTH_AVRCP_VERSION_PROPERTY, mListValues[2]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[2]);
+ verify(mPreference).setSummary(mListSummaries[2]);
+ }
+
+ @Test
+ public void updateState_noValueSet_shouldSetDefaultToAvrcp14() {
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ 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/CameraHalHdrPlusPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2Test.java
similarity index 75%
rename from tests/robotests/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2Test.java
rename to tests/robotests/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2Test.java
index f28fd6e..e0e137c 100644
--- a/tests/robotests/src/com/android/settings/development/CameraHalHdrPlusPreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/development/CameraHalHdrplusPreferenceControllerV2Test.java
@@ -42,7 +42,7 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
shadows = {SettingsShadowSystemProperties.class})
-public class CameraHalHdrPlusPreferenceControllerV2Test {
+public class CameraHalHdrplusPreferenceControllerV2Test {
@Mock
private PreferenceScreen mScreen;
@@ -50,7 +50,7 @@
private SwitchPreference mPreference;
private Context mContext;
- private CameraHalHdrPlusPreferenceControllerV2 mController;
+ private CameraHalHdrplusPreferenceControllerV2 mController;
static final String USERDEBUG_BUILD = "userdebug";
@@ -58,7 +58,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application;
- mController = new CameraHalHdrPlusPreferenceControllerV2(mContext);
+ mController = new CameraHalHdrplusPreferenceControllerV2(mContext);
when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
mController.displayPreference(mScreen);
@@ -73,18 +73,18 @@
@Config(qualifiers = "mcc999")
public void isAvailable_withConfigNoShowAndUserDebugBuild_shouldReturnFalse() {
SettingsShadowSystemProperties.set(
- CameraHalHdrPlusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
+ CameraHalHdrplusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
assertThat(mController.isAvailable()).isFalse();
}
@Test
- public void updateState_cameraHalHdrPlusEnabled_shouldCheckedPreference() {
+ public void updateState_cameraHalHdrplusEnabled_shouldCheckedPreference() {
SettingsShadowSystemProperties.set(
- CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
- CameraHalHdrPlusPreferenceControllerV2.ENABLED);
+ CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+ CameraHalHdrplusPreferenceControllerV2.ENABLED);
SettingsShadowSystemProperties.set(
- CameraHalHdrPlusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
+ CameraHalHdrplusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
mController.updateState(mPreference);
@@ -92,12 +92,12 @@
}
@Test
- public void updateState_cameraHalHdrPlusEnabled_shouldUncheckedPreference() {
+ public void updateState_cameraHalHdrplusEnabled_shouldUncheckedPreference() {
SettingsShadowSystemProperties.set(
- CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
- CameraHalHdrPlusPreferenceControllerV2.DISABLED);
+ CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+ CameraHalHdrplusPreferenceControllerV2.DISABLED);
SettingsShadowSystemProperties.set(
- CameraHalHdrPlusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
+ CameraHalHdrplusPreferenceControllerV2.BUILD_TYPE, USERDEBUG_BUILD);
mController.updateState(mPreference);
@@ -108,20 +108,20 @@
public void onPreferenceChange_preferenceChecked_shouldEnableCameraHalHdrplus() {
mController.onPreferenceChange(mPreference, true /* new value */);
- assertThat(CameraHalHdrPlusPreferenceControllerV2.ENABLED).isEqualTo(
+ assertThat(CameraHalHdrplusPreferenceControllerV2.ENABLED).isEqualTo(
SystemProperties.get(
- CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
- CameraHalHdrPlusPreferenceControllerV2.DISABLED));
+ CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+ CameraHalHdrplusPreferenceControllerV2.DISABLED));
}
@Test
public void handlePreferenceTreeClick_preferenceUnchecked_shouldDisableCameraHalHdrplus() {
mController.onPreferenceChange(mPreference, false /* new value */);
- assertThat(CameraHalHdrPlusPreferenceControllerV2.DISABLED).isEqualTo(
+ assertThat(CameraHalHdrplusPreferenceControllerV2.DISABLED).isEqualTo(
SystemProperties.get(
- CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
- CameraHalHdrPlusPreferenceControllerV2.DISABLED));
+ CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+ CameraHalHdrplusPreferenceControllerV2.DISABLED));
}
@Test
@@ -137,9 +137,9 @@
verify(mPreference).setEnabled(false);
verify(mPreference).setChecked(false);
- assertThat(CameraHalHdrPlusPreferenceControllerV2.DISABLED).isEqualTo(
+ assertThat(CameraHalHdrplusPreferenceControllerV2.DISABLED).isEqualTo(
SystemProperties.get(
- CameraHalHdrPlusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
- CameraHalHdrPlusPreferenceControllerV2.DISABLED));
+ CameraHalHdrplusPreferenceControllerV2.PROPERTY_CAMERA_HAL_HDRPLUS,
+ CameraHalHdrplusPreferenceControllerV2.DISABLED));
}
}
diff --git a/tests/robotests/src/com/android/settings/development/DebugGpuOverdrawPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DebugGpuOverdrawPreferenceControllerTest.java
new file mode 100644
index 0000000..2a35993
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/DebugGpuOverdrawPreferenceControllerTest.java
@@ -0,0 +1,141 @@
+/*
+ * 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.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+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.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 DebugGpuOverdrawPreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: off
+ * 1: Show overdraw areas
+ * 2: Show areas for Deuteranomaly
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private DebugGpuOverdrawPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.debug_hw_overdraw_values);
+ mListSummaries = mContext.getResources().getStringArray(
+ R.array.debug_hw_overdraw_entries);
+ mController = new DebugGpuOverdrawPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetEmptyString() {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ String mode = SystemProperties.get(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY);
+ assertThat(mode).isEqualTo("");
+ }
+
+ @Test
+ public void onPreferenceChange_option1Selected_shouldSetOption1() {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ String mode = SystemProperties.get(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY);
+ assertThat(mode).isEqualTo(mListValues[1]);
+ }
+
+ @Test
+ public void updateState_option1Set_shouldUpdatePreferenceToOption1() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY, mListValues[1]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_option2Set_shouldUpdatePreferenceToOption2() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY, mListValues[2]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[2]);
+ verify(mPreference).setSummary(mListSummaries[2]);
+ }
+
+ @Test
+ public void updateState_noOptionSet_shouldDefaultToOption0() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_OVERDRAW_PROPERTY, null);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ 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/DebugNonRectClipOperationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DebugNonRectClipOperationsPreferenceControllerTest.java
new file mode 100644
index 0000000..585fe51
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/DebugNonRectClipOperationsPreferenceControllerTest.java
@@ -0,0 +1,144 @@
+/*
+ * 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.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+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.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 DebugNonRectClipOperationsPreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: off
+ * 1: Draw non-rectangular clip region in blue
+ * 2: Highlight tested drawing commands in green
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private DebugNonRectClipOperationsPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.show_non_rect_clip_values);
+ mListSummaries = mContext.getResources().getStringArray(R.array.show_non_rect_clip_entries);
+ mController = new DebugNonRectClipOperationsPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetEmptyString() {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ String mode = SystemProperties.get(
+ ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY);
+ assertThat(mode).isEqualTo("");
+ }
+
+ @Test
+ public void onPreferenceChange_option1Selected_shouldSetOption1() {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ String mode = SystemProperties.get(
+ ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY);
+ assertThat(mode).isEqualTo(mListValues[1]);
+ }
+
+ @Test
+ public void updateState_option1Set_shouldUpdatePreferenceToOption1() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY,
+ mListValues[1]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_option2Set_shouldUpdatePreferenceToOption2() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY,
+ mListValues[2]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[2]);
+ verify(mPreference).setSummary(mListSummaries[2]);
+ }
+
+ @Test
+ public void updateState_noOptionSet_shouldDefaultToOption0() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_SHOW_NON_RECTANGULAR_CLIP_PROPERTY, null);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ 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/DevelopmentSettingsDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
index ddf5365..ac09418 100644
--- a/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/development/DevelopmentSettingsDashboardFragmentTest.java
@@ -17,6 +17,7 @@
package com.android.settings.development;
import static com.google.common.truth.Truth.assertThat;
+
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -34,6 +35,7 @@
import com.android.settings.testutils.shadow.SettingsShadowResources;
import com.android.settings.widget.SwitchBar;
import com.android.settings.widget.ToggleSwitch;
+import com.android.settingslib.development.AbstractEnableAdbPreferenceController;
import com.android.settingslib.development.DevelopmentSettingsEnabler;
import org.junit.After;
@@ -219,6 +221,28 @@
verify(controller).onClearAdbKeysConfirmed();
}
+ @Test
+ public void onDisableLogPersistDialogConfirmed_shouldCallControllerDialogConfirmed() {
+ final LogPersistPreferenceControllerV2 controller = mock(
+ LogPersistPreferenceControllerV2.class);
+ doReturn(controller).when(mDashboard).getDevelopmentOptionsController(
+ LogPersistPreferenceControllerV2.class);
+ mDashboard.onDisableLogPersistDialogConfirmed();
+
+ verify(controller).onDisableLogPersistDialogConfirmed();
+ }
+
+ @Test
+ public void onDisableLogPersistDialogRejected_shouldCallControllerDialogRejected() {
+ final LogPersistPreferenceControllerV2 controller = mock(
+ LogPersistPreferenceControllerV2.class);
+ doReturn(controller).when(mDashboard).getDevelopmentOptionsController(
+ LogPersistPreferenceControllerV2.class);
+ mDashboard.onDisableLogPersistDialogRejected();
+
+ verify(controller).onDisableLogPersistDialogRejected();
+ }
+
@Implements(EnableDevelopmentSettingWarningDialog.class)
public static class ShadowEnableDevelopmentSettingWarningDialog {
@@ -243,7 +267,7 @@
}
}
- @Implements(AdbPreferenceController.class)
+ @Implements(AbstractEnableAdbPreferenceController.class)
public static class ShadowAdbPreferenceController {
@Implementation
public boolean isAvailable() {
diff --git a/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java
new file mode 100644
index 0000000..b4a4212
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/FreeformWindowsPreferenceControllerTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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.FreeformWindowsPreferenceController
+ .SETTING_VALUE_OFF;
+import static com.android.settings.development.FreeformWindowsPreferenceController.SETTING_VALUE_ON;
+import static com.android.settings.development.FreeformWindowsPreferenceController.USER_BUILD_TYPE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.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)
+public class FreeformWindowsPreferenceControllerTest {
+
+ private static final String ENG_BUILD_TYPE = "eng";
+
+ @Mock
+ private SwitchPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ private Context mContext;
+ private FreeformWindowsPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = new FreeformWindowsPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void isAvailable_engBuild_shouldBeTrue() {
+ mController = spy(mController);
+ doReturn(ENG_BUILD_TYPE).when(mController).getBuildType();
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void isAvaiable_userBuild_shouldBeFalse() {
+ mController = spy(mController);
+ doReturn(USER_BUILD_TYPE).when(mController).getBuildType();
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void onPreferenceChange_switchEnabled_shouldEnableFreeformWindows() {
+ mController.onPreferenceChange(mPreference, true /* new value */);
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, -1 /* default */);
+ assertThat(mode).isEqualTo(SETTING_VALUE_ON);
+ }
+
+ @Test
+ public void onPreferenceChange_switchDisabled_shouldDisableFreeformWindows() {
+ mController.onPreferenceChange(mPreference, false /* new value */);
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, -1 /* default */);
+ assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
+ }
+
+ @Test
+ public void updateState_settingEnabled_preferenceShouldBeChecked() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, SETTING_VALUE_ON);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(true);
+ }
+
+ @Test
+ public void updateState_settingDisabled_preferenceShouldNotBeChecked() {
+ Settings.Global.putInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, SETTING_VALUE_OFF);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setChecked(false);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, -1 /* default */);
+ assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
+ verify(mPreference).setEnabled(false);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerV2Test.java
new file mode 100644
index 0000000..3a7604a
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/LogPersistPreferenceControllerV2Test.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v4.content.LocalBroadcastManager;
+import android.support.v7.preference.ListPreference;
+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 com.android.settingslib.R;
+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.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,
+ shadows = {SettingsShadowSystemProperties.class})
+public class LogPersistPreferenceControllerV2Test {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private DevelopmentSettingsDashboardFragment mFragment;
+
+ private Context mContext;
+ private LogPersistPreferenceControllerV2 mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = new LogPersistPreferenceControllerV2(mContext, mFragment, new Lifecycle());
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ SystemProperties.set("ro.debuggable", "1");
+ mController.displayPreference(mScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ 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/LogdSizePreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerV2Test.java
new file mode 100644
index 0000000..71766c3
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/LogdSizePreferenceControllerV2Test.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.support.v7.preference.ListPreference;
+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 com.android.settingslib.R;
+
+import org.junit.After;
+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 LogdSizePreferenceControllerV2Test {
+
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private ListPreference mPreference;
+
+ /**
+ * List Values
+ *
+ * 0: off
+ * 1: 64k
+ * 2: 256k
+ * 3: 1M
+ * 4: 4M
+ * 5: 16M
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private LogdSizePreferenceControllerV2 mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ 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);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisableAndResetPreferenceToDefault() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mPreference).setValue(mListValues[2]);
+ verify(mPreference).setSummary(mListSummaries[2]);
+ 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/LogpersistPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/LogpersistPreferenceControllerTest.java
index 450f29d..379890e 100644
--- a/tests/robotests/src/com/android/settings/development/LogpersistPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/LogpersistPreferenceControllerTest.java
@@ -32,6 +32,10 @@
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 {
diff --git a/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java
new file mode 100644
index 0000000..a949eef
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/MemoryUsagePreferenceControllerTest.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.development;
+
+import static org.mockito.ArgumentMatchers.anyString;
+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 static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.TestConfig;
+import com.android.settings.applications.ProcStatsData;
+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)
+public class MemoryUsagePreferenceControllerTest {
+
+ @Mock
+ private Preference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private ProcStatsData mProcStatsData;
+ @Mock
+ private ProcStatsData.MemInfo mMemInfo;
+
+ private Context mContext;
+ private MemoryUsagePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mController = spy(new MemoryUsagePreferenceController(mContext));
+ doReturn(mProcStatsData).when(mController).getProcStatsData();
+ doNothing().when(mController).setDuration();
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ when(mProcStatsData.getMemInfo()).thenReturn(mMemInfo);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void updateState_shouldUpdatePreferenceSummary() {
+ mController.updateState(mPreference);
+
+ verify(mPreference).setSummary(anyString());
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/ProfileGpuRenderingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ProfileGpuRenderingPreferenceControllerTest.java
new file mode 100644
index 0000000..8175110
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/ProfileGpuRenderingPreferenceControllerTest.java
@@ -0,0 +1,144 @@
+/*
+ * 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.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+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.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 ProfileGpuRenderingPreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: Off
+ * 1: On screen as bars
+ * 2: In adb shell dumpsys gfxinfo
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private ProfileGpuRenderingPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.track_frame_time_values);
+ mListSummaries = mContext.getResources().getStringArray(R.array.track_frame_time_entries);
+ mController = new ProfileGpuRenderingPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetEmptyString() {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ String mode = SystemProperties.get(
+ ThreadedRenderer.PROFILE_PROPERTY);
+ assertThat(mode).isEqualTo("");
+ }
+
+ @Test
+ public void onPreferenceChange_option1Selected_shouldSetOption1() {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ String mode = SystemProperties.get(
+ ThreadedRenderer.PROFILE_PROPERTY);
+ assertThat(mode).isEqualTo(mListValues[1]);
+ }
+
+ @Test
+ public void updateState_option1Set_shouldUpdatePreferenceToOption1() {
+ SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY,
+ mListValues[1]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_option2Set_shouldUpdatePreferenceToOption2() {
+ SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY,
+ mListValues[2]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[2]);
+ verify(mPreference).setSummary(mListSummaries[2]);
+ }
+
+ @Test
+ public void updateState_noOptionSet_shouldDefaultToOption0() {
+ SystemProperties.set(ThreadedRenderer.PROFILE_PROPERTY, null);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ 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/SecondaryDisplayPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SecondaryDisplayPreferenceControllerTest.java
new file mode 100644
index 0000000..485e441
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/SecondaryDisplayPreferenceControllerTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.provider.Settings;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+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)
+public class SecondaryDisplayPreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: None
+ * 1: 480p
+ * 2: 480p (secure)
+ * 3: 720p
+ * 4: 720p (secure)
+ * 5: 1080p
+ * 6: 1080p (secure)
+ * 7: 4K
+ * 8: 4K (secure)
+ * 9: 4K (upscaled)
+ * 10: 4K (upscaled, secure)
+ * 11: 720p, 1080p (dual screen)
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private SecondaryDisplayPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(
+ R.array.overlay_display_devices_values);
+ mListSummaries = mContext.getResources().getStringArray(
+ R.array.overlay_display_devices_entries);
+ mController = new SecondaryDisplayPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_set480p_shouldEnable480p() {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ final String value = Settings.Global.getString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES);
+ assertThat(value).isEqualTo(mListValues[1]);
+ }
+
+ @Test
+ public void onPreferenceChange_set720p_shouldEnable720p() {
+ mController.onPreferenceChange(mPreference, mListValues[3]);
+
+ final String value = Settings.Global.getString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES);
+ assertThat(value).isEqualTo(mListValues[3]);
+ }
+
+ @Test
+ public void updateState_set480p_shouldSetPreferenceTo480p() {
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES, mListValues[1]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_set720p_shouldSetPreferenceTo720p() {
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES, mListValues[3]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[3]);
+ verify(mPreference).setSummary(mListSummaries[3]);
+ }
+
+ @Test
+ public void updateState_nothingSet_shouldSetDefaultToNone() {
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreferenceAndSetToNone() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ final String value = Settings.Global.getString(mContext.getContentResolver(),
+ Settings.Global.OVERLAY_DISPLAY_DEVICES);
+ assertThat(value).isNull();
+ verify(mPreference).setEnabled(false);
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/SetGpuRendererPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SetGpuRendererPreferenceControllerTest.java
new file mode 100644
index 0000000..7b3097b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/SetGpuRendererPreferenceControllerTest.java
@@ -0,0 +1,143 @@
+/*
+ * 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.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.SystemProperties;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.ThreadedRenderer;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+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.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 SetGpuRendererPreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: OpenGl (Default)
+ * 1: OpenGl (Skia)
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private SetGpuRendererPreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.debug_hw_renderer_values);
+ mListSummaries = mContext.getResources().getStringArray(R.array.debug_hw_renderer_entries);
+ mController = new SetGpuRendererPreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @After
+ public void teardown() {
+ SettingsShadowSystemProperties.clear();
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetEmptyString() {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ String mode = SystemProperties.get(
+ ThreadedRenderer.DEBUG_RENDERER_PROPERTY);
+ assertThat(mode).isEqualTo("");
+ }
+
+ @Test
+ public void onPreferenceChange_option1Selected_shouldSetOption1() {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ String mode = SystemProperties.get(
+ ThreadedRenderer.DEBUG_RENDERER_PROPERTY);
+ assertThat(mode).isEqualTo(mListValues[1]);
+ }
+
+ @Test
+ public void updateState_option1Set_shouldUpdatePreferenceToOption1() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_RENDERER_PROPERTY,
+ mListValues[1]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary(mListSummaries[1]);
+ }
+
+ @Test
+ public void updateState_option0Set_shouldUpdatePreferenceToOption0() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_RENDERER_PROPERTY,
+ mListValues[0]);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void updateState_noOptionSet_shouldDefaultToOption0() {
+ SystemProperties.set(ThreadedRenderer.DEBUG_RENDERER_PROPERTY, null);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ verify(mPreference).setSummary(mListSummaries[0]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ 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/ShowTapsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/ShowTapsPreferenceControllerTest.java
index b2731ea..40e2fbd 100644
--- a/tests/robotests/src/com/android/settings/development/ShowTapsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/ShowTapsPreferenceControllerTest.java
@@ -90,17 +90,17 @@
public void onPreferenceChange_preferenceChecked_shouldEnableShowTaps() {
mController.onPreferenceChange(mPreference, true /* new value */);
- int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
+ final int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
Settings.System.SHOW_TOUCHES, -1 /* default */);
assertThat(showTapsMode).isEqualTo(ShowTapsPreferenceController.SETTING_VALUE_ON);
}
@Test
- public void onPreferenceChange__preferenceUnchecked_shouldDisableCameraLaserSensor() {
+ public void onPreferenceChange__preferenceUnchecked_shouldDisableShowTaps() {
mController.onPreferenceChange(mPreference, false /* new value */);
- int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
+ final int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
Settings.System.SHOW_TOUCHES, -1 /* default */);
assertThat(showTapsMode).isEqualTo(ShowTapsPreferenceController.SETTING_VALUE_OFF);
@@ -117,7 +117,7 @@
public void onDeveloperOptionsSwitchDisabled_preferenceShouldBeEnabled() {
mController.onDeveloperOptionsSwitchDisabled();
- int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
+ final int showTapsMode = Settings.System.getInt(mContext.getContentResolver(),
Settings.System.SHOW_TOUCHES, -1 /* default */);
assertThat(showTapsMode).isEqualTo(ShowTapsPreferenceController.SETTING_VALUE_OFF);
diff --git a/tests/robotests/src/com/android/settings/development/SimulateColorSpacePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/SimulateColorSpacePreferenceControllerTest.java
new file mode 100644
index 0000000..23c6e4c
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/SimulateColorSpacePreferenceControllerTest.java
@@ -0,0 +1,174 @@
+/*
+ * 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.SimulateColorSpacePreferenceController
+ .SETTING_VALUE_OFF;
+import static com.android.settings.development.SimulateColorSpacePreferenceController
+ .SETTING_VALUE_ON;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.Settings;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+
+import com.android.settings.R;
+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)
+public class SimulateColorSpacePreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ /**
+ * 0: Disabled
+ * 1: Monochromacy
+ * 2: Deuteranomaly (red-green)
+ * 3: Protanomaly (red-green)
+ * 4: Tritanomaly (blue-yellow)
+ */
+ private String[] mListValues;
+ private Context mContext;
+ private SimulateColorSpacePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.simulate_color_space_values);
+ mController = new SimulateColorSpacePreferenceController(mContext);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_disabledSelected_shouldTurnOffPreference()
+ throws Settings.SettingNotFoundException {
+ mController.onPreferenceChange(mPreference, mListValues[0]);
+
+ final int enabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
+
+ assertThat(enabled).isEqualTo(SETTING_VALUE_OFF);
+ }
+
+ @Test
+ public void onPreferenceChange_monochromacySelected_shouldEnableAndSelectPreference()
+ throws Settings.SettingNotFoundException {
+ mController.onPreferenceChange(mPreference, mListValues[1]);
+
+ final int enabled = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
+ final int settingValue = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER);
+
+ assertThat(enabled).isEqualTo(SETTING_VALUE_ON);
+ assertThat(settingValue).isEqualTo(Integer.valueOf(mListValues[1]));
+ }
+
+ @Test
+ public void updateState_settingOff_shouldSetValueToDisabled() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_OFF);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[0]);
+ }
+
+ @Test
+ public void updateState_settingOnMonochromacyEnabled_shouldSelectMonochromacy() {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_ON);
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, Integer.valueOf(mListValues[1]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[1]);
+ verify(mPreference).setSummary("%s");
+ }
+
+ @Test
+ public void updateState_settingOnControlledByAccessibility_shouldSetOverridedSummary() {
+ Resources res = mContext.getResources();
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_ON);
+ when(mPreference.findIndexOfValue(anyString())).thenReturn(-1);
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setSummary(res.getString(R.string.daltonizer_type_overridden,
+ res.getString(R.string.accessibility_display_daltonizer_preference_title)));
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_notControlledByDevOptions_shouldDisableAndReset()
+ throws Settings.SettingNotFoundException {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_ON);
+ when(mPreference.findIndexOfValue(anyString())).thenReturn(-1);
+
+ mController.onDeveloperOptionsDisabled();
+
+ final int settingValue = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
+ assertThat(settingValue).isEqualTo(SETTING_VALUE_ON);
+ verify(mPreference).setEnabled(false);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_controlledByDevOptions_shouldDisableAndNotReset()
+ throws Settings.SettingNotFoundException {
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, SETTING_VALUE_ON);
+
+ mController.onDeveloperOptionsDisabled();
+
+ final int settingValue = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
+ assertThat(settingValue).isEqualTo(SETTING_VALUE_OFF);
+ 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/StayAwakePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/StayAwakePreferenceControllerTest.java
index daffd2e..41b9fde 100644
--- a/tests/robotests/src/com/android/settings/development/StayAwakePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/development/StayAwakePreferenceControllerTest.java
@@ -123,6 +123,7 @@
public void observerOnChangeCalledWithSameUri_preferenceShouldBeUpdated() {
Settings.System.putInt(mContentResolver, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
StayAwakePreferenceController.SETTING_VALUE_ON);
+ mController.onResume();
mController.mSettingsObserver.onChange(false,
Settings.Global.getUriFor(Settings.Global.STAY_ON_WHILE_PLUGGED_IN));
@@ -133,6 +134,7 @@
public void observerOnChangeCalledWithDifferentUri_preferenceShouldNotBeUpdated() {
Settings.System.putInt(mContentResolver, Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
StayAwakePreferenceController.SETTING_VALUE_ON);
+ mController.onResume();
mController.mSettingsObserver.onChange(false, null);
verify(mPreference, never()).setChecked(true);
diff --git a/tests/robotests/src/com/android/settings/development/TransitionAnimationScalePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/TransitionAnimationScalePreferenceControllerTest.java
new file mode 100644
index 0000000..e8f9980
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/TransitionAnimationScalePreferenceControllerTest.java
@@ -0,0 +1,138 @@
+/*
+ * 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.TransitionAnimationScalePreferenceController
+ .DEFAULT_VALUE;
+import static com.android.settings.development.TransitionAnimationScalePreferenceController
+ .TRANSITION_ANIMATION_SCALE_SELECTOR;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.IWindowManager;
+
+import com.android.settings.R;
+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;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class TransitionAnimationScalePreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private IWindowManager mWindowManager;
+
+ /**
+ * 0: Animation off
+ * 1: Animation scale .5x
+ * 2: Animation scale 1x
+ * 3: Animation scale 1.5x
+ * 4: Animation scale 2x
+ * 5: Animation scale 5x
+ * 6: Animation scale 10x
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private TransitionAnimationScalePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(
+ R.array.transition_animation_scale_values);
+ mListSummaries = mContext.getResources().getStringArray(
+ R.array.transition_animation_scale_entries);
+ mController = new TransitionAnimationScalePreferenceController(mContext);
+ ReflectionHelpers.setField(mController, "mWindowManager", mWindowManager);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetDefault() throws RemoteException {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ verify(mWindowManager).setAnimationScale(TRANSITION_ANIMATION_SCALE_SELECTOR,
+ DEFAULT_VALUE);
+ }
+
+ @Test
+ public void onPreferenceChange_option5Selected_shouldSetOption5() throws RemoteException {
+ mController.onPreferenceChange(mPreference, mListValues[5]);
+
+ verify(mWindowManager).setAnimationScale(TRANSITION_ANIMATION_SCALE_SELECTOR,
+ Float.valueOf(mListValues[5]));
+ }
+
+ @Test
+ public void updateState_option5Set_shouldUpdatePreferenceToOption5() throws RemoteException {
+ when(mWindowManager.getAnimationScale(TRANSITION_ANIMATION_SCALE_SELECTOR)).thenReturn(
+ Float.valueOf(mListValues[5]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[5]);
+ verify(mPreference).setSummary(mListSummaries[5]);
+ }
+
+ @Test
+ public void updateState_option3Set_shouldUpdatePreferenceToOption3() throws RemoteException {
+ when(mWindowManager.getAnimationScale(TRANSITION_ANIMATION_SCALE_SELECTOR)).thenReturn(
+ Float.valueOf(mListValues[3]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[3]);
+ verify(mPreference).setSummary(mListSummaries[3]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() throws RemoteException {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mWindowManager).setAnimationScale(TRANSITION_ANIMATION_SCALE_SELECTOR,
+ DEFAULT_VALUE);
+ verify(mPreference).setEnabled(false);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() throws RemoteException {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java
index faeda87..4f9540f 100644
--- a/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java
+++ b/tests/robotests/src/com/android/settings/development/WebViewAppPreferenceControllerV2Test.java
@@ -22,7 +22,6 @@
import static org.mockito.Mockito.when;
import android.content.Context;
-import android.graphics.drawable.Drawable;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -56,8 +55,6 @@
private Preference mPreference;
@Mock
private DefaultAppInfo mAppInfo;
- @Mock
- private Drawable mDrawable;
private Context mContext;
private WebViewAppPreferenceControllerV2 mController;
@@ -80,24 +77,20 @@
public void updateState_hasAppLabel_shouldSetAppLabelAndIcon() {
final String appLabel = "SomeRandomAppLabel!!!";
when(mAppInfo.loadLabel()).thenReturn(appLabel);
- when(mAppInfo.loadIcon()).thenReturn(mDrawable);
mController.updateState(mPreference);
verify(mPreference).setSummary(appLabel);
- verify(mPreference).setIcon(mDrawable);
}
@Test
public void updateState_noAppLabel_shouldSetAppDefaultLabelAndNullIcon() {
final String appLabel = null;
when(mAppInfo.loadLabel()).thenReturn(appLabel);
- when(mAppInfo.loadIcon()).thenReturn(mDrawable);
mController.updateState(mPreference);
verify(mPreference).setSummary(R.string.app_list_preference_none);
- verify(mPreference).setIcon(null);
}
@Test
diff --git a/tests/robotests/src/com/android/settings/development/WindowAnimationScalePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/WindowAnimationScalePreferenceControllerTest.java
new file mode 100644
index 0000000..0fbff3b
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/WindowAnimationScalePreferenceControllerTest.java
@@ -0,0 +1,135 @@
+/*
+ * 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.WindowAnimationScalePreferenceController
+ .DEFAULT_VALUE;
+import static com.android.settings.development.WindowAnimationScalePreferenceController
+ .WINDOW_ANIMATION_SCALE_SELECTOR;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.PreferenceScreen;
+import android.view.IWindowManager;
+
+import com.android.settings.R;
+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;
+import org.robolectric.util.ReflectionHelpers;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WindowAnimationScalePreferenceControllerTest {
+
+ @Mock
+ private ListPreference mPreference;
+ @Mock
+ private PreferenceScreen mScreen;
+ @Mock
+ private IWindowManager mWindowManager;
+
+ /**
+ * 0: Animation off
+ * 1: Animation scale .5x
+ * 2: Animation scale 1x
+ * 3: Animation scale 1.5x
+ * 4: Animation scale 2x
+ * 5: Animation scale 5x
+ * 6: Animation scale 10x
+ */
+ private String[] mListValues;
+ private String[] mListSummaries;
+ private Context mContext;
+ private WindowAnimationScalePreferenceController mController;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mListValues = mContext.getResources().getStringArray(R.array.window_animation_scale_values);
+ mListSummaries = mContext.getResources().getStringArray(
+ R.array.window_animation_scale_entries);
+ mController = new WindowAnimationScalePreferenceController(mContext);
+ ReflectionHelpers.setField(mController, "mWindowManager", mWindowManager);
+ when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
+ mController.displayPreference(mScreen);
+ }
+
+ @Test
+ public void onPreferenceChange_noValueSet_shouldSetDefault() throws RemoteException {
+ mController.onPreferenceChange(mPreference, null /* new value */);
+
+ verify(mWindowManager).setAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR, DEFAULT_VALUE);
+ }
+
+ @Test
+ public void onPreferenceChange_option5Selected_shouldSetOption5() throws RemoteException {
+ mController.onPreferenceChange(mPreference, mListValues[5]);
+
+ verify(mWindowManager).setAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR,
+ Float.valueOf(mListValues[5]));
+ }
+
+ @Test
+ public void updateState_option5Set_shouldUpdatePreferenceToOption5() throws RemoteException {
+ when(mWindowManager.getAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR)).thenReturn(
+ Float.valueOf(mListValues[5]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[5]);
+ verify(mPreference).setSummary(mListSummaries[5]);
+ }
+
+ @Test
+ public void updateState_option3Set_shouldUpdatePreferenceToOption3() throws RemoteException {
+ when(mWindowManager.getAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR)).thenReturn(
+ Float.valueOf(mListValues[3]));
+
+ mController.updateState(mPreference);
+
+ verify(mPreference).setValue(mListValues[3]);
+ verify(mPreference).setSummary(mListSummaries[3]);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchDisabled_shouldDisablePreference() throws RemoteException {
+ mController.onDeveloperOptionsSwitchDisabled();
+
+ verify(mWindowManager).setAnimationScale(WINDOW_ANIMATION_SCALE_SELECTOR, DEFAULT_VALUE);
+ verify(mPreference).setEnabled(false);
+ }
+
+ @Test
+ public void onDeveloperOptionsSwitchEnabled_shouldEnablePreference() throws RemoteException {
+ mController.onDeveloperOptionsSwitchEnabled();
+
+ verify(mPreference).setEnabled(true);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagsDashboardTest.java b/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagsDashboardTest.java
index 92e92fc..0839a02 100644
--- a/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagsDashboardTest.java
+++ b/tests/robotests/src/com/android/settings/development/featureflags/FeatureFlagsDashboardTest.java
@@ -51,8 +51,8 @@
}
@Test
- public void shouldUsePlaceholderPreferenceLayout() {
+ public void shouldUseFeatureFlagPreferenceLayout() {
assertThat(mDashboard.getPreferenceScreenResId())
- .isEqualTo(R.xml.placeholder_prefs);
+ .isEqualTo(R.xml.feature_flags_settings);
}
}
diff --git a/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java
new file mode 100644
index 0000000..1cdff20
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/development/qstile/DevelopmentTilePreferenceControllerTest.java
@@ -0,0 +1,96 @@
+/*
+ * 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.qstile;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.service.quicksettings.TileService;
+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;
+
+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.Shadows;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowPackageManager;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class DevelopmentTilePreferenceControllerTest {
+
+ @Mock
+ private PreferenceScreen mScreen;
+ private Context mContext;
+ private DevelopmentTilePreferenceController mController;
+ private ShadowPackageManager mShadowPackageManager;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
+ when(mScreen.getContext()).thenReturn(mContext);
+
+ mController = new DevelopmentTilePreferenceController(mContext);
+ assertThat(mController.getPreferenceKey()).isNull();
+ }
+
+ @Test
+ public void isAlwaysAvailable() {
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void display_hasTileService_shouldDisplay() {
+ final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE)
+ .setPackage(mContext.getPackageName());
+ final ResolveInfo info = new ResolveInfo();
+ info.serviceInfo = new FakeServiceInfo();
+ info.serviceInfo.name = "abc";
+ info.serviceInfo.icon = R.drawable.ic_settings_24dp;
+ info.serviceInfo.packageName = mContext.getPackageName();
+ mShadowPackageManager.addResolveInfoForIntent(tileProbe, info);
+
+ mController.displayPreference(mScreen);
+
+ verify(mScreen).addPreference(any(Preference.class));
+ }
+
+ public static class FakeServiceInfo extends ServiceInfo {
+
+ public String loadLabel(PackageManager mgr) {
+ return "hi";
+ }
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java
index 3bba438..a7d7355 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/BasebandVersionPreferenceControllerTest.java
@@ -15,35 +15,33 @@
*/
package com.android.settings.deviceinfo;
-import android.content.Context;
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+import static org.robolectric.shadow.api.Shadow.extract;
+
import android.net.ConnectivityManager;
import android.support.v7.preference.Preference;
-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 com.android.settings.testutils.shadow.ShadowConnectivityManager;
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;
-
@RunWith(SettingsRobolectricTestRunner.class)
-@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
+ shadows = ShadowConnectivityManager.class)
public class BasebandVersionPreferenceControllerTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Context mContext;
- @Mock
- private ConnectivityManager mCm;
@Mock
private Preference mPreference;
@@ -52,19 +50,22 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mController = new BasebandVersionPreferenceController(mContext);
- when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE)).thenReturn(mCm);
+ mController = new BasebandVersionPreferenceController(RuntimeEnvironment.application);
}
@Test
public void isAvailable_wifiOnly_shouldReturnFalse() {
- when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(false);
+ ShadowConnectivityManager connectivityManager =
+ extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
assertThat(mController.isAvailable()).isFalse();
}
@Test
public void isAvailable_hasMobile_shouldReturnTrue() {
- when(mCm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)).thenReturn(true);
+ ShadowConnectivityManager connectivityManager =
+ extract(RuntimeEnvironment.application.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);
assertThat(mController.isAvailable()).isTrue();
}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java
new file mode 100644
index 0000000..362e813
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/deviceinfo/BatteryInfoPreferenceControllerTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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.deviceinfo;
+
+import static com.android.settings.deviceinfo.BatteryInfoPreferenceController
+ .BATTERY_INFO_RECEIVER_INTENT_FILTER;
+import static com.android.settings.deviceinfo.BatteryInfoPreferenceController.KEY_BATTERY_LEVEL;
+import static com.android.settings.deviceinfo.BatteryInfoPreferenceController.KEY_BATTERY_STATUS;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.BatteryManager;
+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;
+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)
+public class BatteryInfoPreferenceControllerTest {
+
+ private Context mContext;
+ @Mock
+ private PreferenceScreen mScreen;
+
+ private Preference mBatteryLevel;
+ private Preference mBatteryStatus;
+ private Lifecycle mLifecycle;
+ private BatteryInfoPreferenceController mController;
+
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = RuntimeEnvironment.application;
+ mLifecycle = new Lifecycle();
+ mController = new BatteryInfoPreferenceController(mContext, mLifecycle);
+ mBatteryLevel = new Preference(mContext);
+ mBatteryStatus = new Preference(mContext);
+ when(mScreen.findPreference(KEY_BATTERY_STATUS)).thenReturn(mBatteryStatus);
+ when(mScreen.findPreference(KEY_BATTERY_LEVEL)).thenReturn(mBatteryLevel);
+ }
+
+ @Test
+ public void isAlwaysAvailable() {
+ assertThat(mController.getPreferenceKey()).isNull();
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void runThroughLifecycle_shouldRegisterUnregisterBatteryInfoReceiver() {
+ final Context context = mock(Context.class);
+ mController = new BatteryInfoPreferenceController(context, mLifecycle);
+ mLifecycle.onStart();
+ mLifecycle.onStop();
+
+ verify(context).registerReceiver(mController.mBatteryInfoReceiver,
+ BATTERY_INFO_RECEIVER_INTENT_FILTER);
+ verify(context).unregisterReceiver(mController.mBatteryInfoReceiver);
+ }
+
+ @Test
+ public void onReceiveBatteryInfoBroadcast_shouldUpdatePreferences() {
+ mController.displayPreference(mScreen);
+ final Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
+ intent.putExtra(BatteryManager.EXTRA_LEVEL, 50);
+ intent.putExtra(BatteryManager.EXTRA_SCALE, 100);
+ intent.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
+
+ mController.mBatteryInfoReceiver.onReceive(mContext, intent);
+
+ assertThat(mBatteryLevel.getSummary()).isEqualTo("50%");
+ assertThat(mBatteryStatus.getSummary())
+ .isEqualTo(mContext.getText(R.string.battery_info_status_charging));
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
index 8e8da51..15461cc2 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/HardwareInfoDialogFragmentTest.java
@@ -16,13 +16,20 @@
package com.android.settings.deviceinfo;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
import android.app.Activity;
import android.os.SystemProperties;
import android.view.View;
import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -30,12 +37,6 @@
import org.robolectric.Robolectric;
import org.robolectric.annotation.Config;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class HardwareInfoDialogFragmentTest {
@@ -53,6 +54,7 @@
SystemProperties.set("ro.boot.hardware.revision", TEST_HARDWARE_REV);
final HardwareInfoDialogFragment fragment = spy(HardwareInfoDialogFragment.newInstance());
+ doReturn("").when(fragment).getSerialNumber();
fragment.show(mActivity.getFragmentManager(), HardwareInfoDialogFragment.TAG);
verify(fragment).setText(
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
index ddd3d47..e6c161e 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/storage/StorageItemPreferenceControllerTest.java
@@ -16,8 +16,8 @@
package com.android.settings.deviceinfo.storage;
-import static com.android.settings.applications.ManageApplications.EXTRA_WORK_ID;
-import static com.android.settings.applications.ManageApplications.EXTRA_WORK_ONLY;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ID;
+import static com.android.settings.applications.manageapplications.ManageApplications.EXTRA_WORK_ONLY;
import static com.android.settings.utils.FileSizeFormatter.MEGABYTE_IN_BYTES;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.nullable;
@@ -45,7 +45,7 @@
import com.android.settings.SettingsActivity;
import com.android.settings.SubSettings;
import com.android.settings.TestConfig;
-import com.android.settings.applications.ManageApplications;
+import com.android.settings.applications.manageapplications.ManageApplications;
import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.deviceinfo.PrivateVolumeSettings;
import com.android.settings.deviceinfo.StorageItemPreference;
diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
index 3869807..dfe81db 100644
--- a/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayAlwaysOnPreferenceControllerTest.java
@@ -17,7 +17,6 @@
package com.android.settings.display;
import static com.google.common.truth.Truth.assertThat;
-
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
diff --git a/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java
index 242a05d..e1ce694 100644
--- a/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AmbientDisplayNotificationsPreferenceControllerTest.java
@@ -17,9 +17,7 @@
package com.android.settings.display;
import static com.android.internal.logging.nano.MetricsProto.MetricsEvent.ACTION_AMBIENT_DISPLAY;
-
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;
@@ -33,11 +31,11 @@
import android.support.v14.preference.SwitchPreference;
import com.android.internal.hardware.AmbientDisplayConfiguration;
+import com.android.settings.TestConfig;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.search.InlinePayload;
import com.android.settings.search.InlineSwitchPayload;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.core.instrumentation.MetricsFeatureProvider;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import org.junit.Before;
diff --git a/tests/robotests/src/com/android/settings/display/AppGridViewTest.java b/tests/robotests/src/com/android/settings/display/AppGridViewTest.java
new file mode 100644
index 0000000..d0a92c9
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/AppGridViewTest.java
@@ -0,0 +1,78 @@
+/*
+ * 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.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import android.util.IconDrawableFactory;
+
+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)
+public class AppGridViewTest {
+
+ @Mock
+ private ResolveInfo mInfo;
+ @Mock
+ private ActivityInfo mActivityInfo;
+ private Context mContext;
+ private IconDrawableFactory mIconFactory;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mInfo.activityInfo = mActivityInfo;
+ mContext = RuntimeEnvironment.application;
+ mIconFactory = IconDrawableFactory.newInstance(mContext);
+ }
+
+ @Test
+ public void appEntry_shouldLoadIcon() {
+
+ final AppGridView.ActivityEntry activityEntry = new AppGridView.ActivityEntry(
+ mInfo, "label", mIconFactory);
+
+ assertThat(activityEntry.label).isEqualTo("label");
+ assertThat(activityEntry.getIcon()).isNotNull();
+ }
+
+ @Test
+ public void appEntry_compare_shouldCompareIgnoreCase() {
+ final AppGridView.ActivityEntry entry1 = new AppGridView.ActivityEntry(
+ mInfo, "label", mIconFactory);
+ final AppGridView.ActivityEntry entry2 = new AppGridView.ActivityEntry(
+ mInfo, "LABEL", mIconFactory);
+ final AppGridView.ActivityEntry entry3 = new AppGridView.ActivityEntry(
+ mInfo, "label2", mIconFactory);
+
+ assertThat(entry1.compareTo(entry2)).isEqualTo(0);
+ assertThat(entry1.compareTo(entry3)).isNotEqualTo(0);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
index 02f46f2..b46441d 100644
--- a/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/display/AutoBrightnessPreferenceControllerTest.java
@@ -16,14 +16,20 @@
package com.android.settings.display;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
+import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
+import static com.google.common.truth.Truth.assertThat;
+
import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
import com.android.settings.TestConfig;
import com.android.settings.search.InlinePayload;
import com.android.settings.search.InlineSwitchPayload;
import com.android.settings.search.ResultPayload;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -34,11 +40,6 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-import static com.google.common.truth.Truth.assertThat;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AutoBrightnessPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java
deleted file mode 100644
index 00d910e..0000000
--- a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java
+++ /dev/null
@@ -1,113 +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.display;
-
-import android.content.Context;
-import android.os.IBinder;
-import android.support.v14.preference.SwitchPreference;
-import android.support.v7.preference.PreferenceScreen;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.annotation.Config;
-import org.robolectric.util.ReflectionHelpers;
-
-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)
-public class ColorModePreferenceControllerTest {
- @Mock
- private ColorModePreferenceController.ConfigurationWrapper mConfigWrapper;
- @Mock
- private SwitchPreference mPreference;
- @Mock
- private PreferenceScreen mScreen;
- @Mock
- private Context mContext;
- @Mock
- private IBinder mSurfaceFlinger;
-
- private ColorModePreferenceController mController;
-
- @Before
- public void setup() {
- MockitoAnnotations.initMocks(this);
- SettingsShadowSystemProperties.clear();
-
- mController = new ColorModePreferenceController(mContext);
- ReflectionHelpers.setField(mController, "mSurfaceFlinger", mSurfaceFlinger);
- ReflectionHelpers.setField(mController, "mConfigWrapper", mConfigWrapper);
-
- when(mConfigWrapper.isScreenWideColorGamut()).thenReturn(true);
-
- when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference);
- when(mPreference.getKey()).thenReturn(mController.getPreferenceKey());
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void shouldCheckPreference() {
- SettingsShadowSystemProperties.set(
- ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION,
- Float.toString(ColorModePreferenceController.COLOR_SATURATION_VIVID));
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(true);
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void shouldUncheckPreference() {
- SettingsShadowSystemProperties.set(
- ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION,
- Float.toString(ColorModePreferenceController.COLOR_SATURATION_DEFAULT));
-
- mController.updateState(mPreference);
-
- verify(mPreference).setChecked(false);
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void shouldBoostSaturationOnCheck() {
- mController.onPreferenceChange(mPreference, true);
-
- String saturation = SettingsShadowSystemProperties
- .get(ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION);
- assertThat(saturation)
- .isEqualTo(Float.toString(ColorModePreferenceController.COLOR_SATURATION_VIVID));
- }
-
- @Config(shadows = {SettingsShadowSystemProperties.class})
- @Test
- public void shouldResetSaturationOnUncheck() {
- mController.onPreferenceChange(mPreference, false);
-
- String saturation = SettingsShadowSystemProperties
- .get(ColorModePreferenceController.PERSISTENT_PROPERTY_SATURATION);
- assertThat(saturation)
- .isEqualTo(Float.toString(ColorModePreferenceController.COLOR_SATURATION_DEFAULT));
- }
-}
diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
new file mode 100644
index 0000000..435f4f2
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java
@@ -0,0 +1,170 @@
+/*
+ * 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.display;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+
+import android.app.IActivityManager;
+import android.content.res.Configuration;
+import android.os.IBinder;
+import android.os.RemoteException;
+
+import com.android.internal.logging.nano.MetricsProto;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
+import com.android.settings.widget.RadioButtonPickerFragment;
+
+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.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ColorModePreferenceFragmentTest {
+ @Mock
+ private IBinder mSurfaceFlinger;
+ @Mock
+ private IActivityManager mActivityManager;
+
+ private ColorModePreferenceFragment mFragment;
+
+ @Before
+ public void setup() {
+ MockitoAnnotations.initMocks(this);
+ SettingsShadowSystemProperties.clear();
+
+ mFragment = spy(new ColorModePreferenceFragment());
+ doReturn(RuntimeEnvironment.application).when(mFragment).getContext();
+ doNothing().when(mFragment).updateConfiguration();
+
+ ReflectionHelpers.setField(mFragment, "mSurfaceFlinger", mSurfaceFlinger);
+ ReflectionHelpers.setField(mFragment, "mActivityManager", mActivityManager);
+ }
+
+ @Test
+ public void verifyMetricsConstant() {
+ assertThat(mFragment.getMetricsCategory())
+ .isEqualTo(MetricsProto.MetricsEvent.COLOR_MODE_SETTINGS);
+ }
+
+ @Test
+ public void getCandidates() {
+ List<? extends RadioButtonPickerFragment.CandidateInfo> candidates =
+ mFragment.getCandidates();
+
+ assertThat(candidates.size()).isEqualTo(3);
+ assertThat(candidates.get(0).getKey())
+ .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
+ assertThat(candidates.get(1).getKey())
+ .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
+ assertThat(candidates.get(2).getKey())
+ .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void getKey_natural() {
+ SettingsShadowSystemProperties.set(
+ ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION,
+ Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_NATURAL));
+ SettingsShadowSystemProperties.set(
+ ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE, "0");
+
+ assertThat(mFragment.getDefaultKey())
+ .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void getKey_boosted() {
+ SettingsShadowSystemProperties.set(
+ ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION,
+ Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_BOOSTED));
+ SettingsShadowSystemProperties.set(
+ ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE, "0");
+
+ assertThat(mFragment.getDefaultKey())
+ .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void getKey_saturated() {
+ SettingsShadowSystemProperties.set(
+ ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE, "1");
+
+ assertThat(mFragment.getDefaultKey())
+ .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void setKey_natural() {
+ mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
+
+ String saturation = SettingsShadowSystemProperties
+ .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION);
+ assertThat(saturation)
+ .isEqualTo(Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_NATURAL));
+
+ String nativeMode = SettingsShadowSystemProperties
+ .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE);
+ assertThat(nativeMode).isEqualTo("0");
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void setKey_boosted() {
+ mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
+
+ String saturation = SettingsShadowSystemProperties
+ .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION);
+ assertThat(saturation)
+ .isEqualTo(Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_BOOSTED));
+
+ String nativeMode = SettingsShadowSystemProperties
+ .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE);
+ assertThat(nativeMode).isEqualTo("0");
+ }
+
+ @Config(shadows = {SettingsShadowSystemProperties.class})
+ @Test
+ public void setKey_saturated() {
+ mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
+
+ String saturation = SettingsShadowSystemProperties
+ .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_SATURATION);
+ assertThat(saturation)
+ .isEqualTo(Float.toString(ColorModePreferenceFragment.COLOR_SATURATION_NATURAL));
+
+ String nativeMode = SettingsShadowSystemProperties
+ .get(ColorModePreferenceFragment.PERSISTENT_PROPERTY_NATIVE_MODE);
+ assertThat(nativeMode).isEqualTo("1");
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java
index 1e173a2..0e32f6b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatterySaverSettingsTest.java
@@ -18,7 +18,9 @@
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
+import android.provider.SearchIndexableResource;
+import com.android.settings.R;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.SwitchBar;
@@ -30,6 +32,8 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
+import java.util.List;
+
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BatterySaverSettingsTest {
@@ -58,4 +62,13 @@
assertThat(mBatterySaverSettings.mSwitchBar.isEnabled()).isTrue();
}
+
+ @Test
+ public void searchProvider_shouldIndexDefaultXml() {
+ final List<SearchIndexableResource> sir = mBatterySaverSettings.SEARCH_INDEX_DATA_PROVIDER
+ .getXmlResourcesToIndex(mContext, true /* enabled */);
+
+ assertThat(sir).hasSize(1);
+ assertThat(sir.get(0).xmlResId).isEqualTo(R.xml.battery_saver_settings);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java
index 9bbc9bd..46db6b3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/AnomalyDetectionPolicyTest.java
@@ -41,11 +41,13 @@
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AnomalyDetectionPolicyTest {
- private static final String ANOMALY_DETECTION_CONSTANTS_VALUE = "anomaly_detection_enabled=true"
+ private static final String ANOMALY_DETECTION_CONSTANTS_VALUE =
+ "anomaly_detection_enabled=true"
+ ",wakelock_enabled=false"
+ ",wakelock_threshold=3000"
+ ",wakeup_alarm_enabled=true"
+ ",wakeup_alarm_threshold=100"
+ + ",wakeup_blacklisted_tags=tag1:tag2:with%2Ccomma:with%3Acolon"
+ ",bluetooth_scan_enabled=true"
+ ",bluetooth_scan_threshold=2000";
private Context mContext;
@@ -59,7 +61,7 @@
}
@Test
- public void testInit_containsDataFromSettings() {
+ public void testInit_usesConfigValues() {
AnomalyDetectionPolicy anomalyDetectionPolicy = createAnomalyPolicyWithConfig();
assertThat(anomalyDetectionPolicy.anomalyDetectionEnabled).isTrue();
@@ -67,12 +69,14 @@
assertThat(anomalyDetectionPolicy.wakeLockThreshold).isEqualTo(3000);
assertThat(anomalyDetectionPolicy.wakeupAlarmDetectionEnabled).isTrue();
assertThat(anomalyDetectionPolicy.wakeupAlarmThreshold).isEqualTo(100);
+ assertThat(anomalyDetectionPolicy.wakeupBlacklistedTags)
+ .containsExactly("tag1", "tag2", "with,comma", "with:colon");
assertThat(anomalyDetectionPolicy.bluetoothScanDetectionEnabled).isTrue();
assertThat(anomalyDetectionPolicy.bluetoothScanThreshold).isEqualTo(2000);
}
@Test
- public void testInit_containsDefaultData() {
+ public void testInit_defaultValues() {
Settings.Global.putString(mContext.getContentResolver(),
Settings.Global.ANOMALY_DETECTION_CONSTANTS, "");
// Mock it to avoid noSuchMethodError
@@ -82,18 +86,19 @@
AnomalyDetectionPolicy anomalyDetectionPolicy = new AnomalyDetectionPolicy(mContext,
mKeyValueListParserWrapper);
- assertThat(anomalyDetectionPolicy.anomalyDetectionEnabled).isTrue();
- assertThat(anomalyDetectionPolicy.wakeLockDetectionEnabled).isTrue();
+ assertThat(anomalyDetectionPolicy.anomalyDetectionEnabled).isFalse();
+ assertThat(anomalyDetectionPolicy.wakeLockDetectionEnabled).isFalse();
assertThat(anomalyDetectionPolicy.wakeLockThreshold).isEqualTo(DateUtils.HOUR_IN_MILLIS);
assertThat(anomalyDetectionPolicy.wakeupAlarmDetectionEnabled).isFalse();
- assertThat(anomalyDetectionPolicy.wakeupAlarmThreshold).isEqualTo(60);
- assertThat(anomalyDetectionPolicy.bluetoothScanDetectionEnabled).isTrue();
+ assertThat(anomalyDetectionPolicy.wakeupAlarmThreshold).isEqualTo(10);
+ assertThat(anomalyDetectionPolicy.wakeupBlacklistedTags).isNull();
+ assertThat(anomalyDetectionPolicy.bluetoothScanDetectionEnabled).isFalse();
assertThat(anomalyDetectionPolicy.bluetoothScanThreshold).isEqualTo(
30 * DateUtils.MINUTE_IN_MILLIS);
}
@Test
- public void testIsAnomalyDetectorEnabled() {
+ public void testIsAnomalyDetectorEnabled_usesConfigValues() {
AnomalyDetectionPolicy anomalyDetectionPolicy = createAnomalyPolicyWithConfig();
assertThat(anomalyDetectionPolicy.isAnomalyDetectorEnabled(
@@ -104,18 +109,37 @@
Anomaly.AnomalyType.BLUETOOTH_SCAN)).isTrue();
}
+ @Test
+ public void testIsAnomalyDetectorEnabled_usesDefaultValues() {
+ Settings.Global.putString(mContext.getContentResolver(),
+ Settings.Global.ANOMALY_DETECTION_CONSTANTS, "");
+ // Mock it to avoid noSuchMethodError
+ doReturn(true).when(mKeyValueListParserWrapper).getBoolean(anyString(), eq(true));
+ doReturn(false).when(mKeyValueListParserWrapper).getBoolean(anyString(), eq(false));
+
+ AnomalyDetectionPolicy anomalyDetectionPolicy = new AnomalyDetectionPolicy(mContext,
+ mKeyValueListParserWrapper);
+
+ assertThat(anomalyDetectionPolicy.isAnomalyDetectorEnabled(
+ Anomaly.AnomalyType.WAKE_LOCK)).isFalse();
+ assertThat(anomalyDetectionPolicy.isAnomalyDetectorEnabled(
+ Anomaly.AnomalyType.WAKEUP_ALARM)).isFalse();
+ assertThat(anomalyDetectionPolicy.isAnomalyDetectorEnabled(
+ Anomaly.AnomalyType.BLUETOOTH_SCAN)).isFalse();
+ }
+
private AnomalyDetectionPolicy createAnomalyPolicyWithConfig() {
Settings.Global.putString(mContext.getContentResolver(),
Settings.Global.ANOMALY_DETECTION_CONSTANTS, ANOMALY_DETECTION_CONSTANTS_VALUE);
// Mock it to avoid noSuchMethodError
doReturn(true).when(mKeyValueListParserWrapper).getBoolean(
- AnomalyDetectionPolicy.KEY_ANOMALY_DETECTION_ENABLED, true);
+ AnomalyDetectionPolicy.KEY_ANOMALY_DETECTION_ENABLED, false);
doReturn(false).when(mKeyValueListParserWrapper).getBoolean(
- AnomalyDetectionPolicy.KEY_WAKELOCK_DETECTION_ENABLED, true);
+ AnomalyDetectionPolicy.KEY_WAKELOCK_DETECTION_ENABLED, false);
doReturn(true).when(mKeyValueListParserWrapper).getBoolean(
AnomalyDetectionPolicy.KEY_WAKEUP_ALARM_DETECTION_ENABLED, false);
doReturn(true).when(mKeyValueListParserWrapper).getBoolean(
- AnomalyDetectionPolicy.KEY_BLUETOOTH_SCAN_DETECTION_ENABLED, true);
+ AnomalyDetectionPolicy.KEY_BLUETOOTH_SCAN_DETECTION_ENABLED, false);
return new AnomalyDetectionPolicy(mContext, mKeyValueListParserWrapper);
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetectorTest.java
index 55be734..13a5ab8 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/anomaly/checker/WakeupAlarmAnomalyDetectorTest.java
@@ -30,6 +30,7 @@
import android.os.Build;
import android.text.format.DateUtils;
import android.util.ArrayMap;
+import android.util.ArraySet;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
@@ -52,6 +53,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Set;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -69,6 +71,7 @@
1 * DateUtils.HOUR_IN_MILLIS + 10 * DateUtils.MINUTE_IN_MILLIS;
private static final int ANOMALY_WAKEUP_COUNT = 500;
private static final int NORMAL_WAKEUP_COUNT = 61;
+ private static final int BLACKLISTED_WAKEUP_COUNT = 37;
private static final int ANOMALY_WAKEUP_FREQUENCY = 428; // count per hour
@Mock
private BatteryStatsHelper mBatteryStatsHelper;
@@ -87,12 +90,12 @@
@Mock
private BatteryUtils mBatteryUtils;
@Mock
- private ApplicationInfo mApplicationInfo;
- @Mock
private BatteryStats.Uid.Pkg mPkg;
@Mock
private BatteryStats.Counter mCounter;
@Mock
+ private BatteryStats.Counter mCounter2;
+ @Mock
private AnomalyDetectionPolicy mPolicy;
@Mock
private AnomalyAction mAnomalyAction;
@@ -111,6 +114,9 @@
mContext = spy(RuntimeEnvironment.application);
ReflectionHelpers.setField(mPolicy, "wakeupAlarmThreshold", 60);
+ final Set<String> blacklistedTags = new ArraySet<>();
+ blacklistedTags.add("blacklistedTag");
+ ReflectionHelpers.setField(mPolicy, "wakeupBlacklistedTags", blacklistedTags);
doReturn(false).when(mBatteryUtils).shouldHideSipper(any());
doReturn(RUNNING_TIME_MS).when(mBatteryUtils).calculateRunningTimeBasedOnStatsType(any(),
@@ -207,4 +213,20 @@
assertThat(mWakeupAlarmAnomalyDetector.getWakeupAlarmCountFromUid(mAnomalyUid)).isEqualTo(
2 * NORMAL_WAKEUP_COUNT);
}
+
+ @Test
+ public void testGetWakeupAlarmCountFromUid_filterOutBlacklistedTags() {
+ final ArrayMap<String, BatteryStats.Uid.Pkg> packageStats = new ArrayMap<>();
+ final ArrayMap<String, BatteryStats.Counter> alarms = new ArrayMap<>();
+ doReturn(alarms).when(mPkg).getWakeupAlarmStats();
+ doReturn(NORMAL_WAKEUP_COUNT).when(mCounter).getCountLocked(anyInt());
+ doReturn(BLACKLISTED_WAKEUP_COUNT).when(mCounter2).getCountLocked(anyInt());
+ doReturn(packageStats).when(mAnomalyUid).getPackageStats();
+ packageStats.put("", mPkg);
+ alarms.put("allowedTag", mCounter);
+ alarms.put("blacklistedTag", mCounter2);
+
+ assertThat(mWakeupAlarmAnomalyDetector.getWakeupAlarmCountFromUid(mAnomalyUid)).isEqualTo(
+ NORMAL_WAKEUP_COUNT);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
index 0c804b3..1f5ca20 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapPowerPreferenceControllerTest.java
@@ -35,7 +35,6 @@
import com.android.settings.search.ResultPayload;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.SettingsShadowResources;
-import com.android.settings.testutils.shadow.SettingsShadowSystemProperties;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import org.junit.After;
diff --git a/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java
index 4050dd1..7b315aa 100644
--- a/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/language/PhoneLanguagePreferenceControllerTest.java
@@ -16,12 +16,16 @@
package com.android.settings.language;
+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.support.v7.preference.Preference;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -31,9 +35,8 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
+import java.util.ArrayList;
+import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -77,4 +80,11 @@
verify(mPreference).setSummary(testSummary);
}
+
+ @Test
+ public void testUpdateNonIndexable_shouldAddKey() {
+ final List<String> niks = new ArrayList<>();
+ mController.updateNonIndexableKeys(niks);
+ assertThat(niks).containsExactly(mController.getPreferenceKey());
+ }
}
diff --git a/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java
index 87691a5..355d6d0 100644
--- a/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java
@@ -16,7 +16,6 @@
package com.android.settings.location;
import static com.google.common.truth.Truth.assertThat;
-
import static org.mockito.ArgumentMatchers.nullable;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;
@@ -34,11 +33,11 @@
import android.support.v7.preference.PreferenceScreen;
import com.android.settings.R;
+import com.android.settings.TestConfig;
import com.android.settings.search.InlineListPayload;
import com.android.settings.search.InlinePayload;
import com.android.settings.search.ResultPayload;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
import com.android.settings.testutils.shadow.ShadowSecureSettings;
import com.android.settingslib.core.lifecycle.Lifecycle;
diff --git a/tests/robotests/src/com/android/settings/location/ScanningSettingsTest.java b/tests/robotests/src/com/android/settings/location/ScanningSettingsTest.java
new file mode 100644
index 0000000..47b81bf
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/location/ScanningSettingsTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.location;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.provider.SearchIndexableResource;
+
+import com.android.settings.R;
+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.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ScanningSettingsTest {
+
+ private Context mContext;
+ private ScanningSettings mSettings;
+
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+ mSettings = new ScanningSettings();
+ }
+
+ @Test
+ public void searchProvider_shouldIndexDefaultXml() {
+ final List<SearchIndexableResource> sir = mSettings.SEARCH_INDEX_DATA_PROVIDER
+ .getXmlResourcesToIndex(mContext, true /* enabled */);
+
+ assertThat(sir).hasSize(1);
+ assertThat(sir.get(0).xmlResId).isEqualTo(R.xml.location_scanning);
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
index 2c11e0c..1a66dcc 100644
--- a/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/MobileNetworkPreferenceControllerTest.java
@@ -15,51 +15,48 @@
*/
package com.android.settings.network;
+import static com.google.common.truth.Truth.assertThat;
+
+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.shadow.api.Shadow.extract;
+
import android.content.Context;
import android.net.ConnectivityManager;
-import android.os.UserHandle;
import android.os.UserManager;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.ShadowConnectivityManager;
import com.android.settings.testutils.shadow.ShadowRestrictedLockUtilsWrapper;
+import com.android.settings.testutils.shadow.ShadowUserManager;
import com.android.settingslib.core.lifecycle.Lifecycle;
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.Matchers.any;
-import static org.mockito.Matchers.anyString;
-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;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(
manifest = TestConfig.MANIFEST_PATH,
sdk = TestConfig.SDK_VERSION,
- shadows = ShadowRestrictedLockUtilsWrapper.class
+ shadows = {ShadowRestrictedLockUtilsWrapper.class, ShadowConnectivityManager.class,
+ ShadowUserManager.class}
)
public class MobileNetworkPreferenceControllerTest {
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private UserManager mUserManager;
- @Mock
- private ConnectivityManager mConnectivityManager;
@Mock
private TelephonyManager mTelephonyManager;
@Mock
@@ -71,21 +68,19 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
+ mContext = spy(RuntimeEnvironment.application);
mLifecycle = new Lifecycle();
- when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- when(mContext.getSystemService(Context.CONNECTIVITY_SERVICE))
- .thenReturn(mConnectivityManager);
when(mContext.getSystemService(Context.TELEPHONY_SERVICE))
.thenReturn(mTelephonyManager);
}
@Test
public void secondaryUser_prefIsNotAvailable() {
- when(mUserManager.isAdminUser()).thenReturn(false);
- when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class)))
- .thenReturn(false);
- when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
- .thenReturn(true);
+ ShadowUserManager userManager = extract(mContext.getSystemService(UserManager.class));
+ userManager.setIsAdminUser(false);
+ ShadowConnectivityManager connectivityManager =
+ extract(mContext.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, true);
mController = new MobileNetworkPreferenceController(mContext);
assertThat(mController.isAvailable()).isFalse();
@@ -93,11 +88,11 @@
@Test
public void wifiOnly_prefIsNotAvailable() {
- when(mUserManager.isAdminUser()).thenReturn(true);
- when(mUserManager.hasUserRestriction(anyString(), any(UserHandle.class)))
- .thenReturn(false);
- when(mConnectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE))
- .thenReturn(false);
+ ShadowUserManager userManager = extract(mContext.getSystemService(UserManager.class));
+ userManager.setIsAdminUser(true);
+ ShadowConnectivityManager connectivityManager =
+ extract(mContext.getSystemService(ConnectivityManager.class));
+ connectivityManager.setNetworkSupported(ConnectivityManager.TYPE_MOBILE, false);
mController = new MobileNetworkPreferenceController(mContext);
assertThat(mController.isAvailable()).isFalse();
@@ -142,5 +137,4 @@
// Carrier name should be set.
verify(mPreference).setSummary(testCarrierName);
}
-
}
diff --git a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
index c1a7d05..ac158b6 100644
--- a/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/notification/BadgingNotificationPreferenceControllerTest.java
@@ -16,6 +16,14 @@
package com.android.settings.notification;
+import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.content.ContentResolver;
import android.content.Context;
import android.provider.Settings;
@@ -38,16 +46,6 @@
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
-import static android.provider.Settings.Secure.NOTIFICATION_BADGING;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
@RunWith(RobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BadgingNotificationPreferenceControllerTest {
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeScheduleRuleSettingsTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeScheduleRuleSettingsTest.java
new file mode 100644
index 0000000..f8e5775
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeScheduleRuleSettingsTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.notification;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.Intent;
+import android.os.UserManager;
+
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.testutils.shadow.SettingsShadowResources;
+import com.android.settings.testutils.shadow.ShadowUserManager;
+
+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.shadows.ShadowToast;
+import org.robolectric.RuntimeEnvironment;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.robolectric.RuntimeEnvironment.application;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH,
+ sdk = TestConfig.SDK_VERSION,
+ shadows = {
+ SettingsShadowResources.class,
+ SettingsShadowResources.SettingsShadowTheme.class,
+ })
+public class ZenModeScheduleRuleSettingsTest {
+
+ @Mock
+ private Activity mActivity;
+
+ @Mock
+ private Intent mIntent;
+
+ @Mock
+ private UserManager mUserManager;
+
+ private TestFragment mFragment;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+
+ mFragment = spy(new TestFragment());
+ mFragment.onAttach(application);
+
+ doReturn(mActivity).when(mFragment).getActivity();
+
+ Resources res = application.getResources();
+
+ doReturn(res).when(mFragment).getResources();
+ when(mActivity.getTheme()).thenReturn(res.newTheme());
+ when(mActivity.getIntent()).thenReturn(mIntent);
+ when(mActivity.getResources()).thenReturn(res);
+ when(mFragment.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
+ }
+
+ @Test
+ public void onCreate_noRuleId_shouldToastAndFinishAndNoCrash() {
+ final Context ctx = application.getApplicationContext();
+ final String expected = ctx.getResources().getString(R.string.zen_mode_rule_not_found_text);
+
+ mFragment.onCreate(null);
+
+ // verify the toast
+ assertThat(ShadowToast.getTextOfLatestToast()).isEqualTo(expected);
+
+ // verify the finish
+ verify(mActivity).finish();
+
+ //shoud not crash
+ }
+
+ public static class TestFragment extends ZenModeScheduleRuleSettings {
+
+ @Override
+ protected Object getSystemService(final String name) {
+ return null;
+ }
+
+ @Override
+ protected void maybeRefreshRules(boolean success, boolean fireChanged) {
+ //do nothing
+ }
+ }
+
+}
diff --git a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
index 716e2b2..fa2c6b9 100644
--- a/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
+++ b/tests/robotests/src/com/android/settings/notification/ZenModeSettingsTest.java
@@ -16,12 +16,18 @@
package com.android.settings.notification;
+import static com.google.common.truth.Truth.assertThat;
+
+import static junit.framework.Assert.assertTrue;
+
import android.app.NotificationManager;
import android.content.Context;
+import android.provider.SearchIndexableResource;
+import android.provider.Settings;
import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -29,9 +35,7 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import static com.google.common.truth.Truth.assertThat;
-
-import static junit.framework.Assert.assertTrue;
+import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -39,62 +43,47 @@
private ZenModeSettings.SummaryBuilder mBuilder;
private Context mContext;
+ private ZenModeSettings mSettings;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application.getApplicationContext();
+ mSettings = new ZenModeSettings();
mBuilder = new ZenModeSettings.SummaryBuilder(mContext);
}
@Test
- public void testAppend_conditionFalse_shouldNotAppend() {
- String original = "test";
-
- final String result = mBuilder.append(original, false, R.string.zen_mode_alarms);
-
- assertThat(result).isEqualTo(original);
- }
-
- @Test
- public void testAppend_conditionTrue_shouldAppend() {
- String original = "test";
- String alarm = mContext.getString(R.string.zen_mode_alarms);
-
- final String result = mBuilder.append(original, true, R.string.zen_mode_alarms);
-
- assertThat(result).contains(alarm);
- assertThat(result).contains(original);
- assertTrue(result.indexOf(original) < result.indexOf(alarm));
- }
-
- @Test
- public void testPrepend() {
- String original = mContext.getString(R.string.zen_mode_alarms);
- String reminders = mContext.getString(R.string.zen_mode_reminders);
-
- final String result = mBuilder.prepend(original, true, R.string.zen_mode_reminders);
- assertThat(result).contains(original);
- assertThat(result).contains(reminders);
- assertTrue(result.indexOf(reminders) < result.indexOf(original));
- }
-
- @Test
- public void testGetPrioritySettingSummary_sameOrderAsTargetPage() {
+ public void testGetBehaviorSettingSummary_sameOrderAsTargetPage() {
NotificationManager.Policy policy = new NotificationManager.Policy(
NotificationManager.Policy.PRIORITY_CATEGORY_EVENTS
- | NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS,
+ | NotificationManager.Policy.PRIORITY_CATEGORY_REMINDERS
+ | NotificationManager.Policy.PRIORITY_CATEGORY_ALARMS
+ | NotificationManager.Policy.PRIORITY_CATEGORY_MEDIA_SYSTEM_OTHER,
0, 0);
- final String result = mBuilder.getPrioritySettingSummary(policy);
+ final String result = mBuilder.getBehaviorSettingSummary(policy,
+ Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS);
- String alarms = mContext.getString(R.string.zen_mode_alarms);
- String reminders = mContext.getString(R.string.zen_mode_reminders);
- String events = mContext.getString(R.string.zen_mode_events);
+ String alarms = mContext.getString(R.string.zen_mode_alarms).toLowerCase();
+ String reminders = mContext.getString(R.string.zen_mode_reminders).toLowerCase();
+ String events = mContext.getString(R.string.zen_mode_events).toLowerCase();
+ String media = mContext.getString(R.string.zen_mode_media_system_other).toLowerCase();
assertThat(result).contains(alarms);
assertThat(result).contains(reminders);
assertThat(result).contains(events);
- assertTrue(result.indexOf(reminders) < result.indexOf(events) &&
- result.indexOf(events) < result.indexOf(alarms));
+ assertThat(result).contains(media);
+ assertTrue(result.indexOf(alarms) < result.indexOf(media)
+ && result.indexOf(media) < result.indexOf(reminders)
+ && result.indexOf(reminders) < result.indexOf(events));
+ }
+
+ @Test
+ public void searchProvider_shouldIndexDefaultXml() {
+ final List<SearchIndexableResource> sir = mSettings.SEARCH_INDEX_DATA_PROVIDER
+ .getXmlResourcesToIndex(mContext, true /* enabled */);
+
+ assertThat(sir).hasSize(1);
+ assertThat(sir.get(0).xmlResId).isEqualTo(R.xml.zen_mode_settings);
}
}
diff --git a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
index 3bfa936..126abb9 100644
--- a/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
+++ b/tests/robotests/src/com/android/settings/search/DatabaseIndexingUtilsTest.java
@@ -23,10 +23,10 @@
import android.util.ArrayMap;
import com.android.internal.hardware.AmbientDisplayConfiguration;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.deviceinfo.SystemUpdatePreferenceController;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
diff --git a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
index a3826f6..4ec080c 100644
--- a/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
+++ b/tests/robotests/src/com/android/settings/search/IntentSearchViewHolderTest.java
@@ -221,7 +221,8 @@
assertThat(mHolder.summaryView.getText()).isEqualTo(SUMMARY);
assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.VISIBLE);
verify(mFragment).onSearchResultClicked(eq(mHolder), any(SearchResult.class));
- verify(mFragment).startActivity(result.payload.getIntent());
+ verify(mFragment).startActivityForResult(result.payload.getIntent(),
+ IntentSearchViewHolder.REQUEST_CODE_NO_OP);
}
@Test
@@ -237,7 +238,8 @@
assertThat(mHolder.summaryView.getText()).isEqualTo(SUMMARY);
assertThat(mHolder.summaryView.getVisibility()).isEqualTo(View.VISIBLE);
verify(mFragment).onSearchResultClicked(eq(mHolder), any(SearchResult.class));
- verify(mFragment, never()).startActivity(any(Intent.class));
+ verify(mFragment, never()).startActivityForResult(result.payload.getIntent(),
+ IntentSearchViewHolder.REQUEST_CODE_NO_OP);
}
private SearchResult getSearchResult(String title, String summary, Drawable icon) {
diff --git a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
index 30ffaf8..050d7aa 100644
--- a/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchFeatureProviderImplTest.java
@@ -17,8 +17,10 @@
package com.android.settings.search;
+import static com.google.common.truth.Truth.assertThat;
+
import android.app.Activity;
-import android.view.Menu;
+import android.content.ComponentName;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.SiteMapManager;
@@ -27,23 +29,16 @@
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.Robolectric;
import org.robolectric.annotation.Config;
-import static com.google.common.truth.Truth.assertThat;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SearchFeatureProviderImplTest {
private SearchFeatureProviderImpl mProvider;
private Activity mActivity;
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private Menu menu;
-
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -76,4 +71,20 @@
assertThat(loader.mQuery).isEqualTo(query.trim());
}
+ @Test(expected = IllegalArgumentException.class)
+ public void verifyLaunchSearchResultPageCaller_nullCaller_shouldCrash() {
+ mProvider.verifyLaunchSearchResultPageCaller(mActivity, null /* caller */);
+ }
+
+ @Test(expected = SecurityException.class)
+ public void everifyLaunchSearchResultPageCaller_badCaller_shouldCrash() {
+ final ComponentName cn = new ComponentName("pkg", "class");
+ mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
+ }
+
+ @Test
+ public void verifyLaunchSearchResultPageCaller_goodCaller_shouldNotCrash() {
+ final ComponentName cn = new ComponentName(mActivity.getPackageName(), "class");
+ mProvider.verifyLaunchSearchResultPageCaller(mActivity, cn);
+ }
}
diff --git a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java
index 4976c6a..b897008 100644
--- a/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchFragmentTest.java
@@ -43,6 +43,7 @@
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.TestConfig;
+import com.android.settings.core.instrumentation.VisibilityLoggerMixin;
import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
@@ -207,8 +208,6 @@
verify(mFeatureFactory.metricsFeatureProvider, never()).action(
any(Context.class),
eq(MetricsProto.MetricsEvent.ACTION_LEAVE_SEARCH_RESULT_WITHOUT_QUERY));
- verify(mFeatureFactory.metricsFeatureProvider).histogram(
- any(Context.class), eq(SearchFragment.RESULT_CLICK_COUNT), eq(0));
verify(mFeatureFactory.searchFeatureProvider)
.getDatabaseSearchLoader(any(Context.class), anyString());
verify(mFeatureFactory.searchFeatureProvider)
@@ -231,6 +230,10 @@
any(Context.class),
anyInt(),
eq(MetricsProto.MetricsEvent.SETTINGS_SEARCH_NO_RESULT));
+ verify(mFeatureFactory.metricsFeatureProvider).action(
+ any(VisibilityLoggerMixin.class),
+ eq(MetricsProto.MetricsEvent.ACTION_SEARCH_RESULTS),
+ eq(1));
}
@Test
diff --git a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
index 1ddff90..0e3ce50 100644
--- a/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
+++ b/tests/robotests/src/com/android/settings/search/SearchIndexableResourcesTest.java
@@ -17,20 +17,16 @@
package com.android.settings.search;
import static android.provider.SearchIndexablesContract.COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE;
-import static com.android.settings.search.SearchIndexableResources.NO_DATA_RES_ID;
-
+import static com.android.settings.search.SearchIndexableResources.NO_RES_ID;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
-import android.annotation.DrawableRes;
-import android.annotation.XmlRes;
import android.database.Cursor;
import android.provider.SearchIndexableResource;
-
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.settings.wifi.WifiSettings;
import org.junit.After;
@@ -46,11 +42,6 @@
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class SearchIndexableResourcesTest {
- @XmlRes
- private static final int XML_RES_ID = R.xml.physical_keyboard_settings;
- @DrawableRes
- private static final int ICON_RES_ID = R.drawable.ic_settings_language;
-
Map<String, SearchIndexableResource> sResMapCopy;
@Before
@@ -72,14 +63,14 @@
assertThat(SearchIndexableResources.getResourceByName("java.lang.String")).isNull();
final int beforeCount = SearchIndexableResources.values().size();
- SearchIndexableResources.addIndex(java.lang.String.class, XML_RES_ID, ICON_RES_ID);
+ SearchIndexableResources.addIndex(java.lang.String.class);
final SearchIndexableResource index = SearchIndexableResources
.getResourceByName("java.lang.String");
assertThat(index).isNotNull();
assertThat(index.className).isEqualTo("java.lang.String");
- assertThat(index.xmlResId).isEqualTo(XML_RES_ID);
- assertThat(index.iconResId).isEqualTo(ICON_RES_ID);
+ assertThat(index.xmlResId).isEqualTo(NO_RES_ID);
+ assertThat(index.iconResId).isEqualTo(NO_RES_ID);
final int afterCount = SearchIndexableResources.values().size();
assertThat(afterCount).isEqualTo(beforeCount + 1);
}
@@ -91,20 +82,20 @@
assertThat(index).isNotNull();
assertThat(index.className).isEqualTo(WifiSettings.class.getName());
- assertThat(index.xmlResId).isEqualTo(NO_DATA_RES_ID);
- assertThat(index.iconResId).isEqualTo(R.drawable.ic_settings_wireless);
+ assertThat(index.xmlResId).isEqualTo(NO_RES_ID);
+ assertThat(index.iconResId).isEqualTo(NO_RES_ID);
}
@Test
public void testNonIndexableKeys_GetsKeyFromProvider() {
SearchIndexableResources.sResMap.clear();
- SearchIndexableResources.addIndex(FakeIndexProvider.class, 0, 0);
+ SearchIndexableResources.addIndex(FakeIndexProvider.class);
SettingsSearchIndexablesProvider provider = spy(new SettingsSearchIndexablesProvider());
Cursor cursor = provider.queryNonIndexableKeys(null);
boolean hasTestKey = false;
- while(cursor.moveToNext()) {
+ while (cursor.moveToNext()) {
String key = cursor.getString(COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE);
if (TextUtils.equals(key, FakeIndexProvider.KEY)) {
hasTestKey = true;
diff --git a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java b/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
index 5d2a977..b2ce3a7 100644
--- a/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
+++ b/tests/robotests/src/com/android/settings/search/XmlParserUtilTest.java
@@ -17,14 +17,16 @@
package com.android.settings.search;
-import android.content.res.XmlResourceParser;
+import static com.google.common.truth.Truth.assertThat;
+
import android.content.Context;
+import android.content.res.XmlResourceParser;
import android.util.AttributeSet;
import android.util.Xml;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -33,8 +35,6 @@
import org.robolectric.shadows.ShadowApplication;
import org.xmlpull.v1.XmlPullParser;
-import static com.google.common.truth.Truth.assertThat;
-
/**
* These tests use a series of preferences that have specific attributes which are sometimes
* uncommon (such as summaryOn).
@@ -94,26 +94,21 @@
}
@Test
- public void testDataSummaryOnValid_ReturnsPreferenceSummaryOn() {
- XmlResourceParser parser = getChildByType(R.xml.application_settings, "CheckBoxPreference");
+ @Config(qualifiers = "mcc999")
+ public void testDataSummaryOnOffValid_ReturnsPreferenceSummaryOnOff() {
+ XmlResourceParser parser = getChildByType(R.xml.display_settings, "CheckBoxPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
- String summary = XmlParserUtils.getDataSummaryOn(mContext, attrs);
- String expSummary = mContext.getString(R.string.advanced_settings_summary);
- assertThat(summary).isEqualTo(expSummary);
+
+ assertThat(XmlParserUtils.getDataSummaryOn(mContext, attrs))
+ .isEqualTo("summary_on");
+ assertThat(XmlParserUtils.getDataSummaryOff(mContext, attrs))
+ .isEqualTo("summary_off");
}
@Test
- public void testDataSummaryOffValid_ReturnsPreferenceSummaryOff() {
- XmlResourceParser parser = getChildByType(R.xml.application_settings, "CheckBoxPreference");
- final AttributeSet attrs = Xml.asAttributeSet(parser);
- String summary = XmlParserUtils.getDataSummaryOff(mContext, attrs);
- String expSummary = mContext.getString(R.string.advanced_settings_summary);
- assertThat(summary).isEqualTo(expSummary);
- }
-
- @Test
+ @Config(qualifiers = "mcc999")
public void testDataEntriesValid_ReturnsPreferenceEntries() {
- XmlResourceParser parser = getChildByType(R.xml.application_settings, "ListPreference");
+ XmlResourceParser parser = getChildByType(R.xml.display_settings, "ListPreference");
final AttributeSet attrs = Xml.asAttributeSet(parser);
String entries = XmlParserUtils.getDataEntries(mContext, attrs);
String[] expEntries = mContext.getResources()
@@ -124,7 +119,6 @@
}
// Null checks
-
@Test
public void testDataKeyInvalid_ReturnsNull() {
XmlResourceParser parser = getParentPrimedParser(R.xml.display_settings);
@@ -185,7 +179,7 @@
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
&& type != XmlPullParser.START_TAG) {
}
- while(parser.getName() != xmlType) {
+ while (parser.getName() != xmlType) {
parser.next();
}
} catch (Exception e) {
diff --git a/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java b/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java
index cac6f3a..1612036 100644
--- a/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java
+++ b/tests/robotests/src/com/android/settings/search/indexing/IndexDataConverterTest.java
@@ -334,6 +334,17 @@
assertThat(nonTitlePref.enabled).isTrue();
}
+ @Test
+ public void testResourceWithoutXml_shouldNotCrash() {
+ final SearchIndexableResource resource = getFakeResource(0);
+ final PreIndexData preIndexData = new PreIndexData();
+ preIndexData.dataToUpdate.add(resource);
+
+ List<IndexData> indexData = mConverter.convertPreIndexDataToIndexData(preIndexData);
+
+ assertThat(indexData).isEmpty();
+ }
+
private void assertDisplaySetting(IndexData row, String title, String summaryOn,
String summaryOff, String key) {
assertThat(row.normalizedTitle).isEqualTo(title);
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
index 4c05665..742fbf8 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowConnectivityManager.java
@@ -17,6 +17,7 @@
package com.android.settings.testutils.shadow;
import android.net.ConnectivityManager;
+import android.util.SparseBooleanArray;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
@@ -24,14 +25,14 @@
@Implements(ConnectivityManager.class)
public class ShadowConnectivityManager extends org.robolectric.shadows.ShadowConnectivityManager {
- private static boolean mIsNetworkSupported;
+ private final SparseBooleanArray mSupportedNetworkTypes = new SparseBooleanArray();
+
+ public void setNetworkSupported(int networkType, boolean supported) {
+ mSupportedNetworkTypes.put(networkType, supported);
+ }
@Implementation
public boolean isNetworkSupported(int networkType) {
- return mIsNetworkSupported;
- }
-
- public static void setIsNetworkSupported(boolean isNetworkSupported) {
- mIsNetworkSupported = isNetworkSupported;
+ return mSupportedNetworkTypes.get(networkType);
}
}
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
index 4d4fd62..888fa36 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUserManager.java
@@ -37,6 +37,16 @@
public class ShadowUserManager extends org.robolectric.shadows.ShadowUserManager {
private SparseArray<UserInfo> mUserInfos = new SparseArray<>();
+ private boolean mAdminUser;
+
+ public void setIsAdminUser(boolean isAdminUser) {
+ mAdminUser = isAdminUser;
+ }
+
+ @Implementation
+ public boolean isAdminUser() {
+ return mAdminUser;
+ }
public void setUserInfo(int userHandle, UserInfo userInfo) {
mUserInfos.put(userHandle, userInfo);
diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
index bfeb3c7..0691086 100644
--- a/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
+++ b/tests/robotests/src/com/android/settings/testutils/shadow/ShadowUtils.java
@@ -55,11 +55,6 @@
sIsDemoUser = false;
}
- @Implementation
- public static boolean isWifiOnly(Context context) {
- return true;
- }
-
public static void setIsDemoUser(boolean isDemoUser) {
sIsDemoUser = isDemoUser;
}
diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
index 73d001a..470b69c 100644
--- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
+++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java
@@ -16,38 +16,6 @@
package com.android.settings.webview;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageItemInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.UserInfo;
-import android.os.UserManager;
-
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
-import com.android.settings.TestConfig;
-import com.android.settings.applications.defaultapps.DefaultAppInfo;
-import com.android.settings.core.instrumentation.MetricsFeatureProvider;
-import com.android.settings.testutils.FakeFeatureFactory;
-import com.android.settings.widget.RadioButtonPreference;
-import com.android.settings.wrapper.UserPackageWrapper;
-import com.android.settingslib.wrapper.PackageManagerWrapper;
-
-import org.junit.Before;
-import org.junit.BeforeClass;
-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.util.ReflectionHelpers;
-
-import java.util.Arrays;
-
import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
@@ -62,22 +30,47 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageItemInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+
+import com.android.settings.TestConfig;
+import com.android.settings.applications.defaultapps.DefaultAppInfo;
+import com.android.settings.core.instrumentation.MetricsFeatureProvider;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settings.widget.RadioButtonPreference;
+import com.android.settings.wrapper.UserPackageWrapper;
+import com.android.settingslib.wrapper.PackageManagerWrapper;
+
+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.util.ReflectionHelpers;
+
+import java.util.Arrays;
+
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class WebViewAppPickerTest {
private Context mContext = RuntimeEnvironment.application;
- private static UserInfo sFirstUser;
- private static UserInfo sSecondUser;
+ private UserInfo mFirstUser;
+ private UserInfo mSecondUser;
private final static String DEFAULT_PACKAGE_NAME = "DEFAULT_PACKAGE_NAME";
- @BeforeClass
- public static void beforeClass() {
- sFirstUser = new UserInfo(0, "FIRST_USER", 0);
- sSecondUser = new UserInfo(0, "SECOND_USER", 0);
- }
-
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Activity mActivity;
@Mock
@@ -99,7 +92,8 @@
MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest(mActivity);
when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
-
+ mFirstUser = new UserInfo(0, "FIRST_USER", 0);
+ mSecondUser = new UserInfo(0, "SECOND_USER", 0);
mPicker = new WebViewAppPicker();
mPicker = spy(mPicker);
doNothing().when(mPicker).updateCandidates();
@@ -174,7 +168,7 @@
@Test
public void testDisabledPackageShownAsDisabled() {
String disabledReason = "disabled";
- DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager,
+ DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager,
createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason);
RadioButtonPreference mockPreference = mock(RadioButtonPreference.class);
@@ -189,7 +183,7 @@
@Test
public void testEnabledPackageShownAsEnabled() {
String disabledReason = "";
- DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager,
+ DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager,
createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason);
RadioButtonPreference mockPreference = mock(RadioButtonPreference.class);
@@ -204,7 +198,7 @@
@Test
public void testDisabledPackageShowsDisabledReasonSummary() {
String disabledReason = "disabled";
- DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager,
+ DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager,
createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason);
RadioButtonPreference mockPreference = mock(RadioButtonPreference.class);
@@ -220,7 +214,7 @@
@Test
public void testEnabledPackageShowsEmptySummary() {
String disabledReason = null;
- DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager,
+ DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager,
createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason);
RadioButtonPreference mockPreference = mock(RadioButtonPreference.class);
@@ -268,14 +262,14 @@
UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
- when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser);
+ when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)))
.thenReturn(Arrays.asList(packageForFirstUser));
final String EXPECTED_DISABLED_REASON = String.format(
- "(disabled for user %s)", sFirstUser.name);
+ "(disabled for user %s)", mFirstUser.name);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext,
DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON);
}
@@ -285,14 +279,14 @@
UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(true);
when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
- when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser);
+ when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)))
.thenReturn(Arrays.asList(packageForFirstUser));
final String EXPECTED_DISABLED_REASON = String.format(
- "(uninstalled for user %s)", sFirstUser.name);
+ "(uninstalled for user %s)", mFirstUser.name);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext,
DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON);
}
@@ -302,19 +296,19 @@
UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
when(packageForFirstUser.isInstalledPackage()).thenReturn(true);
- when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser);
+ when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
when(packageForSecondUser.isInstalledPackage()).thenReturn(false);
- when(packageForSecondUser.getUserInfo()).thenReturn(sSecondUser);
+ when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)))
.thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
final String EXPECTED_DISABLED_REASON = String.format(
- "(disabled for user %s)", sFirstUser.name);
+ "(disabled for user %s)", mFirstUser.name);
assertThat(mPicker.getDisabledReason(
wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON);
}
@@ -328,19 +322,19 @@
UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class);
when(packageForFirstUser.isEnabledPackage()).thenReturn(false);
when(packageForFirstUser.isInstalledPackage()).thenReturn(false);
- when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser);
+ when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser);
UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class);
when(packageForSecondUser.isEnabledPackage()).thenReturn(true);
when(packageForSecondUser.isInstalledPackage()).thenReturn(true);
- when(packageForSecondUser.getUserInfo()).thenReturn(sSecondUser);
+ when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser);
WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class);
when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME)))
.thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser));
final String EXPECTED_DISABLED_REASON = String.format(
- "(uninstalled for user %s)", sFirstUser.name);
+ "(uninstalled for user %s)", mFirstUser.name);
assertThat(mPicker.getDisabledReason(wvusWrapper, mContext,
DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON);
}
@@ -354,7 +348,7 @@
PackageItemInfo mockPackageItemInfo = mock(PackageItemInfo.class);
mockPackageItemInfo.packageName = DEFAULT_PACKAGE_NAME;
when(mockPackageItemInfo.loadLabel(any())).thenReturn("myPackage");
- DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager,
+ DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager,
mockPackageItemInfo, "" /* disabledReason */);
PackageInfo packageInfo = new PackageInfo();
diff --git a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java
index df45ad5..7d8ee52 100644
--- a/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java
+++ b/tests/robotests/src/com/android/settings/wfd/WifiDisplaySettingsTest.java
@@ -16,16 +16,23 @@
package com.android.settings.wfd;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.app.Activity;
import android.content.Context;
import android.hardware.display.DisplayManager;
import android.media.MediaRouter;
import android.net.wifi.p2p.WifiP2pManager;
+import android.os.ServiceManager;
import com.android.settings.R;
-import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.dashboard.SummaryLoader;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
@@ -34,12 +41,6 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class WifiDisplaySettingsTest {
@@ -89,7 +90,15 @@
public void isAvailable_noService_shouldReturnFalse() {
assertThat(WifiDisplaySettings.isAvailable(mActivity))
.isFalse();
+ }
+ @Test
+ public void isAvailable_throwException_shouldReturnFalse() {
+ when(mActivity.getSystemService(Context.WIFI_P2P_SERVICE))
+ .thenThrow(new IllegalStateException());
+
+ assertThat(WifiDisplaySettings.isAvailable(mActivity))
+ .isFalse();
}
@Test
diff --git a/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java
index e061787..59be160 100644
--- a/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/ValidatedEditTextPreferenceTest.java
@@ -17,6 +17,14 @@
package com.android.settings.widget;
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyInt;
+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.text.InputType;
import android.text.TextWatcher;
import android.view.View;
@@ -33,14 +41,6 @@
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.anyInt;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class ValidatedEditTextPreferenceTest {
diff --git a/tests/robotests/src/com/android/settings/widget/WorkOnlyCategoryPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/widget/WorkOnlyCategoryPreferenceControllerTest.java
new file mode 100644
index 0000000..9c7e8fc
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/widget/WorkOnlyCategoryPreferenceControllerTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.widget;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class WorkOnlyCategoryPreferenceControllerTest {
+
+ private Context mContext;
+ private WorkOnlyCategoryPreferenceController mController;
+ private List<AbstractPreferenceController> mChildren;
+
+ @Before
+ public void setUp() {
+ mContext = RuntimeEnvironment.application;
+ mChildren = new ArrayList<>();
+ mController = new WorkOnlyCategoryPreferenceController(mContext, "pref_key", mChildren);
+ }
+
+ @Test
+ public void isAvailable_noChildren_true() {
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void isAvailable_childrenAvailable_true() {
+ final AbstractPreferenceController child = mock(AbstractPreferenceController.class);
+ when(child.isAvailable()).thenReturn(true);
+ mChildren.add(child);
+
+ assertThat(mController.isAvailable()).isTrue();
+ }
+
+ @Test
+ public void isAvailable_childrenUnavailable_false() {
+ final AbstractPreferenceController child = mock(AbstractPreferenceController.class);
+ when(child.isAvailable()).thenReturn(false);
+ mChildren.add(child);
+
+ assertThat(mController.isAvailable()).isFalse();
+ }
+}
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
index 3dcdc91..e9b6146 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiConfigControllerTest.java
@@ -55,8 +55,9 @@
private AccessPoint mAccessPoint;
public WifiConfigController mController;
-
- // An invalid PSK pass phrase. It is 64 characters long, must not be greater than 63
+ private static final String HEX_PSK = "01234567012345670123456701234567012345670123456701234567"
+ + "01abcdef";
+ // An invalid ASCII PSK pass phrase. It is 64 characters long, must not be greater than 63
private static final String LONG_PSK =
"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl";
// An invalid PSK pass phrase. It is 7 characters long, must be at least 8
@@ -141,6 +142,14 @@
}
@Test
+ public void isSubmittable_hexPsk_shouldReturnTrue() {
+ final TextView password = mView.findViewById(R.id.password);
+ password.setText(HEX_PSK);
+ assertThat(mController.isSubmittable()).isTrue();
+
+ }
+
+ @Test
public void isSubmittable_savedConfigZeroLengthPassword_shouldReturnTrue() {
final TextView password = mView.findViewById(R.id.password);
password.setText("");
diff --git a/tests/unit/Android.mk b/tests/unit/Android.mk
index a91dcb1..ec0f0b6 100644
--- a/tests/unit/Android.mk
+++ b/tests/unit/Android.mk
@@ -5,7 +5,7 @@
LOCAL_MODULE_TAGS := tests
LOCAL_CERTIFICATE := platform
-LOCAL_JAVA_LIBRARIES := android.test.runner
+LOCAL_JAVA_LIBRARIES := android.test.runner telephony-common ims-common
LOCAL_STATIC_JAVA_LIBRARIES := \
android-support-test \
diff --git a/tests/unit/src/com/android/settings/applications/ManageApplicationsUnitTest.java b/tests/unit/src/com/android/settings/applications/manageapplications/ManageApplicationsUnitTest.java
similarity index 94%
rename from tests/unit/src/com/android/settings/applications/ManageApplicationsUnitTest.java
rename to tests/unit/src/com/android/settings/applications/manageapplications/ManageApplicationsUnitTest.java
index ce8603b..87a24d6 100644
--- a/tests/unit/src/com/android/settings/applications/ManageApplicationsUnitTest.java
+++ b/tests/unit/src/com/android/settings/applications/manageapplications/ManageApplicationsUnitTest.java
@@ -14,7 +14,10 @@
* limitations under the License.
*/
-package com.android.settings.applications;
+package com.android.settings.applications.manageapplications;
+
+import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.mock;
import android.content.pm.ApplicationInfo;
import android.support.test.filters.SmallTest;
@@ -23,15 +26,13 @@
import com.android.settingslib.applications.AppUtils;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppFilter;
-
import com.android.settingslib.applications.ApplicationsState.CompoundFilter;
import com.android.settingslib.applications.instantapps.InstantAppDataProvider;
-import java.lang.reflect.Field;
+
import org.junit.Test;
import org.junit.runner.RunWith;
-import static com.google.common.truth.Truth.assertThat;
-import static org.mockito.Mockito.mock;
+import java.lang.reflect.Field;
@SmallTest
@RunWith(AndroidJUnit4.class)
@@ -101,10 +102,10 @@
field.set(AppUtils.class, (InstantAppDataProvider) (i -> true));
AppFilter filter =
- ManageApplications.getCompositeFilter(
- ManageApplications.LIST_TYPE_STORAGE,
- ManageApplications.STORAGE_TYPE_MUSIC,
- "uuid");
+ ManageApplications.getCompositeFilter(
+ ManageApplications.LIST_TYPE_STORAGE,
+ ManageApplications.STORAGE_TYPE_MUSIC,
+ "uuid");
AppFilter composedFilter = new CompoundFilter(ApplicationsState.FILTER_INSTANT, filter);
final ApplicationInfo info = new ApplicationInfo();
diff --git a/tests/unit/src/com/android/settings/utils/MockedServiceManager.java b/tests/unit/src/com/android/settings/utils/MockedServiceManager.java
new file mode 100644
index 0000000..ea04974
--- /dev/null
+++ b/tests/unit/src/com/android/settings/utils/MockedServiceManager.java
@@ -0,0 +1,107 @@
+/*
+ * 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;
+
+import android.os.IBinder;
+import android.os.ServiceManager;
+import android.util.Log;
+
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+// This class is for replacing existing system service with the mocked service.
+// Copied from CellBroadcastReceiver app.
+public final class MockedServiceManager {
+
+ private final String TAG = MockedServiceManager.class.getSimpleName();
+
+ private final HashMap<String, IBinder> mServiceManagerMockedServices = new HashMap<>();
+
+ private final HashMap<InstanceKey, Object> mOldInstances = new HashMap<>();
+
+ private final LinkedList<InstanceKey> mInstanceKeys = new LinkedList<>();
+
+ private static class InstanceKey {
+ final Class mClass;
+ final String mInstName;
+ final Object mObj;
+
+ InstanceKey(final Class c, final String instName, final Object obj) {
+ mClass = c;
+ mInstName = instName;
+ mObj = obj;
+ }
+
+ @Override
+ public int hashCode() {
+ return (mClass.getName().hashCode() * 31 + mInstName.hashCode()) * 31;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == null || obj.getClass() != getClass()) {
+ return false;
+ }
+
+ InstanceKey other = (InstanceKey) obj;
+ return (other.mClass == mClass && other.mInstName.equals(mInstName)
+ && other.mObj == mObj);
+ }
+ }
+
+ public MockedServiceManager() throws Exception {
+ replaceInstance(ServiceManager.class, "sCache", null, mServiceManagerMockedServices);
+ }
+
+ public void replaceService(String key, IBinder binder) {
+ mServiceManagerMockedServices.put(key, binder);
+ }
+
+ public void restoreAllServices() throws Exception {
+ restoreInstances();
+ }
+
+ public synchronized void replaceInstance(final Class c, final String instanceName,
+ final Object obj, final Object newValue)
+ throws Exception {
+ Field field = c.getDeclaredField(instanceName);
+ field.setAccessible(true);
+
+ InstanceKey key = new InstanceKey(c, instanceName, obj);
+ if (!mOldInstances.containsKey(key)) {
+ mOldInstances.put(key, field.get(obj));
+ mInstanceKeys.add(key);
+ }
+ field.set(obj, newValue);
+ }
+
+ public synchronized void restoreInstances() throws Exception {
+ Iterator<InstanceKey> it = mInstanceKeys.descendingIterator();
+
+ while (it.hasNext()) {
+ InstanceKey key = it.next();
+ Field field = key.mClass.getDeclaredField(key.mInstName);
+ field.setAccessible(true);
+ field.set(key.mObj, mOldInstances.get(key));
+ }
+
+ mInstanceKeys.clear();
+ mOldInstances.clear();
+ }
+}
diff --git a/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java b/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java
new file mode 100644
index 0000000..16617d0
--- /dev/null
+++ b/tests/unit/src/com/android/settings/wifi/WifiCallingSettingUiTest.java
@@ -0,0 +1,299 @@
+/**
+ * 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;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.action.ViewActions.click;
+import static android.support.test.espresso.assertion.ViewAssertions.doesNotExist;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.isSelected;
+import static android.support.test.espresso.matcher.ViewMatchers.withResourceName;
+import static android.support.test.espresso.matcher.ViewMatchers.withText;
+
+import static org.hamcrest.CoreMatchers.allOf;
+import static org.hamcrest.CoreMatchers.anything;
+import static org.junit.Assert.assertEquals;
+import static org.junit.matchers.JUnitMatchers.containsString;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.doReturn;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
+import android.content.Intent;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.espresso.NoMatchingViewException;
+import android.support.test.espresso.ViewInteraction;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.UiDevice;
+import android.telephony.SubscriptionInfo;
+
+import com.android.ims.ImsConfig;
+import com.android.ims.ImsManager;
+import com.android.internal.telephony.SubscriptionController;
+import com.android.settings.testutils.MockedServiceManager;
+
+import junit.framework.Assert;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class WifiCallingSettingUiTest {
+ private static final String SUBSCRIPTION0_NAME = "SUB0";
+ private static final String SUBSCRIPTION1_NAME = "SUB1";
+ private static final String WFC_MODE_TITLE = "Calling preference";
+ private static final String WFC_MODE_WIFI_ONLY = "Wi-Fi only";
+ private static final String WFC_MODE_WIFI_PREFERRED = "Wi-Fi preferred";
+ private static final String WFC_MODE_CELLULAR_PREFERRED = "Mobile preferred";
+
+ private Instrumentation mInstrumentation;
+ private Context mContext;
+ private UiDevice mDevice;
+ @Mock
+ SubscriptionController mSubscriptionController;
+ MockedServiceManager mMockedServiceManager;
+ protected HashMap<Integer, ImsManager> mImsManagerInstances = new HashMap<>();
+ List<SubscriptionInfo> mSils = new ArrayList();
+ @Mock
+ SubscriptionInfo mSubscriptionInfo0;
+ @Mock
+ SubscriptionInfo mSubscriptionInfo1;
+ @Mock
+ ImsManager mImsManager0;
+ @Mock
+ ImsManager mImsManager1;
+
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ mInstrumentation = InstrumentationRegistry.getInstrumentation();
+ mContext = mInstrumentation.getTargetContext();
+ mDevice = UiDevice.getInstance(mInstrumentation);
+
+ mMockedServiceManager = new MockedServiceManager();
+ mMockedServiceManager.replaceService("isub", mSubscriptionController);
+
+ mMockedServiceManager.replaceInstance(
+ ImsManager.class, "sImsManagerInstances", null, mImsManagerInstances);
+ mMockedServiceManager.replaceInstance(
+ SubscriptionController.class, "sInstance", null, mSubscriptionController);
+ doReturn(mSubscriptionController)
+ .when(mSubscriptionController).queryLocalInterface(anyString());
+ mImsManagerInstances.put(0, mImsManager0);
+ mImsManagerInstances.put(1, mImsManager1);
+ doReturn(mSils).when(mSubscriptionController).getActiveSubscriptionInfoList(anyString());
+ doReturn(0).when(mSubscriptionController).getPhoneId(0);
+ doReturn(1).when(mSubscriptionController).getPhoneId(1);
+ doReturn(0).when(mSubscriptionInfo0).getSubscriptionId();
+ doReturn(1).when(mSubscriptionInfo1).getSubscriptionId();
+ doReturn(0).when(mSubscriptionInfo0).getSimSlotIndex();
+ doReturn(1).when(mSubscriptionInfo1).getSimSlotIndex();
+ doReturn(SUBSCRIPTION0_NAME).when(mSubscriptionInfo0).getDisplayName();
+ doReturn(SUBSCRIPTION1_NAME).when(mSubscriptionInfo1).getDisplayName();
+
+ doReturn(true).when(mImsManager0).isWfcEnabledByPlatform();
+ doReturn(true).when(mImsManager0).isNonTtyOrTtyOnVolteEnabled();
+ doReturn(true).when(mImsManager1).isWfcEnabledByPlatform();
+ doReturn(true).when(mImsManager1).isNonTtyOrTtyOnVolteEnabled();
+
+ mDevice.wakeUp();
+ mDevice.pressMenu();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ mMockedServiceManager.restoreAllServices();
+ }
+
+ @Test
+ public void testSingleSimUi() throws InterruptedException {
+ configureSingleSim();
+ doReturn(true).when(mImsManager0).isWfcEnabledByUser();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
+ .when(mImsManager0).getWfcMode();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
+ .when(mImsManager0).getWfcMode(anyBoolean());
+
+ mInstrumentation.startActivitySync(createActivityIntent());
+
+ checkSingleSimUi();
+
+ try {
+ mDevice.setOrientationLeft();
+ } catch (Exception e) {
+ Assert.fail("Exception " + e);
+ }
+
+ // Re-check after rotation. Fragment should be recreated properly.
+ checkSingleSimUi();
+
+ try {
+ mDevice.setOrientationNatural();
+ } catch (Exception e) {
+ Assert.fail("Exception " + e);
+ }
+
+ // Re-check after rotation. Fragment should be resumed properly.
+ checkSingleSimUi();
+ }
+
+ private void checkSingleSimUi() {
+ assertEquals(false, checkExists(onView(withText(SUBSCRIPTION0_NAME))));
+ assertEquals(false, checkExists(onView(withText(SUBSCRIPTION1_NAME))));
+ assertEquals(true, checkExists(onView(withText(WFC_MODE_TITLE))));
+ assertEquals(true, checkExists(onView(withText(WFC_MODE_WIFI_PREFERRED))));
+ checkSwitchBarStatus(true, true);
+ checkEmptyViewStatus(false);
+ }
+
+ @Test
+ public void testNoValidSub() throws InterruptedException {
+ configureDualSim();
+ doReturn(false).when(mImsManager0).isWfcEnabledByPlatform();
+ doReturn(false).when(mImsManager0).isNonTtyOrTtyOnVolteEnabled();
+ doReturn(false).when(mImsManager1).isWfcEnabledByPlatform();
+ doReturn(false).when(mImsManager1).isNonTtyOrTtyOnVolteEnabled();
+ doReturn(false).when(mImsManager0).isWfcEnabledByUser();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
+ .when(mImsManager0).getWfcMode();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
+ .when(mImsManager0).getWfcMode(anyBoolean());
+
+ Activity activity = mInstrumentation.startActivitySync(createActivityIntent());
+
+ assertEquals(false, checkExists(onView(withText(SUBSCRIPTION0_NAME))));
+ assertEquals(false, checkExists(onView(withText(SUBSCRIPTION1_NAME))));
+ assertEquals(false, checkExists(onView(withText(WFC_MODE_TITLE))));
+
+ checkSwitchBarStatus(false, false);
+ checkEmptyViewStatus(false);
+ }
+
+ @Test
+ public void testWfcDisabled() throws InterruptedException {
+ configureSingleSim();
+ doReturn(false).when(mImsManager0).isWfcEnabledByUser();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
+ .when(mImsManager0).getWfcMode();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_PREFERRED)
+ .when(mImsManager0).getWfcMode(anyBoolean());
+
+ Activity activity = mInstrumentation.startActivitySync(createActivityIntent());
+
+ assertEquals(false, checkExists(onView(withText(SUBSCRIPTION0_NAME))));
+ assertEquals(false, checkExists(onView(withText(SUBSCRIPTION1_NAME))));
+ assertEquals(false, checkExists(onView(withText(WFC_MODE_TITLE))));
+
+ checkSwitchBarStatus(true, false);
+ checkEmptyViewStatus(true);
+ }
+
+ @Test
+ public void testDualSimUi() throws InterruptedException {
+ configureDualSim();
+ doReturn(true).when(mImsManager0).isWfcEnabledByUser();
+ doReturn(false).when(mImsManager1).isWfcEnabledByUser();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED)
+ .when(mImsManager0).getWfcMode();
+ doReturn(ImsConfig.WfcModeFeatureValueConstants.CELLULAR_PREFERRED)
+ .when(mImsManager0).getWfcMode(anyBoolean());
+
+ mInstrumentation.startActivitySync(createActivityIntent());
+
+ assertEquals(true, checkExists(onView(withText(SUBSCRIPTION0_NAME))));
+ assertEquals(true, checkExists(onView(withText(SUBSCRIPTION1_NAME))));
+ assertEquals(true, checkExists(onView(withText(WFC_MODE_TITLE))));
+ assertEquals(true, checkExists(onView(withText(WFC_MODE_CELLULAR_PREFERRED))));
+
+ onView(withText(SUBSCRIPTION0_NAME)).check(matches(isSelected()));
+ checkSwitchBarStatus(true, true);
+ checkEmptyViewStatus(false);
+
+ // Switch to SUB1.
+ onView(withText(SUBSCRIPTION1_NAME)).perform(click());
+
+ checkSwitchBarStatus(true, false);
+ checkEmptyViewStatus(true);
+ onView(withText(SUBSCRIPTION1_NAME)).check(matches(isSelected()));
+ }
+
+ private boolean checkExists(ViewInteraction v) {
+ try {
+ v.check(matches(isCompletelyDisplayed()));
+ return true;
+ } catch (NoMatchingViewException e) {
+ return false;
+ }
+ }
+
+ private Intent createActivityIntent() {
+ Intent intent = new Intent(mContext,
+ com.android.settings.Settings.WifiCallingSettingsActivity.class);
+ intent.setPackage("com.android.settings");
+ intent.setAction("android.intent.action.MAIN");
+ return intent;
+ }
+
+ private void configureSingleSim() {
+ mSils.clear();
+ mSils.add(mSubscriptionInfo0);
+ }
+
+ private void configureDualSim() {
+ mSils.clear();
+ mSils.add(mSubscriptionInfo0);
+ mSils.add(mSubscriptionInfo1);
+ }
+
+ private void checkSwitchBarStatus(boolean shouldDisplay, boolean statusOn) {
+ if (shouldDisplay) {
+ try {
+ onView(allOf(withResourceName("switch_text"), isCompletelyDisplayed()))
+ .check(matches(withText(containsString(statusOn ? "On" : "Off"))));
+ } catch (Exception e) {
+ Assert.fail("Exception " + e);
+ }
+ } else {
+ onView(allOf(withResourceName("switch_text"), isCompletelyDisplayed()))
+ .check(doesNotExist());
+ }
+ }
+
+ private void checkEmptyViewStatus(boolean shouldDisplay) {
+ try {
+ if (!shouldDisplay) {
+ onView(allOf(withResourceName("empty"), isCompletelyDisplayed()))
+ .check(doesNotExist());
+ } else {
+ onView(allOf(withResourceName("empty"), isCompletelyDisplayed()))
+ .check(matches(anything()));
+ }
+ } catch (Exception e) {
+ Assert.fail("Exception " + e);
+ }
+ }
+}